/* Unit tests for astro profile covering astroCertificationProfile. It also guards the documented public contract and regression-sensitive edge cases. Not a contract source of truth — the module under test owns the authoritative behavior; fixtures are minimal scaffolding only. RFC-1311: Compass header sweep — declares the astro suite's contract for test-file scaffold coverage. */ import { describe, it, expect } from "vitest"; import { astroCertificationProfile } from "../astro-profile.ts"; import { certificationProfileV1Schema } from "../schemas.ts"; import { validateCertificationProfileV1 } from "../validate.ts"; describe("astroCertificationProfile", () => { it("passes schema validation", () => { const result = certificationProfileV1Schema.safeParse(astroCertificationProfile); expect(result.success).toBe(true); }); it("has correct plugin binding", () => { expect(astroCertificationProfile.plugin.id).toBe("werkstatt-site"); expect(astroCertificationProfile.plugin.profileId).toBe("site"); }); it("covers all 9 site quality dimensions", () => { expect(astroCertificationProfile.dimensions).toHaveLength(9); expect(astroCertificationProfile.dimensions).toContain("candidate-integrity"); expect(astroCertificationProfile.dimensions).toContain("business-truth-compliance"); expect(astroCertificationProfile.dimensions).toContain("editorial-localization"); expect(astroCertificationProfile.dimensions).toContain( "information-architecture-discoverability", ); expect(astroCertificationProfile.dimensions).toContain("ux-conversion"); expect(astroCertificationProfile.dimensions).toContain("visual-accessibility"); expect(astroCertificationProfile.dimensions).toContain("performance-runtime"); expect(astroCertificationProfile.dimensions).toContain("security-operational-readiness"); expect(astroCertificationProfile.dimensions).toContain("independent-qualitative-evaluation"); }); it("has 9 requirements with promote-main gate", () => { expect(astroCertificationProfile.requirements).toHaveLength(9); for (const req of astroCertificationProfile.requirements) { expect(req.gates).toContain("promote-main"); expect(req.classification).toBe("required"); } }); it("has at least one producer", () => { const producerIds = Object.keys(astroCertificationProfile.producers); expect(producerIds.length).toBeGreaterThanOrEqual(1); expect(astroCertificationProfile.producers["astro-mission-check"]).toBeDefined(); }); it("passes validateCertificationProfileV1 with matching context", () => { const ctx = { pluginId: "werkstatt-site", profileId: "site", registeredCommands: new Set(["mission.check", "editorial.review.verify"]), }; const result = validateCertificationProfileV1(astroCertificationProfile, ctx); expect(result.valid).toBe(true); expect(result.diagnostics).toHaveLength(0); }); it("fails validation when plugin id does not match", () => { const ctx = { pluginId: "wrong-plugin", profileId: "site", registeredCommands: new Set(["mission.check"]), }; const result = validateCertificationProfileV1(astroCertificationProfile, ctx); expect(result.valid).toBe(false); expect(result.diagnostics.some((d) => d.ruleId === "CERT-PROFILE-02")).toBe(true); }); it("has valid retention policy", () => { const rp = astroCertificationProfile.retentionPolicy; expect(rp.minRetentionDays).toBeLessThanOrEqual(rp.maxRetentionDays); }); });