mirror of
https://github.com/farion1231/cc-switch.git
synced 2026-07-24 12:44:18 +08:00
Add OpenClaw config directory settings (#1518)
Co-authored-by: 张斌 <zhangbin25@xiaomi.com>
This commit is contained in:
@@ -68,7 +68,8 @@ describe("useDirectorySettings", () => {
|
||||
if (app === "claude") return "/remote/claude";
|
||||
if (app === "codex") return "/remote/codex";
|
||||
if (app === "gemini") return "/remote/gemini";
|
||||
return "/remote/opencode";
|
||||
if (app === "opencode") return "/remote/opencode";
|
||||
return "/remote/openclaw";
|
||||
});
|
||||
selectConfigDirectoryMock.mockReset();
|
||||
});
|
||||
@@ -89,6 +90,7 @@ describe("useDirectorySettings", () => {
|
||||
codex: "/remote/codex",
|
||||
gemini: "/remote/gemini",
|
||||
opencode: "/remote/opencode",
|
||||
openclaw: "/remote/openclaw",
|
||||
});
|
||||
});
|
||||
|
||||
@@ -211,6 +213,29 @@ describe("useDirectorySettings", () => {
|
||||
expect(result.current.resolvedDirs.appConfig).toBe("/home/mock/.cc-switch");
|
||||
});
|
||||
|
||||
it("updates openclaw directory when browsing succeeds", async () => {
|
||||
selectConfigDirectoryMock.mockResolvedValue("/picked/openclaw");
|
||||
|
||||
const { result } = renderHook(() =>
|
||||
useDirectorySettings({
|
||||
settings: createSettings({ openclawConfigDir: undefined }),
|
||||
onUpdateSettings,
|
||||
}),
|
||||
);
|
||||
|
||||
await waitFor(() => expect(result.current.isLoading).toBe(false));
|
||||
|
||||
await act(async () => {
|
||||
await result.current.browseDirectory("openclaw");
|
||||
});
|
||||
|
||||
expect(selectConfigDirectoryMock).toHaveBeenCalledWith("/remote/openclaw");
|
||||
expect(onUpdateSettings).toHaveBeenCalledWith({
|
||||
openclawConfigDir: "/picked/openclaw",
|
||||
});
|
||||
expect(result.current.resolvedDirs.openclaw).toBe("/picked/openclaw");
|
||||
});
|
||||
|
||||
it("resetAllDirectories applies provided resolved values", async () => {
|
||||
const { result } = renderHook(() =>
|
||||
useDirectorySettings({ settings: createSettings(), onUpdateSettings }),
|
||||
@@ -223,6 +248,7 @@ describe("useDirectorySettings", () => {
|
||||
"/server/codex",
|
||||
"/server/gemini",
|
||||
"/server/opencode",
|
||||
"/server/openclaw",
|
||||
);
|
||||
});
|
||||
|
||||
@@ -230,5 +256,6 @@ describe("useDirectorySettings", () => {
|
||||
expect(result.current.resolvedDirs.codex).toBe("/server/codex");
|
||||
expect(result.current.resolvedDirs.gemini).toBe("/server/gemini");
|
||||
expect(result.current.resolvedDirs.opencode).toBe("/server/opencode");
|
||||
expect(result.current.resolvedDirs.openclaw).toBe("/server/openclaw");
|
||||
});
|
||||
});
|
||||
|
||||
@@ -72,6 +72,9 @@ const createSettingsFormMock = (overrides: Record<string, unknown> = {}) => ({
|
||||
skipClaudeOnboarding: true,
|
||||
claudeConfigDir: "/claude",
|
||||
codexConfigDir: "/codex",
|
||||
geminiConfigDir: "/gemini",
|
||||
opencodeConfigDir: "/opencode",
|
||||
openclawConfigDir: "/openclaw",
|
||||
language: "zh",
|
||||
},
|
||||
isLoading: false,
|
||||
@@ -90,6 +93,9 @@ const createDirectorySettingsMock = (
|
||||
appConfig: "/home/mock/.cc-switch",
|
||||
claude: "/default/claude",
|
||||
codex: "/default/codex",
|
||||
gemini: "/default/gemini",
|
||||
opencode: "/default/opencode",
|
||||
openclaw: "/default/openclaw",
|
||||
},
|
||||
isLoading: false,
|
||||
initialAppConfigDir: undefined,
|
||||
@@ -132,6 +138,9 @@ describe("useSettings hook", () => {
|
||||
skipClaudeOnboarding: true,
|
||||
claudeConfigDir: "/server/claude",
|
||||
codexConfigDir: "/server/codex",
|
||||
geminiConfigDir: "/server/gemini",
|
||||
opencodeConfigDir: "/server/opencode",
|
||||
openclawConfigDir: "/server/openclaw",
|
||||
language: "zh",
|
||||
};
|
||||
|
||||
@@ -218,6 +227,9 @@ describe("useSettings hook", () => {
|
||||
enableClaudePluginIntegration: false,
|
||||
claudeConfigDir: "/server/claude",
|
||||
codexConfigDir: undefined,
|
||||
geminiConfigDir: "/server/gemini",
|
||||
opencodeConfigDir: "/server/opencode",
|
||||
openclawConfigDir: "/server/openclaw",
|
||||
language: "en",
|
||||
};
|
||||
useSettingsQueryMock.mockReturnValue({
|
||||
@@ -230,6 +242,7 @@ describe("useSettings hook", () => {
|
||||
...serverSettings,
|
||||
claudeConfigDir: " /custom/claude ",
|
||||
codexConfigDir: " ",
|
||||
openclawConfigDir: " /custom/openclaw ",
|
||||
language: "en",
|
||||
enableClaudePluginIntegration: true, // 状态从 false 变为 true
|
||||
},
|
||||
@@ -253,6 +266,7 @@ describe("useSettings hook", () => {
|
||||
const payload = mutateAsyncMock.mock.calls[0][0] as Settings;
|
||||
expect(payload.claudeConfigDir).toBe("/custom/claude");
|
||||
expect(payload.codexConfigDir).toBeUndefined();
|
||||
expect(payload.openclawConfigDir).toBe("/custom/openclaw");
|
||||
expect(payload.language).toBe("en");
|
||||
expect(setAppConfigDirOverrideMock).toHaveBeenCalledWith("/override/app");
|
||||
// 状态改变,应该调用 API
|
||||
@@ -380,8 +394,9 @@ describe("useSettings hook", () => {
|
||||
expect(directorySettingsMock.resetAllDirectories).toHaveBeenCalledWith(
|
||||
"/server/claude",
|
||||
undefined,
|
||||
undefined, // geminiConfigDir
|
||||
undefined, // opencodeConfigDir
|
||||
"/server/gemini",
|
||||
"/server/opencode",
|
||||
"/server/openclaw",
|
||||
);
|
||||
expect(metadataMock.setRequiresRestart).toHaveBeenCalledWith(false);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user