Files
openclaw/src/plugins/min-host-version.test.ts
2026-03-28 06:04:51 +00:00

104 lines
2.6 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
checkMinHostVersion,
MIN_HOST_VERSION_FORMAT,
parseMinHostVersionRequirement,
validateMinHostVersion,
} from "./min-host-version.js";
const MIN_HOST_REQUIREMENT = {
raw: ">=2026.3.22",
minimumLabel: "2026.3.22",
};
function expectValidHostCheck(currentVersion: string, minHostVersion?: string) {
expectHostCheckResult({
currentVersion,
minHostVersion,
expected: {
ok: true,
requirement: minHostVersion ? MIN_HOST_REQUIREMENT : null,
},
});
}
function expectHostCheckResult(params: {
currentVersion: string;
minHostVersion?: string | number;
expected: unknown;
}) {
expect(
checkMinHostVersion({
currentVersion: params.currentVersion,
minHostVersion: params.minHostVersion,
}),
).toEqual(params.expected);
}
function expectInvalidMinHostVersion(minHostVersion: string | number) {
expect(validateMinHostVersion(minHostVersion)).toBe(MIN_HOST_VERSION_FORMAT);
expectHostCheckResult({
currentVersion: "2026.3.22",
minHostVersion,
expected: {
ok: false,
kind: "invalid",
error: MIN_HOST_VERSION_FORMAT,
},
});
}
describe("min-host-version", () => {
it("accepts empty metadata", () => {
expect(validateMinHostVersion(undefined)).toBeNull();
expect(parseMinHostVersionRequirement(undefined)).toBeNull();
expectValidHostCheck("2026.3.22");
});
it("parses semver floors", () => {
expect(parseMinHostVersionRequirement(">=2026.3.22")).toEqual(MIN_HOST_REQUIREMENT);
});
it.each(["2026.3.22", 123, ">=2026.3.22 garbage"] as const)(
"rejects invalid floor syntax and host checks: %p",
(minHostVersion) => {
expectInvalidMinHostVersion(minHostVersion);
},
);
it.each([
{
name: "reports unknown host versions distinctly",
currentVersion: "unknown",
expected: {
ok: false,
kind: "unknown_host_version",
requirement: MIN_HOST_REQUIREMENT,
},
},
{
name: "reports incompatible hosts",
currentVersion: "2026.3.21",
expected: {
ok: false,
kind: "incompatible",
currentVersion: "2026.3.21",
requirement: MIN_HOST_REQUIREMENT,
},
},
] as const)("$name", ({ currentVersion, expected }) => {
expectHostCheckResult({
currentVersion,
minHostVersion: ">=2026.3.22",
expected,
});
});
it.each(["2026.3.22", "2026.4.0"] as const)(
"accepts equal or newer hosts: %s",
(currentVersion) => {
expectValidHostCheck(currentVersion, ">=2026.3.22");
},
);
});