mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-03-29 15:19:02 +08:00
feat: overhaul OpenClaw config panels with JSON5 round-trip write engine
- Add json-five crate for JSON5 serialization preserving comments and formatting - Rewrite openclaw_config.rs with comment-preserving JSON5 read/write engine - Add Tauri commands: get_openclaw_live_provider, write_openclaw_config_section - Redesign EnvPanel as full JSON editor with structured error handling - Add tools.profile selection (minimal/coding/messaging/full) to ToolsPanel - Add legacy timeout migration support to AgentsDefaultsPanel - Add OpenClawHealthBanner component for config validation warnings - Add supporting hooks, mutations, utility functions, and unit tests
This commit is contained in:
46
tests/components/openclaw.utils.test.ts
Normal file
46
tests/components/openclaw.utils.test.ts
Normal file
@@ -0,0 +1,46 @@
|
||||
import { describe, expect, it } from "vitest";
|
||||
import {
|
||||
getOpenClawTimeoutInputValue,
|
||||
getOpenClawToolsProfileSelectValue,
|
||||
getOpenClawUnsupportedProfile,
|
||||
OPENCLAW_UNSUPPORTED_PROFILE,
|
||||
parseOpenClawEnvEditorValue,
|
||||
} from "@/components/openclaw/utils";
|
||||
|
||||
describe("OpenClaw utils", () => {
|
||||
it("parses nested env objects without stringifying them", () => {
|
||||
const env = parseOpenClawEnvEditorValue(`{
|
||||
"API_KEY": "secret",
|
||||
"vars": { "HTTP_PROXY": "http://127.0.0.1:8080" },
|
||||
"shellEnv": { "NODE_OPTIONS": "--max-old-space-size=4096" }
|
||||
}`);
|
||||
|
||||
expect(env).toEqual({
|
||||
API_KEY: "secret",
|
||||
vars: { HTTP_PROXY: "http://127.0.0.1:8080" },
|
||||
shellEnv: { NODE_OPTIONS: "--max-old-space-size=4096" },
|
||||
});
|
||||
});
|
||||
|
||||
it("rejects non-object env payloads", () => {
|
||||
expect(() => parseOpenClawEnvEditorValue(`["not", "an object"]`)).toThrow(
|
||||
"OPENCLAW_ENV_OBJECT_REQUIRED",
|
||||
);
|
||||
});
|
||||
|
||||
it("flags unsupported tools profiles without silently normalizing them", () => {
|
||||
expect(getOpenClawToolsProfileSelectValue("default")).toBe(
|
||||
OPENCLAW_UNSUPPORTED_PROFILE,
|
||||
);
|
||||
expect(getOpenClawUnsupportedProfile("default")).toBe("default");
|
||||
expect(getOpenClawUnsupportedProfile("coding")).toBeNull();
|
||||
});
|
||||
|
||||
it("prefers timeoutSeconds and falls back to legacy timeout", () => {
|
||||
expect(
|
||||
getOpenClawTimeoutInputValue({ timeoutSeconds: 120, timeout: 30 }),
|
||||
).toBe("120");
|
||||
expect(getOpenClawTimeoutInputValue({ timeout: 45 })).toBe("45");
|
||||
expect(getOpenClawTimeoutInputValue({})).toBe("");
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user