import { render, screen } from '@testing-library/react'; import { createContext } from 'react'; import { type Mock, beforeEach, describe, expect, it, vi } from 'vitest'; import { useAccount, useConnect } from 'wagmi'; import { WalletIsland } from './WalletIsland'; import { useWalletContext } from './WalletProvider'; vi.mock('wagmi', () => ({ useAccount: vi.fn(), useConnect: vi.fn(), useConfig: vi.fn(), })); vi.mock('@/identity/hooks/useAvatar', () => ({ useAvatar: () => ({ data: null, isLoading: false }), })); vi.mock('@/identity/hooks/useName', () => ({ useName: () => ({ data: null, isLoading: false }), })); vi.mock('./WalletAdvancedProvider', () => ({ useWalletAdvancedContext: vi.fn(), WalletAdvancedProvider: ({ children }: { children: React.ReactNode }) => ( <>{children} ), })); vi.mock('./WalletDropdownContent', () => ({ WalletDropdownContent: () => (
WalletDropdownContent
), })); vi.mock('./WalletProvider', () => ({ useWalletContext: vi.fn(), WalletContext: createContext(null), WalletProvider: ({ children }: { children: React.ReactNode }) => ( <>{children} ), })); describe('WalletIsland', () => { const mockUseWalletContext = useWalletContext as ReturnType; beforeEach(() => { vi.clearAllMocks(); (useConnect as ReturnType).mockReturnValue({ connectors: [], status: 'disconnected', }); (useAccount as ReturnType).mockReturnValue({ status: 'disconnected', address: '', }); (useWalletContext as Mock).mockReturnValue({ isSubComponentOpen: false, }); Object.defineProperty(window, 'matchMedia', { writable: true, value: vi.fn().mockImplementation((query) => ({ matches: false, media: query, onchange: null, addListener: vi.fn(), removeListener: vi.fn(), addEventListener: vi.fn(), removeEventListener: vi.fn(), dispatchEvent: vi.fn(), })), }); }); it('renders ConnectWallet in disconnected state', () => { mockUseWalletContext.mockReturnValue({ isSubComponentOpen: false }); render(); expect(screen.getByTestId('ockConnectWallet_Container')).toBeDefined(); }); it('renders Avatar in connected state and isSubComponentOpen is false', () => { (useConnect as ReturnType).mockReturnValue({ connectors: [], status: 'connected', }); (useAccount as ReturnType).mockReturnValue({ status: 'connected', address: '0x123', }); mockUseWalletContext.mockReturnValue({ isSubComponentOpen: false }); render(); expect(screen.getByTestId('ockAvatar_ImageContainer')).toBeDefined(); }); it('renders WalletDropdownContent in connected state and isSubComponentOpen is true', () => { (useConnect as ReturnType).mockReturnValue({ connectors: [], status: 'connected', }); (useAccount as ReturnType).mockReturnValue({ status: 'connected', address: '0x123', }); mockUseWalletContext.mockReturnValue({ isSubComponentOpen: true, breakpoint: 'md', address: '0x123', }); render(); expect(screen.getByTestId('ockWalletDropdownContent')).toBeDefined(); }); });