frontend phase 15

This commit is contained in:
hamid
2026-07-10 20:28:06 +03:30
parent bc51cf59b4
commit 70cf00ce4a
151 changed files with 10711 additions and 44 deletions
@@ -0,0 +1,41 @@
import { render, screen, fireEvent } from '@testing-library/react';
import { ThemeProvider } from '../../theme';
import AdminDataTable, { type AdminTableColumn } from './AdminDataTable';
interface Row {
id: number;
name: string;
}
const ROWS: Row[] = [
{ id: 1, name: 'Alpha' },
{ id: 2, name: 'Beta' },
];
const COLUMNS: AdminTableColumn<Row>[] = [
{ key: 'id', header: 'ID', render: (r) => r.id },
{ key: 'name', header: 'Name', render: (r) => r.name },
];
describe('<AdminDataTable/>', () => {
const wrap = (ui: React.ReactNode) => render(<ThemeProvider>{ui}</ThemeProvider>);
it('renders headers and every row cell', () => {
wrap(<AdminDataTable columns={COLUMNS} rows={ROWS} getRowKey={(r) => r.id} />);
expect(screen.getByText('ID')).toBeInTheDocument();
expect(screen.getByText('Name')).toBeInTheDocument();
expect(screen.getByText('Alpha')).toBeInTheDocument();
expect(screen.getByText('Beta')).toBeInTheDocument();
});
it('exposes a data-col attribute per column', () => {
const { container } = wrap(<AdminDataTable columns={COLUMNS} rows={ROWS} getRowKey={(r) => r.id} />);
expect(container.querySelectorAll('[data-col="name"]').length).toBe(2);
});
it('calls onRowClick with the clicked row', () => {
const onRowClick = jest.fn();
wrap(<AdminDataTable columns={COLUMNS} rows={ROWS} getRowKey={(r) => r.id} onRowClick={onRowClick} />);
fireEvent.click(screen.getByText('Beta'));
expect(onRowClick).toHaveBeenCalledWith(ROWS[1]);
});
});