154 lines
3.5 KiB
TypeScript
154 lines
3.5 KiB
TypeScript
/**
|
|
* AdminDataTable Component Tests
|
|
*
|
|
* Tests for the AdminDataTable component that provides a consistent
|
|
* container for high-density admin tables.
|
|
*/
|
|
|
|
import React from 'react';
|
|
import { render, screen } from '@testing-library/react';
|
|
import { AdminDataTable } from './AdminDataTable';
|
|
import { describe, it, expect } from 'vitest';
|
|
|
|
describe('AdminDataTable', () => {
|
|
it('should render children content', () => {
|
|
render(
|
|
<AdminDataTable>
|
|
<table>
|
|
<tbody>
|
|
<tr>
|
|
<td>Test Data</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</AdminDataTable>
|
|
);
|
|
|
|
expect(screen.getByText('Test Data')).toBeInTheDocument();
|
|
});
|
|
|
|
it('should render with maxHeight prop', () => {
|
|
render(
|
|
<AdminDataTable maxHeight={400}>
|
|
<table>
|
|
<tbody>
|
|
<tr>
|
|
<td>Scrollable Content</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</AdminDataTable>
|
|
);
|
|
|
|
expect(screen.getByText('Scrollable Content')).toBeInTheDocument();
|
|
});
|
|
|
|
it('should render with string maxHeight prop', () => {
|
|
render(
|
|
<AdminDataTable maxHeight="500px">
|
|
<table>
|
|
<tbody>
|
|
<tr>
|
|
<td>Scrollable Content</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</AdminDataTable>
|
|
);
|
|
|
|
expect(screen.getByText('Scrollable Content')).toBeInTheDocument();
|
|
});
|
|
|
|
it('should render without maxHeight prop', () => {
|
|
render(
|
|
<AdminDataTable>
|
|
<table>
|
|
<tbody>
|
|
<tr>
|
|
<td>Content</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</AdminDataTable>
|
|
);
|
|
|
|
expect(screen.getByText('Content')).toBeInTheDocument();
|
|
});
|
|
|
|
it('should render multiple table rows', () => {
|
|
render(
|
|
<AdminDataTable>
|
|
<table>
|
|
<tbody>
|
|
<tr>
|
|
<td>Row 1</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Row 2</td>
|
|
</tr>
|
|
<tr>
|
|
<td>Row 3</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</AdminDataTable>
|
|
);
|
|
|
|
expect(screen.getByText('Row 1')).toBeInTheDocument();
|
|
expect(screen.getByText('Row 2')).toBeInTheDocument();
|
|
expect(screen.getByText('Row 3')).toBeInTheDocument();
|
|
});
|
|
|
|
it('should render with complex table structure', () => {
|
|
render(
|
|
<AdminDataTable>
|
|
<table>
|
|
<thead>
|
|
<tr>
|
|
<th>Header 1</th>
|
|
<th>Header 2</th>
|
|
</tr>
|
|
</thead>
|
|
<tbody>
|
|
<tr>
|
|
<td>Data 1</td>
|
|
<td>Data 2</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</AdminDataTable>
|
|
);
|
|
|
|
expect(screen.getByText('Header 1')).toBeInTheDocument();
|
|
expect(screen.getByText('Header 2')).toBeInTheDocument();
|
|
expect(screen.getByText('Data 1')).toBeInTheDocument();
|
|
expect(screen.getByText('Data 2')).toBeInTheDocument();
|
|
});
|
|
|
|
it('should render with nested components', () => {
|
|
const NestedComponent = () => (
|
|
<div>
|
|
<span>Nested</span>
|
|
<button>Action</button>
|
|
</div>
|
|
);
|
|
|
|
render(
|
|
<AdminDataTable>
|
|
<table>
|
|
<tbody>
|
|
<tr>
|
|
<td>
|
|
<NestedComponent />
|
|
</td>
|
|
</tr>
|
|
</tbody>
|
|
</table>
|
|
</AdminDataTable>
|
|
);
|
|
|
|
expect(screen.getByText('Nested')).toBeInTheDocument();
|
|
expect(screen.getByText('Action')).toBeInTheDocument();
|
|
});
|
|
});
|