Files
0pt/tests/document-workbench/candidate-catalog.test.ts
admin bd1c20edb2
CI (SIAX Cloud) / integration (push) Skipped
CI (SIAX Cloud) / sonar (push) Skipped
masterplan-lock / check (push) Successful in 5s
Security Scan (SIAX Cloud) / security (push) Successful in 15s
CI (SIAX Cloud) / security (push) Successful in 16s
CI (SIAX Cloud) / sonar (pull_request) Skipped
masterplan-lock / check (pull_request) Successful in 7s
Security Scan (SIAX Cloud) / security (pull_request) Successful in 21s
CI (SIAX Cloud) / security (pull_request) Successful in 25s
CI (SIAX Cloud) / quality (push) Successful in 1m17s
CI (SIAX Cloud) / integration (pull_request) Successful in 54s
CI (SIAX Cloud) / quality (pull_request) Successful in 1m7s
feat: add guarded document workbench foundations
2026-11-02 01:26:36 +01:00

53 lines
2.0 KiB
TypeScript

import { describe, expect, it } from 'vitest';
import { TOOL_CANDIDATES, candidatesForRole } from '../../src/document-workbench/candidate-catalog';
describe('candidate catalog', () => {
it('includes the selected and alternative tools without marking them ready', () => {
const ids = TOOL_CANDIDATES.map((tool) => tool.id);
expect(new Set(ids).size).toBe(ids.length);
expect(ids).toEqual(
expect.arrayContaining([
'docling',
'unstructured',
'tika',
'tesseract',
'paddleocr',
'duckdb',
'polars',
'frictionless',
'pandera',
'great-expectations',
'valentine',
'rapidfuzz',
'splink',
'assistant-ui',
'temporal',
'langgraph',
'openmeter',
'openrouter',
]),
);
expect(TOOL_CANDIDATES.every((tool) => tool.status === 'qualification_required')).toBe(true);
});
it('finds alternatives by role and flags restricted services for extra review', () => {
expect(candidatesForRole('ocr').map((tool) => tool.id)).toEqual(
expect.arrayContaining(['tesseract', 'paddleocr', 'ocrmypdf']),
);
for (const id of ['pymupdf', 'marker', 'mineru', 'dify', 'n8n', 'open-webui', 'openrouter']) {
expect(TOOL_CANDIDATES.find((tool) => tool.id === id)?.review).toBe(
'additional_license_or_service_review',
);
}
});
it('records bounded-decision, agent and evaluation candidates without authorizing execution', () => {
expect(candidatesForRole('decision').map((tool) => tool.id)).toContain('jev');
expect(candidatesForRole('agent').map((tool) => tool.id)).toEqual(
expect.arrayContaining(['langgraph', 'pydantic-ai', 'microsoft-agent-framework', 'crewai']),
);
expect(candidatesForRole('evaluation').map((tool) => tool.id)).toEqual(
expect.arrayContaining(['promptfoo', 'deepeval', 'ragas', 'langfuse']),
);
expect(TOOL_CANDIDATES.every((tool) => tool.status === 'qualification_required')).toBe(true);
});
});