30 lines
1.7 KiB
TypeScript
30 lines
1.7 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import type { CanonicalAssessmentModel } from '../../src/domain/canonical-model';
|
|
import { datahubScanReadiness, isDatahubScanViewable } from '../../src/features/project-import/datahub-scan-readiness';
|
|
|
|
function model(scanRunIds: string[], occurrenceRunIds: string[]): CanonicalAssessmentModel {
|
|
return {
|
|
scanRuns: scanRunIds.map((id, index) => ({ id, assessmentId: 'assessment', sequence: index + 1, label: id, tool: { id: 'test', name: 'Test' }, importedAt: '2026-08-22T00:00:00.000Z' })),
|
|
findingOccurrences: occurrenceRunIds.map((scanRunId, index) => ({ id: `occurrence-${index}`, scanRunId }))
|
|
} as unknown as CanonicalAssessmentModel;
|
|
}
|
|
|
|
describe('Datahub scan readiness', () => {
|
|
it('only marks persisted runs with canonical Work records as viewable', () => {
|
|
const models = [model(['recognized', 'empty'], ['recognized'])];
|
|
expect(datahubScanReadiness(models, 'recognized', 'pingcastle')).toBe('recognized');
|
|
expect(datahubScanReadiness(models, 'empty', 'pingcastle')).toBe('not-viewable');
|
|
expect(datahubScanReadiness(models, 'missing', 'pingcastle')).toBe('not-viewable');
|
|
expect(isDatahubScanViewable('recognized')).toBe(true);
|
|
expect(isDatahubScanViewable('not-viewable')).toBe(false);
|
|
});
|
|
|
|
it('distinguishes generic-but-viewable data from a recognized scanner', () => {
|
|
const models = [model(['generic-run'], ['generic-run'])];
|
|
expect(datahubScanReadiness(models, 'generic-run', 'generic')).toBe('generic');
|
|
expect(isDatahubScanViewable('generic')).toBe(true);
|
|
expect(isDatahubScanViewable('checking')).toBe(false);
|
|
expect(isDatahubScanViewable('unavailable')).toBe(false);
|
|
});
|
|
});
|