import React from 'react'; import { render, screen, fireEvent } from '@testing-library/react'; import { Tabs, TabsList, TabsTrigger, TabsContent } from '../Tabs'; describe('Tabs', () => { const TestTabs = () => ( Tab 1 Tab 2 Tab 3 Content 1 Content 2 Content 3 ); it('renders with default tab selected', () => { render(); expect(screen.getByText('Tab 1')).toBeInTheDocument(); expect(screen.getByText('Tab 2')).toBeInTheDocument(); expect(screen.getByText('Tab 3')).toBeInTheDocument(); expect(screen.getByText('Content 1')).toBeInTheDocument(); expect(screen.queryByText('Content 2')).not.toBeInTheDocument(); expect(screen.queryByText('Content 3')).not.toBeInTheDocument(); }); it('switches tab content when clicking triggers', () => { render(); // Click Tab 2 fireEvent.click(screen.getByText('Tab 2')); expect(screen.queryByText('Content 1')).not.toBeInTheDocument(); expect(screen.getByText('Content 2')).toBeInTheDocument(); expect(screen.queryByText('Content 3')).not.toBeInTheDocument(); // Click Tab 3 fireEvent.click(screen.getByText('Tab 3')); expect(screen.queryByText('Content 1')).not.toBeInTheDocument(); expect(screen.queryByText('Content 2')).not.toBeInTheDocument(); expect(screen.getByText('Content 3')).toBeInTheDocument(); // Click back to Tab 1 fireEvent.click(screen.getByText('Tab 1')); expect(screen.getByText('Content 1')).toBeInTheDocument(); expect(screen.queryByText('Content 2')).not.toBeInTheDocument(); expect(screen.queryByText('Content 3')).not.toBeInTheDocument(); }); it('applies correct aria attributes', () => { render(); const tab1 = screen.getByText('Tab 1'); const tab2 = screen.getByText('Tab 2'); expect(tab1).toHaveAttribute('role', 'tab'); expect(tab1).toHaveAttribute('aria-selected', 'true'); expect(tab2).toHaveAttribute('role', 'tab'); expect(tab2).toHaveAttribute('aria-selected', 'false'); fireEvent.click(tab2); expect(tab1).toHaveAttribute('aria-selected', 'false'); expect(tab2).toHaveAttribute('aria-selected', 'true'); }); it('renders content with tabpanel role', () => { render(); const content = screen.getByRole('tabpanel'); expect(content).toHaveTextContent('Content 1'); }); it('applies custom className to components', () => { render( Test Test Content ); expect(document.querySelector('.custom-tabs')).toBeInTheDocument(); expect(document.querySelector('.custom-list')).toBeInTheDocument(); expect(document.querySelector('.custom-trigger')).toBeInTheDocument(); expect(document.querySelector('.custom-content')).toBeInTheDocument(); }); });