import { describe, it, expect } from 'vitest'; import { screen } from '@testing-library/react'; import { Routes, Route } from 'react-router-dom'; import { http, HttpResponse } from 'msw'; import { server } from '../test/server'; import { BondPage } from './BondPage'; import { renderWithProviders } from '../test/test-utils'; const API = '/api/v1'; function renderBondPage(secid = 'SU26238RMFS5') { return renderWithProviders( } /> , { route: `/bonds/${secid}` }, ); } describe('BondPage', () => { it('shows loading state', () => { server.use(http.get(`${API}/securities/bonds/:secid`, () => new Promise(() => {}))); renderBondPage(); expect(screen.getByText('Загрузка...')).toBeInTheDocument(); }); it('renders bond details after loading', async () => { renderBondPage(); expect(await screen.findByText('ОФЗ 26238')).toBeInTheDocument(); }); it('renders price chart', async () => { renderBondPage(); expect(await screen.findByText('График цены')).toBeInTheDocument(); }); it('shows error state for not found', async () => { server.use( http.get(`${API}/securities/bonds/:secid`, () => new HttpResponse(null, { status: 404 })), http.get( `${API}/securities/bonds/:secid/candles`, () => new HttpResponse(null, { status: 404 }), ), ); renderBondPage('NOTFOUND'); expect(await screen.findByText('Инструмент не найден')).toBeInTheDocument(); }); });