openclaw/src/shared/requirements.test.ts
2026-02-14 15:39:45 +00:00

64 lines
1.6 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
buildConfigChecks,
resolveMissingAnyBins,
resolveMissingBins,
resolveMissingEnv,
resolveMissingOs,
} from "./requirements.js";
describe("requirements helpers", () => {
it("resolveMissingBins respects local+remote", () => {
expect(
resolveMissingBins({
required: ["a", "b", "c"],
hasLocalBin: (bin) => bin === "a",
hasRemoteBin: (bin) => bin === "b",
}),
).toEqual(["c"]);
});
it("resolveMissingAnyBins requires at least one", () => {
expect(
resolveMissingAnyBins({
required: ["a", "b"],
hasLocalBin: () => false,
hasRemoteAnyBin: () => false,
}),
).toEqual(["a", "b"]);
expect(
resolveMissingAnyBins({
required: ["a", "b"],
hasLocalBin: (bin) => bin === "b",
}),
).toEqual([]);
});
it("resolveMissingOs allows remote platform", () => {
expect(
resolveMissingOs({
required: ["darwin"],
localPlatform: "linux",
remotePlatforms: ["darwin"],
}),
).toEqual([]);
expect(resolveMissingOs({ required: ["darwin"], localPlatform: "linux" })).toEqual(["darwin"]);
});
it("resolveMissingEnv uses predicate", () => {
expect(
resolveMissingEnv({ required: ["A", "B"], isSatisfied: (name) => name === "B" }),
).toEqual(["A"]);
});
it("buildConfigChecks includes value+status", () => {
expect(
buildConfigChecks({
required: ["a.b"],
resolveValue: (p) => (p === "a.b" ? 1 : null),
isSatisfied: (p) => p === "a.b",
}),
).toEqual([{ path: "a.b", value: 1, satisfied: true }]);
});
});