21 lines
1.2 KiB
TypeScript
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);
|
|
});
|
|
});
|