test: tighten shared requirements coverage

This commit is contained in:
Peter Steinberger
2026-03-13 21:29:07 +00:00
parent 330631a0eb
commit 783d320547

View File

@@ -1,7 +1,9 @@
import { describe, expect, it } from "vitest";
import {
buildConfigChecks,
evaluateRequirements,
evaluateRequirementsFromMetadata,
evaluateRequirementsFromMetadataWithRemote,
resolveMissingAnyBins,
resolveMissingBins,
resolveMissingEnv,
@@ -79,4 +81,87 @@ describe("requirements helpers", () => {
expect(res.missing.os).toEqual(["darwin"]);
expect(res.eligible).toBe(false);
});
it("evaluateRequirements reports config checks and all missing categories directly", () => {
const res = evaluateRequirements({
always: false,
required: {
bins: ["node"],
anyBins: ["bun", "deno"],
env: ["OPENAI_API_KEY"],
config: ["browser.enabled", "gateway.enabled"],
os: ["darwin"],
},
hasLocalBin: () => false,
hasRemoteBin: (bin) => bin === "node",
hasRemoteAnyBin: () => false,
localPlatform: "linux",
remotePlatforms: ["windows"],
isEnvSatisfied: () => false,
isConfigSatisfied: (path) => path === "gateway.enabled",
});
expect(res.missing).toEqual({
bins: [],
anyBins: ["bun", "deno"],
env: ["OPENAI_API_KEY"],
config: ["browser.enabled"],
os: ["darwin"],
});
expect(res.configChecks).toEqual([
{ path: "browser.enabled", satisfied: false },
{ path: "gateway.enabled", satisfied: true },
]);
expect(res.eligible).toBe(false);
});
it("clears missing requirements when always is true but preserves config checks", () => {
const res = evaluateRequirements({
always: true,
required: {
bins: ["node"],
anyBins: ["bun"],
env: ["OPENAI_API_KEY"],
config: ["browser.enabled"],
os: ["darwin"],
},
hasLocalBin: () => false,
localPlatform: "linux",
isEnvSatisfied: () => false,
isConfigSatisfied: () => false,
});
expect(res.missing).toEqual({ bins: [], anyBins: [], env: [], config: [], os: [] });
expect(res.configChecks).toEqual([{ path: "browser.enabled", satisfied: false }]);
expect(res.eligible).toBe(true);
});
it("evaluateRequirementsFromMetadataWithRemote wires remote predicates and platforms through", () => {
const res = evaluateRequirementsFromMetadataWithRemote({
always: false,
metadata: {
requires: { bins: ["node"], anyBins: ["bun"], env: ["OPENAI_API_KEY"] },
os: ["darwin"],
},
remote: {
hasBin: (bin) => bin === "node",
hasAnyBin: (bins) => bins.includes("bun"),
platforms: ["darwin"],
},
hasLocalBin: () => false,
localPlatform: "linux",
isEnvSatisfied: (name) => name === "OPENAI_API_KEY",
isConfigSatisfied: () => true,
});
expect(res.required).toEqual({
bins: ["node"],
anyBins: ["bun"],
env: ["OPENAI_API_KEY"],
config: [],
os: ["darwin"],
});
expect(res.missing).toEqual({ bins: [], anyBins: [], env: [], config: [], os: [] });
expect(res.eligible).toBe(true);
});
});