import { render, screen } from '@testing-library/react'; import { describe, expect, it } from 'vitest'; import { PriceDelta } from '../price-delta'; describe('PriceDelta', () => { it('renders formatted positive value with default unit %', () => { render(); expect(screen.getByText('+3.14%')).toBeInTheDocument(); }); it('renders negative value', () => { render(); expect(screen.getByText('-2.50%')).toBeInTheDocument(); }); it('renders zero value as neutral', () => { render(); // 0 is not > 0 so no "+" prefix expect(screen.getByText('0.00%')).toBeInTheDocument(); }); it('renders with custom unit', () => { render(); expect(screen.getByText('+1.5 tr')).toBeInTheDocument(); }); it('hides icon when hideIcon=true', () => { const { container } = render(); // With hideIcon, the ArrowUp/Down/Minus svg is not rendered expect(container.querySelector('svg')).toBeNull(); }); it('renders icon svg by default', () => { const { container } = render(); expect(container.querySelector('svg')).toBeInTheDocument(); }); it('has data-numeric attribute on root span', () => { render(); expect(screen.getByTestId('pd')).toHaveAttribute('data-numeric'); }); it('has font-mono class', () => { render(); expect(screen.getByTestId('pd')).toHaveClass('font-mono'); }); it('merges custom className', () => { render(); expect(screen.getByTestId('pd')).toHaveClass('extra'); }); it('renders direction override independently of value sign', () => { // Positive value with forced down direction still shows the down arrow const { container } = render(); // Should still render an svg (ArrowDown) expect(container.querySelector('svg')).toBeInTheDocument(); // Value text is formatted from the `value` prop expect(screen.getByText('+5.00%')).toBeInTheDocument(); }); });