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