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-kodo-steel');
expect(separator).toBeInTheDocument();
});
it('renders shortcut', () => {
render(
Item
⌘K
,
);
expect(screen.getByText('⌘K')).toBeInTheDocument();
});
});