From 516cbf4366125856d0bc377483cf9aaa444ef36a Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sun, 15 Feb 2026 00:06:24 +0000 Subject: [PATCH] refactor(test): dedupe trigger greeting prompt cases --- ...tivation-from-allowfrom-groups.e2e.test.ts | 41 +------------------ ...uns-greeting-prompt-bare-reset.e2e.test.ts | 40 +----------------- ....triggers.trigger-handling.test-harness.ts | 32 ++++++++++++++- 3 files changed, 35 insertions(+), 78 deletions(-) diff --git a/src/auto-reply/reply.triggers.trigger-handling.allows-activation-from-allowfrom-groups.e2e.test.ts b/src/auto-reply/reply.triggers.trigger-handling.allows-activation-from-allowfrom-groups.e2e.test.ts index 97b8794fde..0ed22c85d6 100644 --- a/src/auto-reply/reply.triggers.trigger-handling.allows-activation-from-allowfrom-groups.e2e.test.ts +++ b/src/auto-reply/reply.triggers.trigger-handling.allows-activation-from-allowfrom-groups.e2e.test.ts @@ -1,10 +1,10 @@ -import { tmpdir } from "node:os"; import { join } from "node:path"; import { beforeAll, describe, expect, it } from "vitest"; import { getRunEmbeddedPiAgentMock, installTriggerHandlingE2eTestHooks, makeCfg, + runGreetingPromptForBareNewOrReset, withTempHome, } from "./reply.triggers.trigger-handling.test-harness.js"; @@ -89,44 +89,7 @@ describe("trigger handling", () => { }); it("runs a greeting prompt for a bare /new", async () => { await withTempHome(async (home) => { - getRunEmbeddedPiAgentMock().mockResolvedValue({ - payloads: [{ text: "hello" }], - meta: { - durationMs: 1, - agentMeta: { sessionId: "s", provider: "p", model: "m" }, - }, - }); - - const res = await getReplyFromConfig( - { - Body: "/new", - From: "+1003", - To: "+2000", - CommandAuthorized: true, - }, - {}, - { - agents: { - defaults: { - model: "anthropic/claude-opus-4-5", - workspace: join(home, "openclaw"), - }, - }, - channels: { - whatsapp: { - allowFrom: ["*"], - }, - }, - session: { - store: join(tmpdir(), `openclaw-session-test-${Date.now()}.json`), - }, - }, - ); - const text = Array.isArray(res) ? res[0]?.text : res?.text; - expect(text).toBe("hello"); - expect(getRunEmbeddedPiAgentMock()).toHaveBeenCalledOnce(); - const prompt = getRunEmbeddedPiAgentMock().mock.calls[0]?.[0]?.prompt ?? ""; - expect(prompt).toContain("A new session was started via /new or /reset"); + await runGreetingPromptForBareNewOrReset({ home, body: "/new", getReplyFromConfig }); }); }); }); diff --git a/src/auto-reply/reply.triggers.trigger-handling.runs-greeting-prompt-bare-reset.e2e.test.ts b/src/auto-reply/reply.triggers.trigger-handling.runs-greeting-prompt-bare-reset.e2e.test.ts index 273ac19416..323ae89f7d 100644 --- a/src/auto-reply/reply.triggers.trigger-handling.runs-greeting-prompt-bare-reset.e2e.test.ts +++ b/src/auto-reply/reply.triggers.trigger-handling.runs-greeting-prompt-bare-reset.e2e.test.ts @@ -4,6 +4,7 @@ import { beforeAll, describe, expect, it } from "vitest"; import { getRunEmbeddedPiAgentMock, installTriggerHandlingE2eTestHooks, + runGreetingPromptForBareNewOrReset, withTempHome, } from "./reply.triggers.trigger-handling.test-harness.js"; @@ -17,44 +18,7 @@ installTriggerHandlingE2eTestHooks(); describe("trigger handling", () => { it("runs a greeting prompt for a bare /reset", async () => { await withTempHome(async (home) => { - getRunEmbeddedPiAgentMock().mockResolvedValue({ - payloads: [{ text: "hello" }], - meta: { - durationMs: 1, - agentMeta: { sessionId: "s", provider: "p", model: "m" }, - }, - }); - - const res = await getReplyFromConfig( - { - Body: "/reset", - From: "+1003", - To: "+2000", - CommandAuthorized: true, - }, - {}, - { - agents: { - defaults: { - model: "anthropic/claude-opus-4-5", - workspace: join(home, "openclaw"), - }, - }, - channels: { - whatsapp: { - allowFrom: ["*"], - }, - }, - session: { - store: join(tmpdir(), `openclaw-session-test-${Date.now()}.json`), - }, - }, - ); - const text = Array.isArray(res) ? res[0]?.text : res?.text; - expect(text).toBe("hello"); - expect(getRunEmbeddedPiAgentMock()).toHaveBeenCalledOnce(); - const prompt = getRunEmbeddedPiAgentMock().mock.calls[0]?.[0]?.prompt ?? ""; - expect(prompt).toContain("A new session was started via /new or /reset"); + await runGreetingPromptForBareNewOrReset({ home, body: "/reset", getReplyFromConfig }); }); }); it("does not reset for unauthorized /reset", async () => { diff --git a/src/auto-reply/reply.triggers.trigger-handling.test-harness.ts b/src/auto-reply/reply.triggers.trigger-handling.test-harness.ts index b4422f7a4e..becade34b2 100644 --- a/src/auto-reply/reply.triggers.trigger-handling.test-harness.ts +++ b/src/auto-reply/reply.triggers.trigger-handling.test-harness.ts @@ -1,5 +1,5 @@ import { join } from "node:path"; -import { afterEach, vi } from "vitest"; +import { afterEach, expect, vi } from "vitest"; import { withTempHome as withTempHomeBase } from "../../test/helpers/temp-home.js"; // Avoid exporting vitest mock types (TS2742 under pnpm + d.ts emit). @@ -133,6 +133,36 @@ export function makeCfg(home: string) { }; } +export async function runGreetingPromptForBareNewOrReset(params: { + home: string; + body: "/new" | "/reset"; + getReplyFromConfig: typeof import("./reply.js").getReplyFromConfig; +}) { + getRunEmbeddedPiAgentMock().mockResolvedValue({ + payloads: [{ text: "hello" }], + meta: { + durationMs: 1, + agentMeta: { sessionId: "s", provider: "p", model: "m" }, + }, + }); + + const res = await params.getReplyFromConfig( + { + Body: params.body, + From: "+1003", + To: "+2000", + CommandAuthorized: true, + }, + {}, + makeCfg(params.home), + ); + const text = Array.isArray(res) ? res[0]?.text : res?.text; + expect(text).toBe("hello"); + expect(getRunEmbeddedPiAgentMock()).toHaveBeenCalledOnce(); + const prompt = getRunEmbeddedPiAgentMock().mock.calls[0]?.[0]?.prompt ?? ""; + expect(prompt).toContain("A new session was started via /new or /reset"); +} + export function installTriggerHandlingE2eTestHooks() { afterEach(() => { vi.restoreAllMocks();