Skip to content

Commit 646a68d

Browse files
committed
test(settings): cover remaining experimental hotkeys
1 parent cfc7854 commit 646a68d

File tree

3 files changed

+44
-20
lines changed

3 files changed

+44
-20
lines changed

lib/codex-manager/settings-hub.ts

Lines changed: 5 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -300,14 +300,14 @@ function getExperimentalSelectOptions(
300300
function mapExperimentalMenuHotkey(
301301
raw: string,
302302
): ExperimentalSettingsAction | undefined {
303-
const lower = raw.toLowerCase();
304-
if (lower === "q") return { type: "back" };
305-
if (lower === "s") return { type: "save" };
306303
if (raw === "1") return { type: "sync" };
307304
if (raw === "2") return { type: "backup" };
308305
if (raw === "3") return { type: "toggle-refresh-guardian" };
309306
if (raw === "[" || raw === "-") return { type: "decrease-refresh-interval" };
310307
if (raw === "]" || raw === "+") return { type: "increase-refresh-interval" };
308+
const lower = raw.toLowerCase();
309+
if (lower === "q") return { type: "back" };
310+
if (lower === "s") return { type: "save" };
311311
return undefined;
312312
}
313313

@@ -1315,6 +1315,8 @@ const __testOnly = {
13151315
cloneDashboardSettings,
13161316
withQueuedRetry: withQueuedRetryForTests,
13171317
loadExperimentalSyncTarget,
1318+
mapExperimentalMenuHotkey,
1319+
mapExperimentalStatusHotkey,
13181320
promptExperimentalSettings,
13191321
persistDashboardSettingsSelection: persistDashboardSettingsSelectionForTests,
13201322
persistBackendConfigSelection: persistBackendConfigSelectionForTests,

test/codex-manager-cli.test.ts

Lines changed: 15 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -4557,8 +4557,8 @@ describe("codex manager cli commands", () => {
45574557
const selectSequence = queueSettingsSelectSequence([
45584558
{ type: "experimental" },
45594559
requireSettingsHotkey("1", { type: "sync" }),
4560-
requireSettingsHotkey("a", { type: "apply" }),
4561-
requireSettingsHotkey("q", { type: "back" }),
4560+
requireSettingsHotkey("A", { type: "apply" }),
4561+
requireSettingsHotkey("Q", { type: "back" }),
45624562
{ type: "back" },
45634563
{ type: "back" },
45644564
]);
@@ -4631,7 +4631,7 @@ describe("codex manager cli commands", () => {
46314631
const selectSequence = queueSettingsSelectSequence([
46324632
{ type: "experimental" },
46334633
requireSettingsHotkey("2", { type: "backup" }),
4634-
requireSettingsHotkey("q", { type: "back" }),
4634+
requireSettingsHotkey("Q", { type: "back" }),
46354635
{ type: "back" },
46364636
{ type: "back" },
46374637
]);
@@ -4700,13 +4700,19 @@ describe("codex manager cli commands", () => {
47004700
const now = Date.now();
47014701
setupInteractiveSettingsLogin(createSettingsStorage(now));
47024702
const configModule = await import("../lib/config.js");
4703-
const defaults = configModule.getDefaultPluginConfig();
4703+
const defaults = {
4704+
...configModule.getDefaultPluginConfig(),
4705+
proactiveRefreshGuardian: false,
4706+
proactiveRefreshIntervalMs: 180_000,
4707+
};
47044708
loadPluginConfigMock.mockReturnValue(structuredClone(defaults));
47054709
const selectSequence = queueSettingsSelectSequence([
47064710
{ type: "experimental" },
47074711
requireSettingsHotkey("3", { type: "toggle-refresh-guardian" }),
4708-
requireSettingsHotkey("]", { type: "increase-refresh-interval" }),
4709-
requireSettingsHotkey("s", { type: "save" }),
4712+
requireSettingsHotkey("[", { type: "decrease-refresh-interval" }),
4713+
requireSettingsHotkey("-", { type: "decrease-refresh-interval" }),
4714+
requireSettingsHotkey("+", { type: "increase-refresh-interval" }),
4715+
requireSettingsHotkey("S", { type: "save" }),
47104716
{ type: "back" },
47114717
]);
47124718

@@ -4718,8 +4724,7 @@ describe("codex manager cli commands", () => {
47184724
expect(savePluginConfigMock).toHaveBeenCalledWith(
47194725
expect.objectContaining({
47204726
proactiveRefreshGuardian: !(defaults.proactiveRefreshGuardian ?? false),
4721-
proactiveRefreshIntervalMs:
4722-
(defaults.proactiveRefreshIntervalMs ?? 60000) + 60000,
4727+
proactiveRefreshIntervalMs: 120_000,
47234728
}),
47244729
);
47254730
});
@@ -4745,7 +4750,7 @@ describe("codex manager cli commands", () => {
47454750
const selectSequence = queueSettingsSelectSequence([
47464751
{ type: "experimental" },
47474752
{ type: "sync" },
4748-
requireSettingsHotkey("q", { type: "back" }),
4753+
requireSettingsHotkey("Q", { type: "back" }),
47494754
{ type: "back" },
47504755
{ type: "back" },
47514756
]);
@@ -4798,7 +4803,7 @@ describe("codex manager cli commands", () => {
47984803
const selectSequence = queueSettingsSelectSequence([
47994804
{ type: "experimental" },
48004805
requireSettingsHotkey("1", { type: "sync" }),
4801-
requireSettingsHotkey("q", { type: "back" }),
4806+
requireSettingsHotkey("Q", { type: "back" }),
48024807
{ type: "back" },
48034808
{ type: "back" },
48044809
]);

test/settings-hub-utils.test.ts

Lines changed: 24 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -71,6 +71,8 @@ type SettingsHubTestApi = {
7171
promptExperimentalSettings: (
7272
initial: PluginConfig,
7373
) => Promise<PluginConfig | null>;
74+
mapExperimentalMenuHotkey: (raw: string) => unknown;
75+
mapExperimentalStatusHotkey: (raw: string) => unknown;
7476
};
7577

7678
type UiRuntimeOptions = ReturnType<typeof getUiRuntimeOptions>;
@@ -120,10 +122,10 @@ function queueSelectResults(...results: unknown[]): void {
120122

121123
function triggerSettingsHubHotkey(
122124
raw: string,
123-
fallback: unknown = { type: "back" },
125+
fallback: unknown = null,
124126
): (items: MenuItem<unknown>[], options: unknown) => unknown {
125-
return (items, options) =>
126-
(options as {
127+
return (items, options) => {
128+
const onInput = (options as {
127129
onInput?: (
128130
input: string,
129131
context: {
@@ -132,11 +134,14 @@ function triggerSettingsHubHotkey(
132134
requestRerender: () => void;
133135
},
134136
) => unknown;
135-
})?.onInput?.(raw, {
137+
})?.onInput;
138+
expect(onInput).toBeTypeOf("function");
139+
return onInput?.(raw, {
136140
cursor: 0,
137141
items,
138142
requestRerender: () => undefined,
139143
}) ?? fallback;
144+
};
140145
}
141146

142147
vi.mock("../lib/ui/select.js", async () => {
@@ -730,19 +735,31 @@ describe("settings-hub utility coverage", () => {
730735
it("supports alternate experimental interval hotkeys with minus and plus", async () => {
731736
const api = await loadSettingsHubTestApi();
732737
queueSelectResults(
738+
triggerSettingsHubHotkey("["),
733739
triggerSettingsHubHotkey("-"),
734740
triggerSettingsHubHotkey("+"),
735-
triggerSettingsHubHotkey("s", { type: "save" }),
741+
triggerSettingsHubHotkey("S", { type: "save" }),
736742
);
737743
const selected = await api.promptExperimentalSettings({
738-
proactiveRefreshIntervalMs: 120_000,
744+
proactiveRefreshIntervalMs: 180_000,
739745
});
740746
expect(selected?.proactiveRefreshIntervalMs).toBe(120_000);
741747
});
742748

749+
it("maps experimental menu and status hotkeys including numeric and uppercase variants", async () => {
750+
const api = await loadSettingsHubTestApi();
751+
expect(api.mapExperimentalMenuHotkey("1")).toEqual({ type: "sync" });
752+
expect(api.mapExperimentalMenuHotkey("2")).toEqual({ type: "backup" });
753+
expect(api.mapExperimentalMenuHotkey("[")).toEqual({
754+
type: "decrease-refresh-interval",
755+
});
756+
expect(api.mapExperimentalMenuHotkey("S")).toEqual({ type: "save" });
757+
expect(api.mapExperimentalStatusHotkey("Q")).toEqual({ type: "back" });
758+
});
759+
743760
it("supports q hotkey to back out of experimental menu without saving", async () => {
744761
const api = await loadSettingsHubTestApi();
745-
queueSelectResults(triggerSettingsHubHotkey("q", { type: "back" }));
762+
queueSelectResults(triggerSettingsHubHotkey("Q", { type: "back" }));
746763
const selected = await api.promptExperimentalSettings({
747764
proactiveRefreshGuardian: true,
748765
proactiveRefreshIntervalMs: 120_000,

0 commit comments

Comments
 (0)