import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { describe, expect, it, vi } from 'vitest'; import { Tabs, TabsList, TabsTrigger, TabsContent } from '../tabs'; describe('Tabs', () => { it('renders the active tab content', () => { render( Tab 1 Tab 2 Content 1 Content 2 , ); expect(screen.getByText('Content 1')).toBeInTheDocument(); expect(screen.queryByText('Content 2')).not.toBeInTheDocument(); }); it('hides inactive tab content', () => { render( Tab 1 Tab 2 Content 1 Content 2 , ); expect(screen.queryByText('Content 1')).not.toBeInTheDocument(); expect(screen.getByText('Content 2')).toBeInTheDocument(); }); it('calls onValueChange when a trigger is clicked', async () => { const onValueChange = vi.fn(); render( Tab 1 Tab 2 Content 1 Content 2 , ); await userEvent.click(screen.getByText('Tab 2')); expect(onValueChange).toHaveBeenCalledWith('tab2'); }); it('renders all trigger buttons', () => { render( First Second Third C1 C2 C3 , ); expect(screen.getByText('First')).toBeInTheDocument(); expect(screen.getByText('Second')).toBeInTheDocument(); expect(screen.getByText('Third')).toBeInTheDocument(); }); it('applies active styles to selected trigger', () => { render( Tab 1 Tab 2 Content , ); expect(screen.getByTestId('trigger-1')).toHaveClass('bg-background'); expect(screen.getByTestId('trigger-2')).not.toHaveClass('bg-background'); }); it('applies custom className to TabsList', () => { render( Tab 1 Content , ); expect(screen.getByTestId('list')).toHaveClass('custom-list'); }); it('applies custom className to TabsContent', () => { render( Tab 1 Content , ); expect(screen.getByTestId('content')).toHaveClass('custom-content'); }); });