import { render, screen, mockMatchMedia } from '../test-utils'; import { userEvent } from '@testing-library/user-event'; import '@testing-library/jest-dom'; import Table, { TableProps } from './Table'; mockMatchMedia(); describe('Table Component', () => { const defaultProps: TableProps = { data: { headers: [{ header: 'Header 1' }, { header: 'Header 2' }], rows: [ { cells: [ { cell: { type: 'text', text: 'Cell content 1' } }, { cell: { type: 'text', text: 'Cell content 2' } }, ], }, { cells: [ { cell: { type: 'text', text: 'Cell content 3' } }, { cell: { type: 'text', text: 'Cell content 4' } }, ], }, ], onRowClick: jest.fn(), }, loading: false, className: '', fullWidth: true, error: undefined, }; it('renders table', () => { render(); expect(screen.getByText('Header 1')).toBeInTheDocument(); expect(screen.getByText('Header 2')).toBeInTheDocument(); expect(screen.getByText('Cell content 1')).toBeInTheDocument(); expect(screen.getByText('Cell content 2')).toBeInTheDocument(); expect(screen.getByText('Cell content 3')).toBeInTheDocument(); expect(screen.getByText('Cell content 4')).toBeInTheDocument(); }); it('renders `loading` state on loading', () => { render(
); expect(screen.getAllByTestId('np-table-loader')).toHaveLength(1); }); it('renders `empty data` message for empty table`s data', () => { render(
); expect(screen.getAllByTestId('np-table-empty-data')).toHaveLength(1); }); it('renders `error` message if `error` is passed', () => { const errorProps: TableProps = { ...defaultProps, error: { message: 'Error occurred', action: { text: 'Retry' } }, }; render(
); expect(screen.getByText('Error occurred')).toBeInTheDocument(); expect(screen.getByText('Retry')).toBeInTheDocument(); }); it('renders with custom class name', () => { render(
); expect(screen.getByTestId('np-table-outer-container')).toHaveClass('custom-class'); }); it('renders with `fullWidth` set to false', () => { render(
); expect(screen.getByTestId('np-table-outer-container')).toHaveClass( 'np-table-outer-container--center', ); }); it('calls `onRowClick` when a row is clicked', async () => { render(
); await userEvent.click(screen.getByText('Cell content 1')); expect(defaultProps.data.onRowClick).toHaveBeenCalled(); }); });