import { render, screen, fireEvent } from '@testing-library/react'; import { describe, it, expect, vi } from 'vitest'; import { DropdownMenu, DropdownMenuTrigger, DropdownMenuContent, DropdownMenuItem, DropdownMenuCheckboxItem, DropdownMenuRadioItem, DropdownMenuLabel, DropdownMenuSeparator, DropdownMenuShortcut, } from './dropdown-menu'; describe('DropdownMenu Component', () => { it('renders trigger and content', () => { render( Item 1 , ); expect(screen.getByText('Open Menu')).toBeInTheDocument(); }); it('renders menu items', () => { render( Item 1 Item 2 , ); expect(screen.getByText('Item 1')).toBeInTheDocument(); expect(screen.getByText('Item 2')).toBeInTheDocument(); }); it('calls onOpenChange when trigger is clicked', () => { const mockOnOpenChange = vi.fn(); render( Item , ); const trigger = screen.getByText('Open'); fireEvent.click(trigger); expect(mockOnOpenChange).toHaveBeenCalled(); }); it('renders checkbox item', () => { const mockOnCheckedChange = vi.fn(); render( Checked Item , ); expect(screen.getByText('Checked Item')).toBeInTheDocument(); }); it('renders radio item', () => { render( Radio Item , ); expect(screen.getByText('Radio Item')).toBeInTheDocument(); }); it('renders label', () => { render( Label , ); expect(screen.getByText('Label')).toBeInTheDocument(); }); it('renders separator', () => { const { container } = render( , ); const separator = container.querySelector('.bg-border'); expect(separator).toBeInTheDocument(); }); it('renders shortcut', () => { render( Item ⌘K , ); expect(screen.getByText('⌘K')).toBeInTheDocument(); }); });