import { describe, it, expect } from 'vitest';
import { render, screen } from '@testing-library/react';
import { StockDetails } from './StockDetails';
import { createMockShare } from '../test/factories';
describe('StockDetails', () => {
it('renders stock details', () => {
const stock = createMockShare();
render();
expect(screen.getByText('Сбер (SBER)')).toBeInTheDocument();
expect(screen.getByText('Сбер Банк · RU0009029540')).toBeInTheDocument();
});
it('displays positive change in green', () => {
const stock = createMockShare({
marketData: {
...createMockShare().marketData,
change: 5,
changePercent: 2,
},
});
render();
const changeEl = screen.getByText('+5.00 (2.00%)');
expect(changeEl).toBeInTheDocument();
});
it('displays negative change in red', () => {
const stock = createMockShare({
marketData: {
...createMockShare().marketData,
change: -3,
changePercent: -1,
},
});
render();
const changeEl = screen.getByText('-3.00 (-1.00%)');
expect(changeEl).toBeInTheDocument();
});
it('shows price formatted', () => {
const stock = createMockShare();
render();
expect(screen.getByText('289,50')).toBeInTheDocument();
});
it('shows dash for null high', () => {
const stock = createMockShare({
marketData: {
...createMockShare().marketData,
high: null,
},
});
render();
const dashes = screen.getAllByText('—');
expect(dashes.length).toBeGreaterThanOrEqual(1);
});
it('shows capitalization in billions', () => {
const stock = createMockShare();
render();
expect(screen.getByText('6250.00 млрд ₽')).toBeInTheDocument();
});
});