import { describe, expect, it } from "vitest"; import { formatCapabilityReport, parseFactoryCapabilities, probeFactoryCapabilities } from "./factory-capabilities.js"; const yaml = `services: git-proxy-deploy: url: http://77.42.112.29:8099/deploy provides: [deploy] required: true git-proxy: url: http://77.42.112.29:8099/factory-status provides: [factory-status, discovery] required: true `; describe("factory capabilities", () => { it("parses the capability registry", () => { const services = parseFactoryCapabilities(yaml); expect(services).toHaveLength(2); expect(services[0]).toMatchObject({ name: "git-proxy-deploy", required: true, provides: ["deploy"] }); }); it("fails required capabilities that return 404", async () => { const services = parseFactoryCapabilities(yaml); const report = await probeFactoryCapabilities(services, async (url) => ({ ok: url.includes("/deploy"), status: url.includes("/deploy") ? 401 : 404 })); expect(report.requiredOk).toBe(false); expect(report.available).toContain("deploy"); expect(report.missing).toContain("factory-status"); expect(formatCapabilityReport(report)).toContain("FAIL git-proxy provides factory-status, discovery: HTTP 404"); }); it("fails closed for malformed registry entries", async () => { const services = parseFactoryCapabilities(`services: broken: provides: [factory-status] `); const report = await probeFactoryCapabilities(services, async () => ({ ok: true, status: 200 })); expect(report.requiredOk).toBe(false); expect(report.missing).toContain("factory-status"); expect(formatCapabilityReport(report)).toContain("FAIL broken provides factory-status: missing url"); }); });