import { render, screen } from '@testing-library/react' import { DocumentStatusBadge, DOCUMENT_STATUS_CONFIG, type DocumentStatus, } from '../badge/DocumentStatusBadge' describe('DocumentStatusBadge', () => { const cases: Array<{ status: DocumentStatus; label: string; tone: string }> = [ { status: 'draft', label: 'Draft', tone: 'bg-gray-100' }, { status: 'generating', label: 'Generating', tone: 'bg-amber-100' }, { status: 'ready', label: 'Ready', tone: 'bg-green-100' }, { status: 'error', label: 'Error', tone: 'bg-red-100' }, ] it.each(cases)('renders $status with the spec label and tone', ({ status, label, tone }) => { render() const badge = screen.getByText(label) expect(badge).toBeInTheDocument() expect(badge).toHaveClass(tone) }) it('exposes the canonical config mapping (single source of truth)', () => { expect(DOCUMENT_STATUS_CONFIG.ready.label).toBe('Ready') expect(DOCUMENT_STATUS_CONFIG.generating.className).toContain('amber') expect(DOCUMENT_STATUS_CONFIG.error.className).toContain('red') expect(DOCUMENT_STATUS_CONFIG.draft.className).toContain('gray') }) it('renders a status dot by default and omits it when showDot=false', () => { const { container, rerender } = render() expect(container.querySelector('span[aria-hidden="true"]')).not.toBeNull() rerender() expect(container.querySelector('span[aria-hidden="true"]')).toBeNull() }) it('uses a pulsing dot for generating', () => { const { container } = render() const dot = container.querySelector('span[aria-hidden="true"]') expect(dot?.className).toContain('animate-pulse') }) it('honors the size prop', () => { render() expect(screen.getByText('Ready')).toHaveClass('px-2') }) })