Files
openclaw/extensions/qa-lab/src/self-check.test.ts
2026-06-23 10:46:25 +02:00

66 lines
2.1 KiB
TypeScript

// Qa Lab tests cover self check plugin behavior.
import path from "node:path";
import { describe, expect, it } from "vitest";
import type { QaSelfCheckResult } from "./self-check.js";
import { isQaSelfCheckSuccessful, resolveQaSelfCheckOutputPath } from "./self-check.js";
function makeSelfCheckResult(params: {
scenarioStatus: "pass" | "fail";
checkStatuses: Array<"pass" | "fail">;
}): QaSelfCheckResult {
return {
outputPath: "/tmp/qa-self-check.md",
report: "",
checks: params.checkStatuses.map((status, index) => ({
name: `check ${String(index + 1)}`,
status,
})),
scenarioResult: {
name: "QA self-check scenario",
status: params.scenarioStatus,
steps: [],
},
};
}
describe("isQaSelfCheckSuccessful", () => {
it("requires the scenario and every check to pass", () => {
expect(
isQaSelfCheckSuccessful(
makeSelfCheckResult({ scenarioStatus: "pass", checkStatuses: ["pass"] }),
),
).toBe(true);
expect(
isQaSelfCheckSuccessful(
makeSelfCheckResult({ scenarioStatus: "fail", checkStatuses: ["pass"] }),
),
).toBe(false);
expect(
isQaSelfCheckSuccessful(
makeSelfCheckResult({ scenarioStatus: "pass", checkStatuses: ["pass", "fail"] }),
),
).toBe(false);
});
});
describe("resolveQaSelfCheckOutputPath", () => {
it("keeps explicit output paths untouched", () => {
expect(
resolveQaSelfCheckOutputPath({
repoRoot: "/tmp/openclaw-repo",
outputPath: "/tmp/custom/self-check.md",
}),
).toBe("/tmp/custom/self-check.md");
});
it("anchors default self-check reports under unique files in the provided repo root", () => {
const repoRoot = path.resolve("/tmp/openclaw-repo");
const firstPath = resolveQaSelfCheckOutputPath({ repoRoot });
const secondPath = resolveQaSelfCheckOutputPath({ repoRoot });
expect(path.dirname(firstPath)).toBe(path.join(repoRoot, ".artifacts", "qa-e2e"));
expect(path.basename(firstPath)).toMatch(/^self-check-[a-z0-9]+-[a-f0-9]{8}\.md$/u);
expect(secondPath).not.toBe(firstPath);
});
});