From 8a32936855f15b1d959323364934de957b5ab3e4 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 14 Feb 2026 23:53:36 +0000 Subject: [PATCH] refactor(test): dedupe cron isolated-agent e2e setup --- ...s-last-non-empty-agent-text-as.e2e.test.ts | 173 +++--------------- 1 file changed, 27 insertions(+), 146 deletions(-) diff --git a/src/cron/isolated-agent.uses-last-non-empty-agent-text-as.e2e.test.ts b/src/cron/isolated-agent.uses-last-non-empty-agent-text-as.e2e.test.ts index 7227304c75b..59454df8e9c 100644 --- a/src/cron/isolated-agent.uses-last-non-empty-agent-text-as.e2e.test.ts +++ b/src/cron/isolated-agent.uses-last-non-empty-agent-text-as.e2e.test.ts @@ -33,9 +33,9 @@ function makeDeps(): CliDeps { }; } -function mockEmbeddedOk() { +function mockEmbeddedTexts(texts: string[]) { vi.mocked(runEmbeddedPiAgent).mockResolvedValue({ - payloads: [{ text: "ok" }], + payloads: texts.map((text) => ({ text })), meta: { durationMs: 5, agentMeta: { sessionId: "s", provider: "p", model: "m" }, @@ -43,6 +43,10 @@ function mockEmbeddedOk() { }); } +function mockEmbeddedOk() { + mockEmbeddedTexts(["ok"]); +} + function expectEmbeddedProviderModel(expected: { provider: string; model: string }) { const call = vi.mocked(runEmbeddedPiAgent).mock.calls[0]?.[0] as { provider?: string; @@ -126,20 +130,8 @@ describe("runCronIsolatedAgentTurn", () => { it("treats blank model overrides as unset", async () => { await withTempHome(async (home) => { const storePath = await writeSessionStore(home); - const deps: CliDeps = { - sendMessageWhatsApp: vi.fn(), - sendMessageTelegram: vi.fn(), - sendMessageDiscord: vi.fn(), - sendMessageSignal: vi.fn(), - sendMessageIMessage: vi.fn(), - }; - vi.mocked(runEmbeddedPiAgent).mockResolvedValue({ - payloads: [{ text: "ok" }], - meta: { - durationMs: 5, - agentMeta: { sessionId: "s", provider: "p", model: "m" }, - }, - }); + const deps = makeDeps(); + mockEmbeddedOk(); const res = await runCronIsolatedAgentTurn({ cfg: makeCfg(home, storePath), @@ -158,20 +150,8 @@ describe("runCronIsolatedAgentTurn", () => { it("uses last non-empty agent text as summary", async () => { await withTempHome(async (home) => { const storePath = await writeSessionStore(home); - const deps: CliDeps = { - sendMessageWhatsApp: vi.fn(), - sendMessageTelegram: vi.fn(), - sendMessageDiscord: vi.fn(), - sendMessageSignal: vi.fn(), - sendMessageIMessage: vi.fn(), - }; - vi.mocked(runEmbeddedPiAgent).mockResolvedValue({ - payloads: [{ text: "first" }, { text: " " }, { text: " last " }], - meta: { - durationMs: 5, - agentMeta: { sessionId: "s", provider: "p", model: "m" }, - }, - }); + const deps = makeDeps(); + mockEmbeddedTexts(["first", " ", " last "]); const res = await runCronIsolatedAgentTurn({ cfg: makeCfg(home, storePath), @@ -190,20 +170,8 @@ describe("runCronIsolatedAgentTurn", () => { it("appends current time after the cron header line", async () => { await withTempHome(async (home) => { const storePath = await writeSessionStore(home); - const deps: CliDeps = { - sendMessageWhatsApp: vi.fn(), - sendMessageTelegram: vi.fn(), - sendMessageDiscord: vi.fn(), - sendMessageSignal: vi.fn(), - sendMessageIMessage: vi.fn(), - }; - vi.mocked(runEmbeddedPiAgent).mockResolvedValue({ - payloads: [{ text: "ok" }], - meta: { - durationMs: 5, - agentMeta: { sessionId: "s", provider: "p", model: "m" }, - }, - }); + const deps = makeDeps(); + mockEmbeddedOk(); await runCronIsolatedAgentTurn({ cfg: makeCfg(home, storePath), @@ -226,21 +194,9 @@ describe("runCronIsolatedAgentTurn", () => { it("uses agentId for workspace, session key, and store paths", async () => { await withTempHome(async (home) => { - const deps: CliDeps = { - sendMessageWhatsApp: vi.fn(), - sendMessageTelegram: vi.fn(), - sendMessageDiscord: vi.fn(), - sendMessageSignal: vi.fn(), - sendMessageIMessage: vi.fn(), - }; + const deps = makeDeps(); const opsWorkspace = path.join(home, "ops-workspace"); - vi.mocked(runEmbeddedPiAgent).mockResolvedValue({ - payloads: [{ text: "ok" }], - meta: { - durationMs: 5, - agentMeta: { sessionId: "s", provider: "p", model: "m" }, - }, - }); + mockEmbeddedOk(); const cfg = makeCfg( home, @@ -289,20 +245,8 @@ describe("runCronIsolatedAgentTurn", () => { it("uses model override when provided", async () => { await withTempHome(async (home) => { const storePath = await writeSessionStore(home); - const deps: CliDeps = { - sendMessageWhatsApp: vi.fn(), - sendMessageTelegram: vi.fn(), - sendMessageDiscord: vi.fn(), - sendMessageSignal: vi.fn(), - sendMessageIMessage: vi.fn(), - }; - vi.mocked(runEmbeddedPiAgent).mockResolvedValue({ - payloads: [{ text: "ok" }], - meta: { - durationMs: 5, - agentMeta: { sessionId: "s", provider: "p", model: "m" }, - }, - }); + const deps = makeDeps(); + mockEmbeddedOk(); const res = await runCronIsolatedAgentTurn({ cfg: makeCfg(home, storePath), @@ -318,12 +262,7 @@ describe("runCronIsolatedAgentTurn", () => { }); expect(res.status).toBe("ok"); - const call = vi.mocked(runEmbeddedPiAgent).mock.calls[0]?.[0] as { - provider?: string; - model?: string; - }; - expect(call?.provider).toBe("openai"); - expect(call?.model).toBe("gpt-4.1-mini"); + expectEmbeddedProviderModel({ provider: "openai", model: "gpt-4.1-mini" }); }); }); @@ -337,20 +276,8 @@ describe("runCronIsolatedAgentTurn", () => { modelOverride: "gpt-4.1-mini", }, }); - const deps: CliDeps = { - sendMessageWhatsApp: vi.fn(), - sendMessageTelegram: vi.fn(), - sendMessageDiscord: vi.fn(), - sendMessageSignal: vi.fn(), - sendMessageIMessage: vi.fn(), - }; - vi.mocked(runEmbeddedPiAgent).mockResolvedValue({ - payloads: [{ text: "ok" }], - meta: { - durationMs: 5, - agentMeta: { sessionId: "s", provider: "p", model: "m" }, - }, - }); + const deps = makeDeps(); + mockEmbeddedOk(); const res = await runCronIsolatedAgentTurn({ cfg: makeCfg(home, storePath), @@ -362,12 +289,7 @@ describe("runCronIsolatedAgentTurn", () => { }); expect(res.status).toBe("ok"); - const call = vi.mocked(runEmbeddedPiAgent).mock.calls[0]?.[0] as { - provider?: string; - model?: string; - }; - expect(call?.provider).toBe("openai"); - expect(call?.model).toBe("gpt-4.1-mini"); + expectEmbeddedProviderModel({ provider: "openai", model: "gpt-4.1-mini" }); }); }); @@ -381,20 +303,8 @@ describe("runCronIsolatedAgentTurn", () => { modelOverride: "gpt-4.1-mini", }, }); - const deps: CliDeps = { - sendMessageWhatsApp: vi.fn(), - sendMessageTelegram: vi.fn(), - sendMessageDiscord: vi.fn(), - sendMessageSignal: vi.fn(), - sendMessageIMessage: vi.fn(), - }; - vi.mocked(runEmbeddedPiAgent).mockResolvedValue({ - payloads: [{ text: "ok" }], - meta: { - durationMs: 5, - agentMeta: { sessionId: "s", provider: "p", model: "m" }, - }, - }); + const deps = makeDeps(); + mockEmbeddedOk(); const res = await runCronIsolatedAgentTurn({ cfg: makeCfg(home, storePath), @@ -411,12 +321,7 @@ describe("runCronIsolatedAgentTurn", () => { }); expect(res.status).toBe("ok"); - const call = vi.mocked(runEmbeddedPiAgent).mock.calls[0]?.[0] as { - provider?: string; - model?: string; - }; - expect(call?.provider).toBe("anthropic"); - expect(call?.model).toBe("claude-opus-4-5"); + expectEmbeddedProviderModel({ provider: "anthropic", model: "claude-opus-4-5" }); }); }); @@ -488,20 +393,8 @@ describe("runCronIsolatedAgentTurn", () => { it("wraps external hook content by default", async () => { await withTempHome(async (home) => { const storePath = await writeSessionStore(home); - const deps: CliDeps = { - sendMessageWhatsApp: vi.fn(), - sendMessageTelegram: vi.fn(), - sendMessageDiscord: vi.fn(), - sendMessageSignal: vi.fn(), - sendMessageIMessage: vi.fn(), - }; - vi.mocked(runEmbeddedPiAgent).mockResolvedValue({ - payloads: [{ text: "ok" }], - meta: { - durationMs: 5, - agentMeta: { sessionId: "s", provider: "p", model: "m" }, - }, - }); + const deps = makeDeps(); + mockEmbeddedOk(); const res = await runCronIsolatedAgentTurn({ cfg: makeCfg(home, storePath), @@ -522,20 +415,8 @@ describe("runCronIsolatedAgentTurn", () => { it("skips external content wrapping when hooks.gmail opts out", async () => { await withTempHome(async (home) => { const storePath = await writeSessionStore(home); - const deps: CliDeps = { - sendMessageWhatsApp: vi.fn(), - sendMessageTelegram: vi.fn(), - sendMessageDiscord: vi.fn(), - sendMessageSignal: vi.fn(), - sendMessageIMessage: vi.fn(), - }; - vi.mocked(runEmbeddedPiAgent).mockResolvedValue({ - payloads: [{ text: "ok" }], - meta: { - durationMs: 5, - agentMeta: { sessionId: "s", provider: "p", model: "m" }, - }, - }); + const deps = makeDeps(); + mockEmbeddedOk(); const res = await runCronIsolatedAgentTurn({ cfg: makeCfg(home, storePath, {