import { render, screen, fireEvent } from '@testing-library/react' import { worstStatus, HealthCard, PipelineHealth, SourceFreshness, DeliveryHealth, AttentionFeed, } from '../index' const NOW = 1_700_000_000_000 // fixed instant for freshness/delivery derivation const hoursAgo = (h: number) => new Date(NOW - h * 3_600_000).toISOString() const hoursAhead = (h: number) => new Date(NOW + h * 3_600_000).toISOString() describe('worstStatus', () => { it('returns neutral for an empty list', () => { expect(worstStatus([])).toBe('neutral') }) it('escalates critical > warn > ok > neutral', () => { expect(worstStatus(['ok', 'neutral'])).toBe('ok') expect(worstStatus(['ok', 'warn'])).toBe('warn') expect(worstStatus(['ok', 'warn', 'critical'])).toBe('critical') }) }) describe('HealthCard', () => { it('renders the title and the tone badge', () => { render() expect(screen.getByText('Pipeline')).toBeInTheDocument() expect(screen.getByText('Healthy')).toBeInTheDocument() }) it('shows the empty message when isEmpty', () => { render() expect(screen.getByText('Nothing here')).toBeInTheDocument() }) it('honors a custom status label', () => { render() expect(screen.getByText('3 stale')).toBeInTheDocument() }) }) describe('PipelineHealth', () => { const stages = [ { label: 'draft', count: 4 }, { label: 'review', count: 2 }, { label: 'ready', count: 1 }, ] it('renders every stage with its count', () => { render() expect(screen.getByText('draft')).toBeInTheDocument() expect(screen.getByText('4')).toBeInTheDocument() expect(screen.getByText('7 total')).toBeInTheDocument() }) it('flags attention items in the badge', () => { render() expect(screen.getByText('2 need attention')).toBeInTheDocument() }) it('renders the empty state when there are no records', () => { render() expect(screen.getByText('No records yet.')).toBeInTheDocument() }) it('calls onStageClick', () => { const onClick = jest.fn() render() fireEvent.click(screen.getByText('review')) expect(onClick).toHaveBeenCalledWith('review') }) }) describe('SourceFreshness', () => { it('reports all fresh when every source is recent', () => { render( , ) expect(screen.getByText('All fresh')).toBeInTheDocument() }) it('counts stale sources and shows "never" for missing timestamps', () => { render( , ) expect(screen.getByText('2 stale')).toBeInTheDocument() expect(screen.getByText('never')).toBeInTheDocument() }) }) describe('DeliveryHealth', () => { it('is on track when deliveries are on time', () => { render( , ) expect(screen.getByText('On track')).toBeInTheDocument() }) it('flags missed and late deliveries', () => { render( missed { label: 'Week 2', dueAt: hoursAhead(24) }, // upcoming ]} />, ) expect(screen.getByText('1 off-track')).toBeInTheDocument() }) }) describe('AttentionFeed', () => { it('is all clear when empty', () => { render() expect(screen.getByText('All clear')).toBeInTheDocument() }) it('counts items to review and links them', () => { render( , ) expect(screen.getByText('2 to review')).toBeInTheDocument() expect(screen.getByRole('link', { name: /Draft needs review/ })).toHaveAttribute('href', '/t/general/1') }) })