import { render, screen } from '@testing-library/react'; import { describe, expect, it, vi } from 'vitest'; import { DistrictBarChart } from '../district-bar-chart'; // Mock recharts vi.mock('recharts', () => ({ ResponsiveContainer: ({ children }: { children: React.ReactNode }) => (
{children}
), BarChart: ({ children, data }: { children: React.ReactNode; data: unknown[] }) => (
{children}
), Bar: ({ dataKey }: { dataKey: string }) =>
, XAxis: ({ dataKey }: { dataKey: string }) =>
, YAxis: () =>
, CartesianGrid: () =>
, Tooltip: () =>
, })); const sampleData = [ { district: 'Quận 1', price: 120, listings: 50 }, { district: 'Quận 2', price: 80, listings: 40 }, { district: 'Quận 7', price: 65, listings: 60 }, ]; describe('DistrictBarChart', () => { it('renders responsive container', () => { render(); expect(screen.getByTestId('responsive-container')).toBeInTheDocument(); }); it('renders bar chart', () => { render(); expect(screen.getByTestId('bar-chart')).toBeInTheDocument(); }); it('renders bar with default dataKey "price"', () => { render(); expect(screen.getByTestId('bar-price')).toBeInTheDocument(); }); it('renders bar with custom dataKey', () => { render(); expect(screen.getByTestId('bar-listings')).toBeInTheDocument(); }); it('renders XAxis with district key', () => { render(); expect(screen.getByTestId('xaxis-district')).toBeInTheDocument(); }); it('renders CartesianGrid', () => { render(); expect(screen.getByTestId('grid')).toBeInTheDocument(); }); it('renders Tooltip', () => { render(); expect(screen.getByTestId('tooltip')).toBeInTheDocument(); }); it('passes data to chart', () => { render(); expect(screen.getByTestId('bar-chart')).toHaveAttribute('data-count', '3'); }); });