Assessor_2.0/tests/persistence/import-fingerprint.test.ts

21 lines
1.2 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { LocalAssessorRepository } from '../../src/persistence/local-assessor-repository';
describe('import fingerprint repository', () => {
it('records hashes atomically and increments repeat counters', async () => {
const repository = new LocalAssessorRepository();
const entry = { sha256: 'b'.repeat(64), fileName: 'report.xlsx', sizeBytes: 42, lastModified: 7 };
await repository.recordImportFingerprints([entry], '2026-07-17T08:00:00.000Z');
const repeated = await repository.recordImportFingerprints([entry], '2026-07-17T09:00:00.000Z');
expect(repeated[0]).toMatchObject({ ...entry, importCount: 2, firstImportedAt: '2026-07-17T08:00:00.000Z', lastImportedAt: '2026-07-17T09:00:00.000Z' });
await expect(repository.findImportFingerprints(['c'.repeat(64)])).resolves.toEqual([]);
expect(repository.revision).toBe(2);
});
it('rejects malformed fingerprints without changing repository state', async () => {
const repository = new LocalAssessorRepository();
await expect(repository.recordImportFingerprints([{ sha256: 'invalid', fileName: 'x.csv', sizeBytes: 1, lastModified: 0 }])).rejects.toThrow('SHA-256');
expect(repository.revision).toBe(0);
});
});