mirror of
https://github.com/Kaelio/ktx.git
synced 2026-06-10 08:05:14 +02:00
78 lines
2.3 KiB
TypeScript
78 lines
2.3 KiB
TypeScript
import { mkdtemp, rm, writeFile } from 'node:fs/promises';
|
|
import { tmpdir } from 'node:os';
|
|
import { join } from 'node:path';
|
|
import { afterEach, beforeEach, describe, expect, it } from 'vitest';
|
|
import { readIngestReportSnapshotFile } from './ingest-report-file.js';
|
|
|
|
function reportSnapshot() {
|
|
return {
|
|
id: 'report-1',
|
|
runId: 'run-1',
|
|
jobId: 'job-1',
|
|
connectionId: 'warehouse',
|
|
sourceKey: 'metabase',
|
|
createdAt: '2026-04-30T12:00:00.000Z',
|
|
body: {
|
|
syncId: 'sync-1',
|
|
diffSummary: { added: 1, modified: 0, deleted: 0, unchanged: 0 },
|
|
commitSha: null,
|
|
workUnits: [],
|
|
failedWorkUnits: [],
|
|
reconciliationSkipped: true,
|
|
conflictsResolved: [],
|
|
evictionsApplied: [],
|
|
unmappedFallbacks: [],
|
|
evictionInputs: [],
|
|
unresolvedCards: [],
|
|
supersededBy: null,
|
|
overrideOf: null,
|
|
provenanceRows: [],
|
|
toolTranscripts: [],
|
|
},
|
|
};
|
|
}
|
|
|
|
describe('readIngestReportSnapshotFile', () => {
|
|
let tempDir: string;
|
|
|
|
beforeEach(async () => {
|
|
tempDir = await mkdtemp(join(tmpdir(), 'ktx-report-file-'));
|
|
});
|
|
|
|
afterEach(async () => {
|
|
await rm(tempDir, { recursive: true, force: true });
|
|
});
|
|
|
|
it('reads and parses an ingest report JSON file', async () => {
|
|
const reportPath = join(tempDir, 'report.json');
|
|
await writeFile(reportPath, `${JSON.stringify(reportSnapshot(), null, 2)}\n`, 'utf-8');
|
|
|
|
const report = await readIngestReportSnapshotFile(reportPath);
|
|
|
|
expect(report).toMatchObject({
|
|
id: 'report-1',
|
|
runId: 'run-1',
|
|
jobId: 'job-1',
|
|
connectionId: 'warehouse',
|
|
sourceKey: 'metabase',
|
|
});
|
|
});
|
|
|
|
it('reports invalid JSON with the file path', async () => {
|
|
const reportPath = join(tempDir, 'invalid.json');
|
|
await writeFile(reportPath, '{not json', 'utf-8');
|
|
|
|
await expect(readIngestReportSnapshotFile(reportPath)).rejects.toThrow(
|
|
`Invalid JSON in ingest report file ${reportPath}`,
|
|
);
|
|
});
|
|
|
|
it('reports schema failures with the file path', async () => {
|
|
const reportPath = join(tempDir, 'wrong-shape.json');
|
|
await writeFile(reportPath, JSON.stringify({ id: 'report-1' }), 'utf-8');
|
|
|
|
await expect(readIngestReportSnapshotFile(reportPath)).rejects.toThrow(
|
|
`Invalid ingest report file ${reportPath}`,
|
|
);
|
|
});
|
|
});
|