refactor(test): dedupe cron isolated-agent e2e setup

This commit is contained in:
Peter Steinberger
2026-02-14 23:53:36 +00:00
parent 1eeffd7c09
commit 8a32936855

View File

@@ -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, {