import { describe, it, expect } from 'vitest'; import { renderHook, waitFor } from '@testing-library/react'; import { QueryClient, QueryClientProvider } from '@tanstack/react-query'; import { useStock } from './useStock'; import { type ReactNode } from 'react'; function createWrapper() { const queryClient = new QueryClient({ defaultOptions: { queries: { retry: false } } }); return function Wrapper({ children }: { children: ReactNode }) { return {children}; }; } describe('useStock', () => { it('returns share data', async () => { const { result } = renderHook(() => useStock('SBER'), { wrapper: createWrapper() }); await waitFor(() => expect(result.current.isSuccess).toBe(true)); expect(result.current.data?.secid).toBe('SBER'); expect(result.current.data?.shortName).toBe('Сбер'); expect(result.current.data?.marketData.price).toBe(289.5); }); it('returns error for not found', async () => { const { result } = renderHook(() => useStock('NOTFOUND'), { wrapper: createWrapper() }); await waitFor(() => expect(result.current.isError).toBe(true)); }); it('starts in loading state', () => { const { result } = renderHook(() => useStock('SBER'), { wrapper: createWrapper() }); expect(result.current.isLoading).toBe(true); }); });