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();
});
});