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