diff --git a/frontend/src/__tests__/pages/ingest-csv.test.tsx b/frontend/src/__tests__/pages/ingest-csv.test.tsx index 2df551d2a..1d3619bc3 100644 --- a/frontend/src/__tests__/pages/ingest-csv.test.tsx +++ b/frontend/src/__tests__/pages/ingest-csv.test.tsx @@ -278,8 +278,10 @@ describe('CSV import results on /ingest', () => { expect(await screen.findByText('API key could not be saved. Please try again.')).toBeInTheDocument(); expect(screen.getByRole('alert')).toHaveTextContent('API key could not be saved. Please try again.'); - expect(screen.getByText('Normalized document viewer')).toBeInTheDocument(); - expect(screen.getByText(`Receipt: ${jobId}`)).toBeInTheDocument(); + expect(screen.getByText('Ingestion request completed')).toBeInTheDocument(); + // No DEMO-DOC-ID / job_id fallback: completed panel shows empty state, not a fake viewer receipt. + expect(screen.getByText('No normalized document is available for this ingest.')).toBeInTheDocument(); + expect(screen.queryByText('Normalized document viewer')).not.toBeInTheDocument(); } finally { vi.useRealTimers(); } diff --git a/frontend/src/__tests__/pages/ingest-normalized-viewer.test.tsx b/frontend/src/__tests__/pages/ingest-normalized-viewer.test.tsx new file mode 100644 index 000000000..19d91e38e --- /dev/null +++ b/frontend/src/__tests__/pages/ingest-normalized-viewer.test.tsx @@ -0,0 +1,93 @@ +import { beforeEach, describe, expect, it, vi } from 'vitest'; +import { fireEvent, render, screen } from '@testing-library/react'; +import userEvent from '@testing-library/user-event'; +import IngestPage from '@/app/ingest/page'; + +const mocks = vi.hoisted(() => ({ + ingestURL: vi.fn(), + ingestFile: vi.fn(), + ingestEpcisEvent: vi.fn(), + ingestEpcisBatch: vi.fn(), + ingestEpcisXml: vi.fn(), + validateEpcis: vi.fn(), + getIngestionJob: vi.fn(), + refresh: vi.fn(), + storeApiKey: vi.fn(), + urlData: undefined as { job_id?: string; document_id?: string } | undefined, +})); + +vi.mock('@/lib/auth-context', () => ({ + useAuth: () => ({ apiKey: 'cookie-managed', setApiKey: mocks.storeApiKey }), // pragma: allowlist secret +})); +vi.mock('@/hooks/use-api', () => ({ + useIngestURL: () => ({ mutateAsync: mocks.ingestURL, data: mocks.urlData, reset: vi.fn(), isPending: false, isError: false }), + useIngestFile: () => ({ mutateAsync: mocks.ingestFile, reset: vi.fn(), isPending: false, isError: false }), + useIngestEpcisEvent: () => ({ mutateAsync: mocks.ingestEpcisEvent, reset: vi.fn(), isPending: false }), + useIngestEpcisBatch: () => ({ mutateAsync: mocks.ingestEpcisBatch, reset: vi.fn(), isPending: false }), + useIngestEpcisXml: () => ({ mutateAsync: mocks.ingestEpcisXml, reset: vi.fn(), isPending: false }), + useValidateEpcisEvent: () => ({ mutateAsync: mocks.validateEpcis, reset: vi.fn(), isPending: false }), +})); +vi.mock('@/lib/api-client', () => ({ + apiClient: { getIngestionJob: mocks.getIngestionJob }, +})); +vi.mock('@/hooks/use-dashboard-refresh', () => ({ + notifyDashboardRefresh: mocks.refresh, +})); +vi.mock('@/app/ingest/NormalizedDocumentViewer', () => ({ + NormalizedDocumentViewer: ({ documentId }: { documentId: string }) => ( +
+ No normalized document is available for this ingest. +
+ )} )}