44 lines
1.7 KiB
TypeScript
44 lines
1.7 KiB
TypeScript
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");
|
|
});
|
|
});
|