import '@testing-library/jest-dom'; import { OnchainKitProvider } from '@/OnchainKitProvider'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { renderHook } from '@testing-library/react'; import type { Address, Chain } from 'viem'; import { baseSepolia, optimism, sepolia } from 'viem/chains'; import { describe, expect, it, vi } from 'vitest'; import { WagmiProvider } from 'wagmi'; import { http, createConfig } from 'wagmi'; import { mock } from 'wagmi/connectors'; import { IdentityProvider, useIdentityContext } from './IdentityProvider'; vi.mock('@/internal/hooks/useTheme', () => ({ useTheme: vi.fn(() => 'default-light'), useThemeRoot: vi.fn(() => 'default-light'), })); const queryClient = new QueryClient(); const mockConfig = createConfig({ chains: [sepolia], connectors: [ mock({ accounts: ['0xf39Fd6e51aad88F6F4ce6aB8827279cffFb92266'], }), ], transports: { [sepolia.id]: http(), }, }); describe('IdentityProvider', () => { it('provides context values from props', () => { const address: Address = '0x1234567890abcdef1234567890abcdef12345678'; const schemaId: Address = '0xabcdefabcdefabcdefabcdefabcdefabcdef'; const chain: Chain = baseSepolia; const { result } = renderHook(() => useIdentityContext(), { wrapper: ({ children }) => ( {children} ), }); expect(result.current.address).toEqual(address); expect(result.current.schemaId).toEqual(schemaId); expect(result.current.chain?.id).toEqual(chain.id); }); it('should return default context when no props are passed', () => { const { result } = renderHook(() => useIdentityContext(), { wrapper: IdentityProvider, }); expect(result.current.address).toEqual(''); expect(result.current.schemaId).toEqual(undefined); expect(result.current.chain?.id).toEqual(84532); // defaults to base }); it('use onchainkit context chain if provided', () => { const { result } = renderHook(() => useIdentityContext(), { wrapper: ({ children }) => ( {children} ), }); expect(result.current.address).toEqual(''); expect(result.current.schemaId).toEqual(undefined); expect(result.current.chain?.id).toEqual(optimism.id); }); it('use identity context chain over onchainkit context if both are provided', () => { const { result } = renderHook(() => useIdentityContext(), { wrapper: ({ children }) => ( {children} ), }); expect(result.current.address).toEqual(''); expect(result.current.schemaId).toEqual(undefined); expect(result.current.chain?.id).toEqual(sepolia.id); }); });