import { render, screen } from '@testing-library/react'; import type { ReactNode } from 'react'; import { describe, expect, it, vi } from 'vitest'; import { PriceAreaChart } from '../price-area-chart'; vi.mock('recharts', () => ({ ResponsiveContainer: ({ children }: { children: ReactNode }) => (
{children}
), AreaChart: ({ children, data, }: { children: ReactNode; data: unknown[]; }) => (
{children}
), Area: ({ stroke, dataKey }: { stroke: string; dataKey: string }) => (
), XAxis: ({ dataKey }: { dataKey: string }) => (
), YAxis: () =>
, CartesianGrid: () =>
, Tooltip: () =>
, })); describe('PriceAreaChart', () => { it('renders responsive container with chart, axes, grid and tooltip', () => { render( , ); expect(screen.getByTestId('responsive-container')).toBeInTheDocument(); expect(screen.getByTestId('area-chart')).toHaveAttribute('data-count', '2'); expect(screen.getByTestId('xaxis-period')).toBeInTheDocument(); expect(screen.getByTestId('yaxis')).toBeInTheDocument(); expect(screen.getByTestId('grid')).toBeInTheDocument(); expect(screen.getByTestId('tooltip')).toBeInTheDocument(); }); it('uses signal-up stroke color when last point >= first', () => { render( , ); expect(screen.getByTestId('area-avgPriceM2')).toHaveAttribute( 'data-stroke', 'var(--color-signal-up)', ); }); it('uses signal-down stroke color when last point < first', () => { render( , ); expect(screen.getByTestId('area-avgPriceM2')).toHaveAttribute( 'data-stroke', 'var(--color-signal-down)', ); }); it('defaults to signal-down stroke for single or empty data', () => { render(); expect(screen.getByTestId('area-avgPriceM2')).toHaveAttribute( 'data-stroke', 'var(--color-signal-down)', ); }); it('passes through className to wrapper div', () => { const { container } = render( , ); expect(container.querySelector('.custom-wrap')).not.toBeNull(); }); });