41 lines
1.7 KiB
TypeScript
41 lines
1.7 KiB
TypeScript
import { describe, expect, it } from 'vitest';
|
|
import { parseCsvDocument } from '../../src/importers/csv-importer';
|
|
import { recognizeImportDocument } from '../../src/recognition/recognition-engine';
|
|
import { sourceMetadata } from '../importers/import-source-fixtures';
|
|
|
|
describe('source recognition', () => {
|
|
it('recognizes Purple Knight from independent filename, schema and value signals', () => {
|
|
const text = [
|
|
'Name;Short Name;SI Version;Severity;Weight;Category;Result',
|
|
'Synthetic indicator;SYN-001;1;High;10;Identity;IOEs found'
|
|
].join('\n');
|
|
const document = parseCsvDocument(sourceMetadata('PurpleKnight-results.csv', text.length), text);
|
|
|
|
const recognition = recognizeImportDocument(document);
|
|
|
|
expect(recognition.source.selected).toMatchObject({
|
|
toolId: 'purple-knight',
|
|
toolName: 'PurpleKnight',
|
|
confidence: { level: 'high' }
|
|
});
|
|
expect(recognition.source.selected.evidence.length).toBeGreaterThanOrEqual(3);
|
|
expect(recognition.source.selected.confidence.reasons).toEqual(
|
|
expect.arrayContaining([expect.stringContaining('Dateiname')])
|
|
);
|
|
});
|
|
|
|
it('uses the unknown fallback when no tool signal reaches the minimum confidence', () => {
|
|
const text = 'Alpha;Beta\none;two';
|
|
const document = parseCsvDocument(sourceMetadata('table.csv', text.length), text);
|
|
|
|
const recognition = recognizeImportDocument(document);
|
|
|
|
expect(recognition.source).toMatchObject({
|
|
decisionSource: 'fallback',
|
|
requiresConfirmation: false,
|
|
selected: { toolId: 'unknown', confidence: { level: 'unknown', score: 0 } }
|
|
});
|
|
expect(recognition.fields.every(field => field.appliedRole === 'additional')).toBe(true);
|
|
});
|
|
});
|