124 lines
2.9 KiB
TypeScript
124 lines
2.9 KiB
TypeScript
import { render, screen } from '@testing-library/react';
|
|
import { describe, it, expect } from 'vitest';
|
|
import {
|
|
Table,
|
|
TableHeader,
|
|
TableBody,
|
|
TableRow,
|
|
TableHead,
|
|
TableCell,
|
|
} from './table';
|
|
|
|
describe('Table Component', () => {
|
|
it('renders table with header and body', () => {
|
|
render(
|
|
<Table>
|
|
<TableHeader>
|
|
<TableRow>
|
|
<TableHead>Name</TableHead>
|
|
<TableHead>Email</TableHead>
|
|
</TableRow>
|
|
</TableHeader>
|
|
<TableBody>
|
|
<TableRow>
|
|
<TableCell>John Doe</TableCell>
|
|
<TableCell>john@example.com</TableCell>
|
|
</TableRow>
|
|
</TableBody>
|
|
</Table>,
|
|
);
|
|
|
|
expect(screen.getByText('Name')).toBeInTheDocument();
|
|
expect(screen.getByText('Email')).toBeInTheDocument();
|
|
expect(screen.getByText('John Doe')).toBeInTheDocument();
|
|
expect(screen.getByText('john@example.com')).toBeInTheDocument();
|
|
});
|
|
|
|
it('renders multiple rows', () => {
|
|
render(
|
|
<Table>
|
|
<TableHeader>
|
|
<TableRow>
|
|
<TableHead>Name</TableHead>
|
|
</TableRow>
|
|
</TableHeader>
|
|
<TableBody>
|
|
<TableRow>
|
|
<TableCell>John</TableCell>
|
|
</TableRow>
|
|
<TableRow>
|
|
<TableCell>Jane</TableCell>
|
|
</TableRow>
|
|
</TableBody>
|
|
</Table>,
|
|
);
|
|
|
|
expect(screen.getByText('John')).toBeInTheDocument();
|
|
expect(screen.getByText('Jane')).toBeInTheDocument();
|
|
});
|
|
|
|
it('applies custom className to table', () => {
|
|
render(
|
|
<Table className="custom-table">
|
|
<TableHeader>
|
|
<TableRow>
|
|
<TableHead>Name</TableHead>
|
|
</TableRow>
|
|
</TableHeader>
|
|
<TableBody>
|
|
<TableRow>
|
|
<TableCell>John</TableCell>
|
|
</TableRow>
|
|
</TableBody>
|
|
</Table>,
|
|
);
|
|
|
|
const table = screen.getByRole('table');
|
|
expect(table).toHaveClass('custom-table');
|
|
});
|
|
|
|
it('applies custom className to table row', () => {
|
|
render(
|
|
<Table>
|
|
<TableBody>
|
|
<TableRow className="custom-row">
|
|
<TableCell>John</TableCell>
|
|
</TableRow>
|
|
</TableBody>
|
|
</Table>,
|
|
);
|
|
|
|
const row = screen.getByText('John').closest('tr');
|
|
expect(row).toHaveClass('custom-row');
|
|
});
|
|
|
|
it('renders table head with correct styling', () => {
|
|
render(
|
|
<Table>
|
|
<TableHeader>
|
|
<TableRow>
|
|
<TableHead>Name</TableHead>
|
|
</TableRow>
|
|
</TableHeader>
|
|
</Table>,
|
|
);
|
|
|
|
const head = screen.getByText('Name');
|
|
expect(head.tagName).toBe('TH');
|
|
});
|
|
|
|
it('renders table cell with correct styling', () => {
|
|
render(
|
|
<Table>
|
|
<TableBody>
|
|
<TableRow>
|
|
<TableCell>John</TableCell>
|
|
</TableRow>
|
|
</TableBody>
|
|
</Table>,
|
|
);
|
|
|
|
const cell = screen.getByText('John');
|
|
expect(cell.tagName).toBe('TD');
|
|
});
|
|
});
|