Spaces:
Running
Running
| /** | |
| * compliance_pass.test.ts | |
| * Doctrine v6 R3 — Vertical Governance Receipts | |
| * 10 PASSING compliance cases: valid policy documents correctly accepted by schema and loader. | |
| * | |
| * Test framework: Jest / ts-jest | |
| * Run: npx jest tests/compliance/compliance_pass.test.ts | |
| */ | |
| import Ajv from "ajv"; | |
| import addFormats from "ajv-formats"; | |
| import * as fs from "fs"; | |
| import * as path from "path"; | |
| import * as yaml from "js-yaml"; | |
| // ── Helpers ────────────────────────────────────────────────────────────────── | |
| const SCHEMA_PATH = path.resolve(__dirname, "../../a11oy-knowledge.schema.json"); | |
| const POLICIES_DIR = path.resolve(__dirname, "../../policies/vertical"); | |
| function loadSchema() { | |
| const raw = fs.readFileSync(SCHEMA_PATH, "utf8"); | |
| return JSON.parse(raw); | |
| } | |
| function loadPolicy(filename: string): unknown { | |
| const filepath = path.join(POLICIES_DIR, filename); | |
| const raw = fs.readFileSync(filepath, "utf8"); | |
| return yaml.load(raw); | |
| } | |
| function buildValidator() { | |
| const ajv = new Ajv({ allErrors: true, strict: false }); | |
| addFormats(ajv); | |
| const schema = loadSchema(); | |
| return ajv.compile(schema); | |
| } | |
| // ── Test Suite ──────────────────────────────────────────────────────────────── | |
| describe("Compliance PASS — valid vertical policies accepted", () => { | |
| const validate = buildValidator(); | |
| // PASS-001: Healthcare HIPAA policy validates against schema | |
| test("PASS-001: healthcare-hipaa.yaml validates against a11oy schema", () => { | |
| const policy = loadPolicy("healthcare-hipaa.yaml"); | |
| const valid = validate(policy); | |
| if (!valid) console.error("Validation errors:", validate.errors); | |
| expect(valid).toBe(true); | |
| }); | |
| // PASS-002: Financial SOX policy validates against schema | |
| test("PASS-002: financial-sox.yaml validates against a11oy schema", () => { | |
| const policy = loadPolicy("financial-sox.yaml"); | |
| const valid = validate(policy); | |
| if (!valid) console.error("Validation errors:", validate.errors); | |
| expect(valid).toBe(true); | |
| }); | |
| // PASS-003: Defense CMMC-L3 policy validates against schema | |
| test("PASS-003: defense-cmmc-l3.yaml validates against a11oy schema", () => { | |
| const policy = loadPolicy("defense-cmmc-l3.yaml"); | |
| const valid = validate(policy); | |
| if (!valid) console.error("Validation errors:", validate.errors); | |
| expect(valid).toBe(true); | |
| }); | |
| // PASS-004: Aviation DO-178C policy validates against schema | |
| test("PASS-004: aviation-do178c.yaml validates against a11oy schema", () => { | |
| const policy = loadPolicy("aviation-do178c.yaml"); | |
| const valid = validate(policy); | |
| if (!valid) console.error("Validation errors:", validate.errors); | |
| expect(valid).toBe(true); | |
| }); | |
| // PASS-005: Automotive ISO-26262 policy validates against schema | |
| test("PASS-005: automotive-iso26262.yaml validates against a11oy schema", () => { | |
| const policy = loadPolicy("automotive-iso26262.yaml"); | |
| const valid = validate(policy); | |
| if (!valid) console.error("Validation errors:", validate.errors); | |
| expect(valid).toBe(true); | |
| }); | |
| // PASS-006: Pharmaceutical 21CFR11 policy validates against schema | |
| test("PASS-006: pharma-21cfr11.yaml validates against a11oy schema", () => { | |
| const policy = loadPolicy("pharma-21cfr11.yaml"); | |
| const valid = validate(policy); | |
| if (!valid) console.error("Validation errors:", validate.errors); | |
| expect(valid).toBe(true); | |
| }); | |
| // PASS-007: Energy NERC-CIP policy validates against schema | |
| test("PASS-007: energy-nerc-cip.yaml validates against a11oy schema", () => { | |
| const policy = loadPolicy("energy-nerc-cip.yaml"); | |
| const valid = validate(policy); | |
| if (!valid) console.error("Validation errors:", validate.errors); | |
| expect(valid).toBe(true); | |
| }); | |
| // PASS-008: Maritime IMO-ISPS policy validates against schema | |
| test("PASS-008: maritime-imo-isps.yaml validates against a11oy schema", () => { | |
| const policy = loadPolicy("maritime-imo-isps.yaml"); | |
| const valid = validate(policy); | |
| if (!valid) console.error("Validation errors:", validate.errors); | |
| expect(valid).toBe(true); | |
| }); | |
| // PASS-009: LegalTech GDPR policy validates against schema | |
| test("PASS-009: legaltech-gdpr.yaml validates against a11oy schema", () => { | |
| const policy = loadPolicy("legaltech-gdpr.yaml"); | |
| const valid = validate(policy); | |
| if (!valid) console.error("Validation errors:", validate.errors); | |
| expect(valid).toBe(true); | |
| }); | |
| // PASS-010: Academic research ethics policy validates against schema | |
| test("PASS-010: academic-research-ethics.yaml validates against a11oy schema", () => { | |
| const policy = loadPolicy("academic-research-ethics.yaml"); | |
| const valid = validate(policy); | |
| if (!valid) console.error("Validation errors:", validate.errors); | |
| expect(valid).toBe(true); | |
| }); | |
| }); | |
| // ── Structural Invariants ───────────────────────────────────────────────────── | |
| describe("Compliance PASS — structural invariants across all policies", () => { | |
| const validate = buildValidator(); | |
| const policyFiles = [ | |
| "healthcare-hipaa.yaml", | |
| "financial-sox.yaml", | |
| "defense-cmmc-l3.yaml", | |
| "aviation-do178c.yaml", | |
| "automotive-iso26262.yaml", | |
| "pharma-21cfr11.yaml", | |
| "energy-nerc-cip.yaml", | |
| "maritime-imo-isps.yaml", | |
| "legaltech-gdpr.yaml", | |
| "academic-research-ethics.yaml", | |
| ]; | |
| for (const file of policyFiles) { | |
| test(`INV: ${file} — regulatory_clauses count ∈ [8, 12]`, () => { | |
| const policy = loadPolicy(file) as any; | |
| const count = policy.regulatory_clauses.length; | |
| expect(count).toBeGreaterThanOrEqual(8); | |
| expect(count).toBeLessThanOrEqual(12); | |
| }); | |
| test(`INV: ${file} — receipt_retention_days ≥ 365`, () => { | |
| const policy = loadPolicy(file) as any; | |
| expect(policy.compliance_thresholds.receipt_retention_days).toBeGreaterThanOrEqual(365); | |
| }); | |
| test(`INV: ${file} — receipt chain algorithm is SHA3-256`, () => { | |
| const policy = loadPolicy(file) as any; | |
| expect(policy.receipt_chain.algorithm).toBe("SHA3-256"); | |
| }); | |
| test(`INV: ${file} — quorum format matches N-of-M`, () => { | |
| const policy = loadPolicy(file) as any; | |
| expect(policy.receipt_chain.quorum).toMatch(/^\d+-of-\d+$/); | |
| }); | |
| } | |
| }); | |