refactor(tests): dedupe browser and config cli test setup

This commit is contained in:
Peter Steinberger
2026-03-03 01:14:38 +00:00
parent 1b4062defd
commit 67e3eb85d7
2 changed files with 184 additions and 213 deletions

View File

@@ -60,6 +60,52 @@ function setSnapshotOnce(snapshot: ConfigFileSnapshot) {
mockReadConfigFileSnapshot.mockResolvedValueOnce(snapshot);
}
function withRuntimeDefaults(resolved: OpenClawConfig): OpenClawConfig {
return {
...resolved,
agents: {
...resolved.agents,
defaults: {
model: "gpt-5.2",
} as never,
} as never,
};
}
function makeInvalidSnapshot(params: {
issues: ConfigFileSnapshot["issues"];
path?: string;
}): ConfigFileSnapshot {
return {
path: params.path ?? "/tmp/custom-openclaw.json",
exists: true,
raw: "{}",
parsed: {},
resolved: {},
valid: false,
config: {},
issues: params.issues,
warnings: [],
legacyIssues: [],
};
}
async function runValidateJsonAndGetPayload() {
await expect(runConfigCommand(["config", "validate", "--json"])).rejects.toThrow("__exit__:1");
const raw = mockLog.mock.calls.at(0)?.[0];
expect(typeof raw).toBe("string");
return JSON.parse(String(raw)) as {
valid: boolean;
path: string;
issues: Array<{
path: string;
message: string;
allowedValues?: string[];
allowedValuesHiddenCount?: number;
}>;
};
}
let registerConfigCli: typeof import("./config-cli.js").registerConfigCli;
let sharedProgram: Command;
@@ -90,13 +136,7 @@ describe("config cli", () => {
logging: { level: "debug" },
};
const runtimeMerged: OpenClawConfig = {
...resolved,
agents: {
...resolved.agents,
defaults: {
model: "gpt-5.2",
} as never,
} as never,
...withRuntimeDefaults(resolved),
};
setSnapshot(resolved, runtimeMerged);
@@ -194,23 +234,16 @@ describe("config cli", () => {
});
it("prints issues and exits 1 when config is invalid", async () => {
setSnapshotOnce({
path: "/tmp/custom-openclaw.json",
exists: true,
raw: "{}",
parsed: {},
resolved: {},
valid: false,
config: {},
issues: [
{
path: "agents.defaults.suppressToolErrorWarnings",
message: "Unrecognized key(s) in object",
},
],
warnings: [],
legacyIssues: [],
});
setSnapshotOnce(
makeInvalidSnapshot({
issues: [
{
path: "agents.defaults.suppressToolErrorWarnings",
message: "Unrecognized key(s) in object",
},
],
}),
);
await expect(runConfigCommand(["config", "validate"])).rejects.toThrow("__exit__:1");
@@ -222,30 +255,13 @@ describe("config cli", () => {
});
it("returns machine-readable JSON with --json for invalid config", async () => {
setSnapshotOnce({
path: "/tmp/custom-openclaw.json",
exists: true,
raw: "{}",
parsed: {},
resolved: {},
valid: false,
config: {},
issues: [{ path: "gateway.bind", message: "Invalid enum value" }],
warnings: [],
legacyIssues: [],
});
await expect(runConfigCommand(["config", "validate", "--json"])).rejects.toThrow(
"__exit__:1",
setSnapshotOnce(
makeInvalidSnapshot({
issues: [{ path: "gateway.bind", message: "Invalid enum value" }],
}),
);
const raw = mockLog.mock.calls.at(0)?.[0];
expect(typeof raw).toBe("string");
const payload = JSON.parse(String(raw)) as {
valid: boolean;
path: string;
issues: Array<{ path: string; message: string }>;
};
const payload = await runValidateJsonAndGetPayload();
expect(payload.valid).toBe(false);
expect(payload.path).toBe("/tmp/custom-openclaw.json");
expect(payload.issues).toEqual([{ path: "gateway.bind", message: "Invalid enum value" }]);
@@ -253,42 +269,20 @@ describe("config cli", () => {
});
it("preserves allowed-values metadata in --json output", async () => {
setSnapshotOnce({
path: "/tmp/custom-openclaw.json",
exists: true,
raw: "{}",
parsed: {},
resolved: {},
valid: false,
config: {},
issues: [
{
path: "update.channel",
message: 'Invalid input (allowed: "stable", "beta", "dev")',
allowedValues: ["stable", "beta", "dev"],
allowedValuesHiddenCount: 0,
},
],
warnings: [],
legacyIssues: [],
});
await expect(runConfigCommand(["config", "validate", "--json"])).rejects.toThrow(
"__exit__:1",
setSnapshotOnce(
makeInvalidSnapshot({
issues: [
{
path: "update.channel",
message: 'Invalid input (allowed: "stable", "beta", "dev")',
allowedValues: ["stable", "beta", "dev"],
allowedValuesHiddenCount: 0,
},
],
}),
);
const raw = mockLog.mock.calls.at(0)?.[0];
expect(typeof raw).toBe("string");
const payload = JSON.parse(String(raw)) as {
valid: boolean;
path: string;
issues: Array<{
path: string;
message: string;
allowedValues?: string[];
allowedValuesHiddenCount?: number;
}>;
};
const payload = await runValidateJsonAndGetPayload();
expect(payload.valid).toBe(false);
expect(payload.path).toBe("/tmp/custom-openclaw.json");
expect(payload.issues).toEqual([
@@ -406,13 +400,7 @@ describe("config cli", () => {
logging: { level: "debug" },
};
const runtimeMerged: OpenClawConfig = {
...resolved,
agents: {
...resolved.agents,
defaults: {
model: "gpt-5.2",
},
} as never,
...withRuntimeDefaults(resolved),
};
setSnapshot(resolved, runtimeMerged);