← Files Investment BankingARCHIVED FILE

tests/test_document_ingestion_and_source_gate.py

1.91 KB · Oct 2, 2026 · 00:27 UTC

↓ Download file

from __future__ import annotations

import importlib.util
import tempfile
import unittest
from pathlib import Path

ROOT = Path(__file__).resolve().parents[1]


def load_module(rel: str, name: str):
    path = ROOT / rel
    spec = importlib.util.spec_from_file_location(name, path)
    assert spec is not None
    assert spec.loader is not None
    module = importlib.util.module_from_spec(spec)
    spec.loader.exec_module(module)
    return module


class DocumentIngestionAndSourceGateTests(unittest.TestCase):
    def test_pdf_without_extractable_text_requires_ocr(self) -> None:
        doc = load_module("shared/document_ingestion.py", "document_ingestion")
        with tempfile.TemporaryDirectory() as tmpdir:
            pdf = Path(tmpdir) / "scan.pdf"
            pdf.write_bytes(b"%PDF-1.4\n1 0 obj << /Type /Page >> endobj\n%%EOF")
            result = doc.inspect_document(pdf)
            self.assertEqual(result["document_type"], "pdf")
            self.assertTrue(result["ocr_required"])
            self.assertIn(result["extraction_confidence"], {"none", "low"})

    def test_source_gate_blocks_senior_ready_missing_source_register(self) -> None:
        gate = load_module("shared/source_gate.py", "source_gate")
        result = gate.validate_source_gate([], "client-ready")
        self.assertEqual(result["status"], "failed")
        self.assertTrue(result["errors"])

    def test_source_gate_warns_on_assumptions(self) -> None:
        gate = load_module("shared/source_gate.py", "source_gate")
        result = gate.validate_source_gate(
            [
                {
                    "source_id": "SRC-1",
                    "evidence_label": "management_assumption",
                    "as_of_date": "2026-05-18",
                }
            ],
            "draft",
        )
        self.assertEqual(result["status"], "passed")
        self.assertTrue(result["warnings"])


if __name__ == "__main__":
    unittest.main()

SHA-256: e3cc75adc881092dce3e8895717666f4fb7ae165caadf26ae569b4da2ac8b7f3