import { render } from '@testing-library/react-native' import React from 'react' import { ApiProvider, chatQueryClient } from '../../contexts/api_provider' import { ChatContext, ChatContextValue } from '../../contexts/chat_context' import { ApiClient, useApiClient } from '../../hooks/use_api_client' import { Session } from '../../utils' jest.mock('../../hooks/use_api_client') const mockedUseApiClient = useApiClient as jest.MockedFunction let get: jest.Mock const renderApiProvider = ({ token }: { token?: { access_token: string } } = {}) => { const session = new Session({ token }) return render( {null} ) } beforeEach(() => { jest.useFakeTimers() chatQueryClient.clear() get = jest.fn().mockResolvedValue({ data: [] }) mockedUseApiClient.mockReturnValue({ chat: { get } } as unknown as ApiClient) }) afterEach(() => { chatQueryClient.clear() jest.clearAllMocks() jest.useRealTimers() }) describe('ApiProvider', () => { it('requests app grants on the first attempt without waiting for a retry', () => { renderApiProvider({ token: { access_token: 'a-real-token' } }) expect(get).toHaveBeenCalledWith(expect.objectContaining({ url: '/me/app_grants' })) expect(get.mock.calls.filter(([args]) => args.url === '/me/app_grants')).toHaveLength(1) }) it('does not prefetch anything without a token', () => { renderApiProvider() expect(get).not.toHaveBeenCalled() }) })