/** * @jest-environment ./jest-environment-jsdom-fix */ import type { WebClientParams } from '@self.id/web' import { renderHook } from '@testing-library/react-hooks' import { useAtom } from 'jotai' import React from 'react' import type { ReactNode } from 'react' import { Provider, ReactClient, clientAtom, connectionAtom, localViewerIDAtom, requestViewerIDAtom, stateScope, } from '../src' type ChildrenProps = { children: ReactNode } describe('state', () => { const wrapper = ({ children }: ChildrenProps) => {children} test('clientAtom has a default value', () => { const { result } = renderHook(() => useAtom(clientAtom, stateScope), { wrapper }) expect(result.current[0]).toBeInstanceOf(ReactClient) }) test('clientAtom instance can be injected in provider', () => { const client = new ReactClient({} as WebClientParams) const stateWrapper = ({ children }: ChildrenProps) => ( {children} ) const { result } = renderHook(() => useAtom(clientAtom, stateScope), { wrapper: stateWrapper, }) expect(result.current[0]).toBe(client) }) test('connectionAtom has a default value', () => { const { result } = renderHook(() => useAtom(connectionAtom, stateScope), { wrapper }) expect(result.current[0]).toEqual({ status: 'idle' }) }) test('requestViewerIDAtom has a value injected by the provider', () => { const stateWrapper = ({ children }: ChildrenProps) => ( {children} ) const { result } = renderHook(() => useAtom(requestViewerIDAtom, stateScope), { wrapper: stateWrapper, }) expect(result.current[0]).toBe('did:test:123') }) test('localViewerIDAtom value defaults to null', () => { const { result } = renderHook(() => useAtom(localViewerIDAtom, stateScope), { wrapper }) expect(result.current[0]).toBeNull() }) })