openreader/packages/compute-worker/tests/unit/key-and-progress.test.ts
Richard R 358a56cc9a refactor: implement modular monorepo packages
- Extract database schema and migrations into @openreader/database

- Extract startup and orchestration scripts into @openreader/bootstrap

- Move compute-worker into packages/compute-worker

- Remove runtime dependency on drizzle-kit

- Update Dockerfile to deploy isolated packages without merging node_modules
2026-06-13 13:51:18 -06:00

52 lines
1.9 KiB
TypeScript

import { describe, expect, test } from 'vitest';
import { hashOpKey, opIndexKvKey, opStateKvKey } from '../../src/infrastructure/nats-adapters';
import {
buildInferProgressForPageParsed,
buildInferProgressForPageStart,
} from '../../src/jobs/pdf-progress';
import { buildPdfOperationKey } from '../../src/operations/keys';
import { parsedPdfArtifactKey } from '../../src/storage/artifact-addressing';
describe('compute worker helpers', () => {
test('hash and kv key helpers are stable and deterministic', () => {
const hashA = hashOpKey('doc-123|layout|v1');
const hashB = hashOpKey('doc-123|layout|v1');
const hashC = hashOpKey('doc-123|layout|v2');
expect(hashA).toBe(hashB);
expect(hashA).toHaveLength(64);
expect(hashC).not.toBe(hashA);
expect(opIndexKvKey('doc-123|layout|v1')).toBe(`op_index.${hashA}`);
expect(opStateKvKey('op-1')).toBe('op_state.op-1');
});
test('progress helpers infer page counters correctly', () => {
expect(buildInferProgressForPageStart({ pageNumber: 1, totalPages: 12 })).toEqual({
totalPages: 12,
pagesParsed: 0,
currentPage: 1,
phase: 'infer',
});
expect(buildInferProgressForPageParsed({ pageNumber: 5, totalPages: 12 })).toEqual({
totalPages: 12,
pagesParsed: 5,
currentPage: 5,
phase: 'infer',
});
});
test('parser-version changes rotate worker-owned operation and artifact identities', () => {
const request = {
documentId: 'a'.repeat(64),
namespace: null,
documentObjectKey: `openreader/${'a'.repeat(64)}.pdf`,
};
expect(buildPdfOperationKey(request, 'parser-v1'))
.not.toBe(buildPdfOperationKey(request, 'parser-v2'));
expect(parsedPdfArtifactKey({ ...request, prefix: 'openreader', parserVersion: 'parser-v1' }))
.not.toBe(parsedPdfArtifactKey({ ...request, prefix: 'openreader', parserVersion: 'parser-v2' }));
});
});