import { render, screen } from '@testing-library/react'; import { beforeEach, describe, expect, it, vi } from 'vitest'; import { Connected } from '../'; import { useAccount } from 'wagmi'; vi.mock('wagmi', () => ({ useAccount: vi.fn(), })); vi.mock('@/wallet', () => ({ ConnectWallet: () =>
Connect Wallet
, })); describe('Connected', () => { describe('when user is connected', () => { beforeEach(() => { (useAccount as ReturnType).mockReturnValue({ isConnected: true, isConnecting: false, address: '0x123', }); }); it('renders children when user is connected', () => { render(
Connected Content
, ); expect(screen.getByTestId('connected-content')).toBeInTheDocument(); expect(screen.queryByTestId('connect-wallet')).not.toBeInTheDocument(); }); }); describe('when user is not connected', () => { beforeEach(() => { (useAccount as ReturnType).mockReturnValue({ isConnected: false, isConnecting: false, address: undefined, }); }); it('renders the fallback element when user is not connected', () => { render(
Connected Content
, ); expect(screen.queryByTestId('connected-content')).not.toBeInTheDocument(); expect(screen.getByTestId('connect-wallet')).toBeInTheDocument(); }); it('renders custom fallback when provided', () => { render( Custom Fallback} >
Connected Content
, ); expect(screen.queryByTestId('connected-content')).not.toBeInTheDocument(); expect(screen.getByTestId('custom-fallback')).toBeInTheDocument(); expect(screen.queryByTestId('connect-wallet')).not.toBeInTheDocument(); }); it('renders nothing when fallback is null', () => { render(
Connected Content
, ); expect(screen.queryByTestId('connected-content')).not.toBeInTheDocument(); expect(screen.queryByTestId('connect-wallet')).not.toBeInTheDocument(); }); }); describe('when user is connecting', () => { beforeEach(() => { (useAccount as ReturnType).mockReturnValue({ isConnected: false, isConnecting: true, address: undefined, }); }); it('renders default fallback when connecting prop is not provided', () => { render(
Connected Content
, ); expect(screen.queryByTestId('connected-content')).not.toBeInTheDocument(); expect(screen.getByTestId('connect-wallet')).toBeInTheDocument(); }); it('renders connecting element when connecting prop is provided', () => { render( Connecting...} >
Connected Content
, ); expect(screen.queryByTestId('connected-content')).not.toBeInTheDocument(); expect(screen.queryByTestId('connect-wallet')).not.toBeInTheDocument(); expect(screen.getByTestId('connecting-state')).toBeInTheDocument(); }); }); });