refactor(test): share onboarding and model auth test helpers

This commit is contained in:
Peter Steinberger
2026-02-16 16:48:36 +00:00
parent ac5f6e7c9d
commit 2d8edf85ad
10 changed files with 253 additions and 244 deletions

View File

@@ -112,16 +112,28 @@ describe("onboard-hooks", () => {
],
});
async function runSetupInternalHooks(params: {
selected: string[];
cfg?: OpenClawConfig;
eligible?: boolean;
}) {
const { buildWorkspaceHookStatus } = await import("../hooks/hooks-status.js");
vi.mocked(buildWorkspaceHookStatus).mockReturnValue(
createMockHookReport(params.eligible ?? true),
);
const cfg = params.cfg ?? {};
const prompter = createMockPrompter(params.selected);
const runtime = createMockRuntime();
const result = await setupInternalHooks(cfg, runtime, prompter);
return { result, cfg, prompter };
}
describe("setupInternalHooks", () => {
it("should enable hooks when user selects them", async () => {
const { buildWorkspaceHookStatus } = await import("../hooks/hooks-status.js");
vi.mocked(buildWorkspaceHookStatus).mockReturnValue(createMockHookReport());
const cfg: OpenClawConfig = {};
const prompter = createMockPrompter(["session-memory"]);
const runtime = createMockRuntime();
const result = await setupInternalHooks(cfg, runtime, prompter);
const { result, prompter } = await runSetupInternalHooks({
selected: ["session-memory"],
});
expect(result.hooks?.internal?.enabled).toBe(true);
expect(result.hooks?.internal?.entries).toEqual({
@@ -147,28 +159,19 @@ describe("onboard-hooks", () => {
});
it("should not enable hooks when user skips", async () => {
const { buildWorkspaceHookStatus } = await import("../hooks/hooks-status.js");
vi.mocked(buildWorkspaceHookStatus).mockReturnValue(createMockHookReport());
const cfg: OpenClawConfig = {};
const prompter = createMockPrompter(["__skip__"]);
const runtime = createMockRuntime();
const result = await setupInternalHooks(cfg, runtime, prompter);
const { result, prompter } = await runSetupInternalHooks({
selected: ["__skip__"],
});
expect(result.hooks?.internal).toBeUndefined();
expect(prompter.note).toHaveBeenCalledTimes(1);
});
it("should handle no eligible hooks", async () => {
const { buildWorkspaceHookStatus } = await import("../hooks/hooks-status.js");
vi.mocked(buildWorkspaceHookStatus).mockReturnValue(createMockHookReport(false));
const cfg: OpenClawConfig = {};
const prompter = createMockPrompter([]);
const runtime = createMockRuntime();
const result = await setupInternalHooks(cfg, runtime, prompter);
const { result, cfg, prompter } = await runSetupInternalHooks({
selected: [],
eligible: false,
});
expect(result).toEqual(cfg);
expect(prompter.multiselect).not.toHaveBeenCalled();
@@ -179,9 +182,6 @@ describe("onboard-hooks", () => {
});
it("should preserve existing hooks config when enabled", async () => {
const { buildWorkspaceHookStatus } = await import("../hooks/hooks-status.js");
vi.mocked(buildWorkspaceHookStatus).mockReturnValue(createMockHookReport());
const cfg: OpenClawConfig = {
hooks: {
enabled: true,
@@ -189,10 +189,10 @@ describe("onboard-hooks", () => {
token: "existing-token",
},
};
const prompter = createMockPrompter(["session-memory"]);
const runtime = createMockRuntime();
const result = await setupInternalHooks(cfg, runtime, prompter);
const { result } = await runSetupInternalHooks({
selected: ["session-memory"],
cfg,
});
expect(result.hooks?.enabled).toBe(true);
expect(result.hooks?.path).toBe("/webhook");
@@ -204,30 +204,22 @@ describe("onboard-hooks", () => {
});
it("should preserve existing config when user skips", async () => {
const { buildWorkspaceHookStatus } = await import("../hooks/hooks-status.js");
vi.mocked(buildWorkspaceHookStatus).mockReturnValue(createMockHookReport());
const cfg: OpenClawConfig = {
agents: { defaults: { workspace: "/workspace" } },
};
const prompter = createMockPrompter(["__skip__"]);
const runtime = createMockRuntime();
const result = await setupInternalHooks(cfg, runtime, prompter);
const { result } = await runSetupInternalHooks({
selected: ["__skip__"],
cfg,
});
expect(result).toEqual(cfg);
expect(result.agents?.defaults?.workspace).toBe("/workspace");
});
it("should show informative notes to user", async () => {
const { buildWorkspaceHookStatus } = await import("../hooks/hooks-status.js");
vi.mocked(buildWorkspaceHookStatus).mockReturnValue(createMockHookReport());
const cfg: OpenClawConfig = {};
const prompter = createMockPrompter(["session-memory"]);
const runtime = createMockRuntime();
await setupInternalHooks(cfg, runtime, prompter);
const { prompter } = await runSetupInternalHooks({
selected: ["session-memory"],
});
const noteCalls = (prompter.note as ReturnType<typeof vi.fn>).mock.calls;
expect(noteCalls).toHaveLength(2);