import { render, screen, fireEvent } from '@testing-library/react'; import { describe, it, expect, vi } from 'vitest'; import { Tabs, TabsList, TabsTrigger, TabsContent } from './tabs'; describe('Tabs Component', () => { it('renders tabs', () => { render( Tab 1 Tab 2 Content 1 Content 2 , ); expect(screen.getByText('Tab 1')).toBeInTheDocument(); expect(screen.getByText('Tab 2')).toBeInTheDocument(); }); it('shows default 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('switches tabs on click', () => { render( Tab 1 Tab 2 Content 1 Content 2 , ); const tab2 = screen.getByText('Tab 2'); fireEvent.click(tab2); expect(screen.getByText('Content 2')).toBeInTheDocument(); expect(screen.queryByText('Content 1')).not.toBeInTheDocument(); }); it('calls onValueChange when tab changes', () => { const handleChange = vi.fn(); render( Tab 1 Tab 2 Content 1 Content 2 , ); const tab2 = screen.getByText('Tab 2'); fireEvent.click(tab2); expect(handleChange).toHaveBeenCalledWith('tab2'); }); it('handles controlled value', () => { const { rerender } = render( Tab 1 Tab 2 Content 1 Content 2 , ); expect(screen.getByText('Content 1')).toBeInTheDocument(); rerender( Tab 1 Tab 2 Content 1 Content 2 , ); expect(screen.getByText('Content 2')).toBeInTheDocument(); }); it('applies custom className', () => { render( Tab 1 Content , ); const tabs = screen.getByText('Tab 1').closest('.custom-tabs'); expect(tabs).toBeInTheDocument(); }); });