import { render, screen } from '@testing-library/react'; import userEvent from '@testing-library/user-event'; import React from 'react'; import { describe, expect, it, vi } from 'vitest'; import { MdFilterChip } from '../MdFilterChip'; import { MdInputChip } from '../MdInputChip'; describe('MdInputChip', () => { describe('rendering', () => { it('renders with label', () => { render(); expect(screen.getByRole('button')).toHaveTextContent('Test Chip'); }); it('renders as button', () => { render(); expect(screen.getByRole('button')).toBeInTheDocument(); }); it('renders close icon by default', () => { const { container } = render(); expect(container.querySelector('.md-chip__right-icon')).toBeInTheDocument(); }); it('hides close icon when hideCloseIcon is true', () => { const { container } = render(); expect(container.querySelector('.md-chip__right-icon')).not.toBeInTheDocument(); }); it('renders prefix icon when provided', () => { const { container } = render(} />); expect(container.querySelector('.md-chip__left-icon')).toBeInTheDocument(); }); }); describe('states', () => { it('applies active class when active', () => { render(); expect(screen.getByRole('button')).toHaveClass('md-chip--active'); }); it('applies disabled class when disabled', () => { render(); expect(screen.getByRole('button')).toHaveClass('md-chip--disabled'); expect(screen.getByRole('button')).toBeDisabled(); }); it('applies solid class when solid', () => { render(); expect(screen.getByRole('button')).toHaveClass('md-chip--solid'); }); }); describe('interactions', () => { it('handles click events', async () => { const user = userEvent.setup(); const onClick = vi.fn(); render(); await user.click(screen.getByRole('button')); expect(onClick).toHaveBeenCalledTimes(1); }); it('does not fire click when disabled', async () => { const user = userEvent.setup(); const onClick = vi.fn(); render(); await user.click(screen.getByRole('button')); expect(onClick).not.toHaveBeenCalled(); }); }); describe('props forwarding', () => { it('forwards id', () => { render(); expect(screen.getByRole('button')).toHaveAttribute('id', 'my-chip'); }); it('merges custom className', () => { render(); const button = screen.getByRole('button'); expect(button).toHaveClass('md-chip'); expect(button).toHaveClass('custom-class'); }); }); }); describe('MdFilterChip', () => { describe('rendering', () => { it('renders with label', () => { render(); expect(screen.getByRole('button')).toHaveTextContent('Filter'); }); it('renders as button', () => { render(); expect(screen.getByRole('button')).toBeInTheDocument(); }); it('renders prefix icon when provided and not active', () => { const { container } = render(} />); expect(container.querySelector('.md-chip__left-icon')).toBeInTheDocument(); }); it('renders check icon when active instead of prefix icon', () => { const { container } = render(} />); expect(container.querySelector('.md-chip__left-icon')).toBeInTheDocument(); // Check icon is rendered }); }); describe('states', () => { it('applies active class when active', () => { render(); expect(screen.getByRole('button')).toHaveClass('md-chip--active'); }); it('sets aria-pressed when active', () => { render(); expect(screen.getByRole('button')).toHaveAttribute('aria-pressed', 'true'); }); it('sets aria-pressed false when not active', () => { render(); expect(screen.getByRole('button')).toHaveAttribute('aria-pressed', 'false'); }); it('applies disabled class when disabled', () => { render(); expect(screen.getByRole('button')).toHaveClass('md-chip--disabled'); expect(screen.getByRole('button')).toBeDisabled(); }); }); describe('interactions', () => { it('handles click events', async () => { const user = userEvent.setup(); const onClick = vi.fn(); render(); await user.click(screen.getByRole('button')); expect(onClick).toHaveBeenCalledTimes(1); }); it('does not fire click when disabled', async () => { const user = userEvent.setup(); const onClick = vi.fn(); render(); await user.click(screen.getByRole('button')); expect(onClick).not.toHaveBeenCalled(); }); }); describe('props forwarding', () => { it('forwards id', () => { render(); expect(screen.getByRole('button')).toHaveAttribute('id', 'my-filter'); }); it('merges custom className', () => { render(); const button = screen.getByRole('button'); expect(button).toHaveClass('md-chip'); expect(button).toHaveClass('custom-class'); }); }); });