mirror of
https://github.com/openclaw/clawhub.git
synced 2026-08-14 00:47:57 +00:00
* feat: add crabbox ui proof workflow * fix: render ui proof video previews inline
74 lines
2.4 KiB
JavaScript
74 lines
2.4 KiB
JavaScript
/* @vitest-environment node */
|
|
|
|
import { describe, expect, it } from "vitest";
|
|
import {
|
|
assertRequiredCrabboxCapabilities,
|
|
inspectCrabboxCapabilities,
|
|
normalizeCrabboxArgs,
|
|
requiresDesktopSupport,
|
|
selectCrabboxBinary,
|
|
} from "./crabbox-wrapper.mjs";
|
|
|
|
describe("crabbox-wrapper", () => {
|
|
it("normalizes package-manager separators without eating remote command separators", () => {
|
|
expect(normalizeCrabboxArgs(["--", "run", "--provider", "blacksmith-testbox"])).toEqual([
|
|
"run",
|
|
"--provider",
|
|
"blacksmith-testbox",
|
|
]);
|
|
expect(normalizeCrabboxArgs(["actions", "hydrate", "--", "--id", "cbx_123"])).toEqual([
|
|
"actions",
|
|
"hydrate",
|
|
"--id",
|
|
"cbx_123",
|
|
]);
|
|
expect(normalizeCrabboxArgs(["run", "--provider", "hetzner", "--", "bun", "test"])).toEqual([
|
|
"run",
|
|
"--provider",
|
|
"hetzner",
|
|
"--",
|
|
"bun",
|
|
"test",
|
|
]);
|
|
});
|
|
|
|
it("prefers a sibling Crabbox checkout when it exists", () => {
|
|
expect(
|
|
selectCrabboxBinary({
|
|
exists: (candidate) => candidate === "/repo/crabbox/bin/crabbox",
|
|
repoRoot: "/repo/clawhub",
|
|
}),
|
|
).toBe("/repo/crabbox/bin/crabbox");
|
|
});
|
|
|
|
it("rejects stale Crabbox binaries that cannot wrap Blacksmith Testbox", () => {
|
|
const capabilities = inspectCrabboxCapabilities({
|
|
runHelp: "Usage: crabbox run --provider aws|hetzner",
|
|
topLevelHelp: "Usage: crabbox run",
|
|
versionText: "crabbox v0.4.0",
|
|
});
|
|
|
|
expect(() =>
|
|
assertRequiredCrabboxCapabilities(capabilities, { requireDesktop: false }),
|
|
).toThrow(/blacksmith-testbox/u);
|
|
});
|
|
|
|
it("rejects stale Crabbox binaries for desktop UI proof commands", () => {
|
|
const capabilities = inspectCrabboxCapabilities({
|
|
runHelp: "Usage: crabbox run --provider aws|hetzner|blacksmith-testbox",
|
|
topLevelHelp: "Usage: crabbox run\ncrabbox screenshot",
|
|
versionText: "crabbox v0.5.0",
|
|
});
|
|
|
|
expect(() => assertRequiredCrabboxCapabilities(capabilities, { requireDesktop: true })).toThrow(
|
|
/desktop.*artifacts/u,
|
|
);
|
|
});
|
|
|
|
it("requires desktop support when run flags request browser or desktop leases", () => {
|
|
expect(requiresDesktopSupport(["run", "--provider", "hetzner", "--desktop"])).toBe(true);
|
|
expect(requiresDesktopSupport(["warmup", "--provider", "hetzner", "--browser"])).toBe(true);
|
|
expect(requiresDesktopSupport(["run", "--provider", "blacksmith-testbox"])).toBe(false);
|
|
});
|
|
});
|