import { render, screen } from '@testing-library/react' import { beforeEach, describe, expect, it } from 'vitest' import { I18nProvider } from '../i18n/index' import { LoadingSpinner } from './LoadingSpinner' import type { JobStageHistoryEntry } from '../types/api' const history: JobStageHistoryEntry[] = [ { stage: 'designing', started_at: '2026-10-26T13:00:00.000Z', ended_at: '2026-10-26T13:00:25.200Z', duration_ms: 25_200, }, { stage: 'generating', started_at: '2026-10-26T13:00:25.200Z', ended_at: '2026-10-26T13:01:42.300Z', duration_ms: 77_100, }, ] describe('LoadingSpinner stage history', () => { beforeEach(() => { localStorage.clear() }) it('renders settled stage durations in the hover tooltip', () => { render( , ) expect(screen.getByText('Stage time')).toBeInTheDocument() expect(screen.getByText('Designing')).toBeInTheDocument() expect(screen.getByText('25.2s')).toBeInTheDocument() expect(screen.getByText('Generating Code')).toBeInTheDocument() expect(screen.getByText('77.1s')).toBeInTheDocument() }) it('hides sub-100ms stages from the tooltip', () => { render( , ) expect(screen.queryByText('Queued')).not.toBeInTheDocument() expect(screen.getByText('Designing')).toBeInTheDocument() }) it('renders narration and muxing progress labels', () => { const { rerender } = render( , ) expect(screen.getByText('Preparing narration...')).toBeInTheDocument() rerender( , ) expect(screen.getByText('Muxing audio...')).toBeInTheDocument() }) })