33 lines
1.3 KiB
TypeScript
33 lines
1.3 KiB
TypeScript
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 <QueryClientProvider client={queryClient}>{children}</QueryClientProvider>;
|
||
};
|
||
}
|
||
|
||
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);
|
||
});
|
||
});
|