openreader/tests/unit/pdf-parse-artifact-envelope.vitest.spec.ts
Richard R a56aaa2be9 Refactor PDF parsing and rendering logic; migrate to compute-worker protocol
- Removed deprecated functions related to document parsing and blob storage in blobstore.ts.
- Introduced new PDF rendering logic in pdf-preview-renderer.ts and pdf-preview-pdfjs-runtime.ts.
- Updated previews-render.ts to utilize the new PDF rendering functions.
- Refactored user-whisper-align-job.ts to use the compute-worker client for alignment requests.
- Enhanced artifact.ts and operation.ts to validate parsed PDF artifacts and resolve current PDF parses.
- Updated snapshot.ts to align with new worker operation types.
- Adjusted runtime-config.ts to check for compute-worker availability.
- Modified types in parsed-pdf.ts and tts.ts to reflect changes in the compute-worker protocol.
- Added unit tests for PDF artifact validation and compute-worker client contract.
- Removed obsolete pdf-op-key.vitest.spec.ts test file.
2026-06-12 13:43:33 -06:00

72 lines
2.6 KiB
TypeScript

import { beforeEach, describe, expect, test, vi } from 'vitest';
const hoisted = vi.hoisted(() => ({
getParsedDocumentBlobByKey: vi.fn(),
resolveCurrentPdfParse: vi.fn(),
}));
vi.mock('@/lib/server/documents/blobstore', () => ({
getParsedDocumentBlobByKey: hoisted.getParsedDocumentBlobByKey,
isMissingBlobError: vi.fn(() => false),
}));
vi.mock('@/lib/server/pdf-parse/operation', () => ({
resolveCurrentPdfParse: hoisted.resolveCurrentPdfParse,
}));
describe('parsed PDF artifact envelope validation', () => {
beforeEach(() => {
hoisted.resolveCurrentPdfParse.mockReset();
hoisted.resolveCurrentPdfParse.mockResolvedValue({
artifact: { objectKey: 'openreader/parsed.json' },
operation: null,
});
hoisted.getParsedDocumentBlobByKey.mockReset();
});
test('accepts a valid current artifact envelope', async () => {
hoisted.getParsedDocumentBlobByKey.mockResolvedValue(Buffer.from(JSON.stringify({
schemaVersion: 1,
documentId: 'doc-1',
parserVersion: 'parser-v1',
parsedAt: 1,
pages: [{ pageNumber: 1, width: 100, height: 200, blocks: [] }],
})));
const { readCurrentParsedPdfArtifact } = await import('../../src/lib/server/pdf-parse/artifact');
await expect(readCurrentParsedPdfArtifact({ documentId: 'doc-1', namespace: null }))
.resolves.toMatchObject({ key: 'openreader/parsed.json' });
});
test('rejects malformed envelopes and document identity mismatches', async () => {
const { readCurrentParsedPdfArtifact } = await import('../../src/lib/server/pdf-parse/artifact');
hoisted.getParsedDocumentBlobByKey.mockResolvedValueOnce(Buffer.from(JSON.stringify({
schemaVersion: 2,
documentId: 'doc-1',
pages: [],
})));
await expect(readCurrentParsedPdfArtifact({ documentId: 'doc-1', namespace: null }))
.rejects.toThrow('envelope is invalid');
hoisted.getParsedDocumentBlobByKey.mockResolvedValueOnce(Buffer.from(JSON.stringify({
schemaVersion: 1,
documentId: 'other-doc',
parserVersion: 'parser-v1',
parsedAt: 1,
pages: [],
})));
await expect(readCurrentParsedPdfArtifact({ documentId: 'doc-1', namespace: null }))
.rejects.toThrow('document identity mismatch');
hoisted.getParsedDocumentBlobByKey.mockResolvedValueOnce(Buffer.from(JSON.stringify({
schemaVersion: 1,
documentId: 'doc-1',
parserVersion: 'parser-v1',
parsedAt: 1,
pages: [{ pageNumber: 1, width: 100, height: 200 }],
})));
await expect(readCurrentParsedPdfArtifact({ documentId: 'doc-1', namespace: null }))
.rejects.toThrow('envelope is invalid');
});
});