import { describe, it, expect, vi } from 'vitest'; import { render, screen, fireEvent } from '@testing-library/react'; import { DataTablePagination } from './DataTablePagination'; describe('DataTablePagination', () => { const mockOnPageChange = vi.fn(); beforeEach(() => { mockOnPageChange.mockClear(); }); it('should render pagination with correct page numbers', () => { render( ); expect(screen.getByText('1')).toBeInTheDocument(); expect(screen.getByText('2')).toBeInTheDocument(); expect(screen.getByText('3')).toBeInTheDocument(); expect(screen.getByText('4')).toBeInTheDocument(); expect(screen.getByText('5')).toBeInTheDocument(); }); it('should handle page change when clicking on page number', () => { render( ); const page2Button = screen.getByText('2'); fireEvent.click(page2Button); expect(mockOnPageChange).toHaveBeenCalledWith(2, 10); }); it('should handle previous page click', () => { render( ); const previousButton = screen.getByLabelText('Go to previous page'); fireEvent.click(previousButton); expect(mockOnPageChange).toHaveBeenCalledWith(1, 10); }); it('should handle next page click', () => { render( ); const nextButton = screen.getByLabelText('Go to next page'); fireEvent.click(nextButton); expect(mockOnPageChange).toHaveBeenCalledWith(3, 10); }); it('should disable previous button on first page', () => { render( ); const previousButton = screen.getByLabelText('Go to previous page'); expect(previousButton).toHaveClass('pointer-events-none'); expect(previousButton).toHaveClass('opacity-50'); }); it('should disable next button on last page', () => { render( ); const nextButton = screen.getByLabelText('Go to next page'); expect(nextButton).toHaveClass('pointer-events-none'); expect(nextButton).toHaveClass('opacity-50'); }); it('should show ellipsis for many pages', () => { render( ); // 对于多页情况,应该显示第一页、最后一页和当前页附近的页面 expect(screen.getByText('1')).toBeInTheDocument(); expect(screen.getByText('10')).toBeInTheDocument(); expect(screen.getByText('3')).toBeInTheDocument(); expect(screen.getByText('4')).toBeInTheDocument(); expect(screen.getByText('5')).toBeInTheDocument(); expect(screen.getByText('6')).toBeInTheDocument(); expect(screen.getByText('7')).toBeInTheDocument(); }); });