import { describe, it, expect, vi } from 'vitest'; import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import { Chip } from './Chip'; import { MoexVibeThemeProvider } from '../../theme'; function renderWithTheme(element: React.ReactElement) { return render({element}); } describe('Chip', () => { it('renders label', () => { renderWithTheme(); expect(screen.getByText('Default')).toBeInTheDocument(); }); it('renders with neutral tone by default', () => { renderWithTheme(); const chip = screen.getByText('Neutral').closest('.MuiChip-root')!; expect(chip.classList.contains('MuiChip-filled')).toBe(true); }); it('renders info tone', () => { renderWithTheme(); expect(screen.getByText('Info')).toBeInTheDocument(); }); it('renders success tone', () => { renderWithTheme(); expect(screen.getByText('Success')).toBeInTheDocument(); }); it('renders warning tone', () => { renderWithTheme(); expect(screen.getByText('Warning')).toBeInTheDocument(); }); it('renders error tone', () => { renderWithTheme(); expect(screen.getByText('Error')).toBeInTheDocument(); }); it('shows delete button when onDelete provided', () => { renderWithTheme( {}} />); const deleteIcon = screen.getByLabelText('Remove Removable'); expect(deleteIcon).toBeInTheDocument(); }); it('calls onDelete when delete clicked', async () => { const handleDelete = vi.fn(); const user = userEvent.setup(); renderWithTheme(); const deleteIcon = screen.getByLabelText('Remove Removable'); await user.click(deleteIcon); expect(handleDelete).toHaveBeenCalledTimes(1); }); it('does not show delete button without onDelete', () => { renderWithTheme(); expect(screen.queryByRole('button')).not.toBeInTheDocument(); }); });