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();
});
});