import { render, screen } from '@testing-library/react'; import { describe, expect, it, vi } from 'vitest'; import { PriceTrendChart } from '../price-trend-chart'; // Mock recharts vi.mock('recharts', () => ({ ResponsiveContainer: ({ children }: { children: React.ReactNode }) => (
{children}
), LineChart: ({ children, data }: { children: React.ReactNode; data: unknown[] }) => (
{children}
), Line: ({ dataKey }: { dataKey: string }) =>
, XAxis: ({ dataKey }: { dataKey: string }) =>
, YAxis: ({ yAxisId }: { yAxisId?: string }) =>
, CartesianGrid: () =>
, Tooltip: () =>
, Legend: () =>
, })); const sampleData = [ { period: 'T1/2026', 'Gia/m2': 65, 'Tin đăng': 120 }, { period: 'T2/2026', 'Gia/m2': 68, 'Tin đăng': 130 }, { period: 'T3/2026', 'Gia/m2': 70, 'Tin đăng': 125 }, ]; describe('PriceTrendChart', () => { it('renders responsive container', () => { render(); expect(screen.getByTestId('responsive-container')).toBeInTheDocument(); }); it('renders line chart', () => { render(); expect(screen.getByTestId('line-chart')).toBeInTheDocument(); }); it('renders price line', () => { render(); expect(screen.getByTestId('line-Gia/m2')).toBeInTheDocument(); }); it('renders listings count line', () => { render(); expect(screen.getByTestId('line-Tin đăng')).toBeInTheDocument(); }); it('renders XAxis with period key', () => { render(); expect(screen.getByTestId('xaxis-period')).toBeInTheDocument(); }); it('renders dual Y axes', () => { render(); expect(screen.getByTestId('yaxis-left')).toBeInTheDocument(); expect(screen.getByTestId('yaxis-right')).toBeInTheDocument(); }); it('renders Legend', () => { render(); expect(screen.getByTestId('legend')).toBeInTheDocument(); }); it('passes data to chart', () => { render(); expect(screen.getByTestId('line-chart')).toHaveAttribute('data-count', '3'); }); });