import { render, screen, fireEvent } from '@testing-library/react'; import { describe, it, expect, vi } from 'vitest'; import { Alert } from './alert'; describe('Alert Component', () => { it('renders alert with default variant', () => { render(Default alert message); const alert = screen.getByRole('alert'); expect(alert).toBeInTheDocument(); expect(alert).toHaveTextContent('Default alert message'); expect(alert).toHaveClass('bg-kodo-steel/10'); }); it('renders with title', () => { render(Alert message); expect(screen.getByText('Alert Title')).toBeInTheDocument(); expect(screen.getByText('Alert message')).toBeInTheDocument(); }); it('renders info variant', () => { render(Info message); const alert = screen.getByRole('alert'); expect(alert).toHaveClass('bg-kodo-steel/10'); expect(alert).toHaveClass('text-kodo-steel'); }); it('renders success variant', () => { render(Success message); const alert = screen.getByRole('alert'); expect(alert).toHaveClass('bg-kodo-lime/10'); expect(alert).toHaveClass('text-kodo-lime'); }); it('renders warning variant', () => { render(Warning message); const alert = screen.getByRole('alert'); expect(alert).toHaveClass('bg-kodo-gold/10'); expect(alert).toHaveClass('text-kodo-gold'); }); it('renders error variant', () => { render(Error message); const alert = screen.getByRole('alert'); expect(alert).toHaveClass('bg-kodo-red/10'); expect(alert).toHaveClass('text-kodo-red'); }); it('handles onClose callback', () => { const handleClose = vi.fn(); render(Closable alert); const closeButton = screen.getByRole('button'); fireEvent.click(closeButton); expect(handleClose).toHaveBeenCalledTimes(1); }); it('does not show close button when onClose is not provided', () => { render(Non-closable alert); const closeButton = screen.queryByRole('button'); expect(closeButton).not.toBeInTheDocument(); }); it('maps destructive variant to error', () => { render(Destructive message); const alert = screen.getByRole('alert'); expect(alert).toHaveClass('bg-kodo-red/10'); }); it('applies custom className', () => { render(Custom alert); const alert = screen.getByRole('alert'); expect(alert).toHaveClass('custom-alert'); }); });