From 63488eb981461db44b8ca3bf58b10aee1b562b46 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Sat, 21 Feb 2026 18:27:32 +0000 Subject: [PATCH] refactor(test): dedupe telegram token env handling in tests --- src/infra/outbound/deliver.test.ts | 25 +++------------ src/telegram/accounts.test.ts | 49 ++++++------------------------ 2 files changed, 14 insertions(+), 60 deletions(-) diff --git a/src/infra/outbound/deliver.test.ts b/src/infra/outbound/deliver.test.ts index d4d0f5827d3..cb17e6c1a2d 100644 --- a/src/infra/outbound/deliver.test.ts +++ b/src/infra/outbound/deliver.test.ts @@ -8,6 +8,7 @@ import { STATE_DIR } from "../../config/paths.js"; import { setActivePluginRegistry } from "../../plugins/runtime.js"; import { markdownToSignalTextChunks } from "../../signal/format.js"; import { createOutboundTestPlugin, createTestRegistry } from "../../test-utils/channel-plugins.js"; +import { withEnvAsync } from "../../test-utils/env.js"; import { createIMessageTestPlugin } from "../../test-utils/imessage-test-plugin.js"; import { createInternalHookEventPayload } from "../../test-utils/internal-hook-event-payload.js"; @@ -101,9 +102,7 @@ describe("deliverOutboundPayloads", () => { }); it("chunks telegram markdown and passes through accountId", async () => { const sendTelegram = vi.fn().mockResolvedValue({ messageId: "m1", chatId: "c1" }); - const prevTelegramToken = process.env.TELEGRAM_BOT_TOKEN; - process.env.TELEGRAM_BOT_TOKEN = ""; - try { + await withEnvAsync({ TELEGRAM_BOT_TOKEN: "" }, async () => { const results = await deliverOutboundPayloads({ cfg: telegramChunkConfig, channel: "telegram", @@ -120,20 +119,12 @@ describe("deliverOutboundPayloads", () => { } expect(results).toHaveLength(2); expect(results[0]).toMatchObject({ channel: "telegram", chatId: "c1" }); - } finally { - if (prevTelegramToken === undefined) { - delete process.env.TELEGRAM_BOT_TOKEN; - } else { - process.env.TELEGRAM_BOT_TOKEN = prevTelegramToken; - } - } + }); }); it("keeps payload replyToId across all chunked telegram sends", async () => { const sendTelegram = vi.fn().mockResolvedValue({ messageId: "m1", chatId: "c1" }); - const prevTelegramToken = process.env.TELEGRAM_BOT_TOKEN; - process.env.TELEGRAM_BOT_TOKEN = ""; - try { + await withEnvAsync({ TELEGRAM_BOT_TOKEN: "" }, async () => { await deliverOutboundPayloads({ cfg: telegramChunkConfig, channel: "telegram", @@ -146,13 +137,7 @@ describe("deliverOutboundPayloads", () => { for (const call of sendTelegram.mock.calls) { expect(call[2]).toEqual(expect.objectContaining({ replyToMessageId: 777 })); } - } finally { - if (prevTelegramToken === undefined) { - delete process.env.TELEGRAM_BOT_TOKEN; - } else { - process.env.TELEGRAM_BOT_TOKEN = prevTelegramToken; - } - } + }); }); it("passes explicit accountId to sendTelegram", async () => { diff --git a/src/telegram/accounts.test.ts b/src/telegram/accounts.test.ts index e04284ca89d..e488d27c20b 100644 --- a/src/telegram/accounts.test.ts +++ b/src/telegram/accounts.test.ts @@ -1,12 +1,11 @@ import { describe, expect, it } from "vitest"; import type { OpenClawConfig } from "../config/config.js"; +import { withEnv } from "../test-utils/env.js"; import { resolveTelegramAccount } from "./accounts.js"; describe("resolveTelegramAccount", () => { it("falls back to the first configured account when accountId is omitted", () => { - const prevTelegramToken = process.env.TELEGRAM_BOT_TOKEN; - process.env.TELEGRAM_BOT_TOKEN = ""; - try { + withEnv({ TELEGRAM_BOT_TOKEN: "" }, () => { const cfg: OpenClawConfig = { channels: { telegram: { accounts: { work: { botToken: "tok-work" } } }, @@ -17,19 +16,11 @@ describe("resolveTelegramAccount", () => { expect(account.accountId).toBe("work"); expect(account.token).toBe("tok-work"); expect(account.tokenSource).toBe("config"); - } finally { - if (prevTelegramToken === undefined) { - delete process.env.TELEGRAM_BOT_TOKEN; - } else { - process.env.TELEGRAM_BOT_TOKEN = prevTelegramToken; - } - } + }); }); it("uses TELEGRAM_BOT_TOKEN when default account config is missing", () => { - const prevTelegramToken = process.env.TELEGRAM_BOT_TOKEN; - process.env.TELEGRAM_BOT_TOKEN = "tok-env"; - try { + withEnv({ TELEGRAM_BOT_TOKEN: "tok-env" }, () => { const cfg: OpenClawConfig = { channels: { telegram: { accounts: { work: { botToken: "tok-work" } } }, @@ -40,19 +31,11 @@ describe("resolveTelegramAccount", () => { expect(account.accountId).toBe("default"); expect(account.token).toBe("tok-env"); expect(account.tokenSource).toBe("env"); - } finally { - if (prevTelegramToken === undefined) { - delete process.env.TELEGRAM_BOT_TOKEN; - } else { - process.env.TELEGRAM_BOT_TOKEN = prevTelegramToken; - } - } + }); }); it("prefers default config token over TELEGRAM_BOT_TOKEN", () => { - const prevTelegramToken = process.env.TELEGRAM_BOT_TOKEN; - process.env.TELEGRAM_BOT_TOKEN = "tok-env"; - try { + withEnv({ TELEGRAM_BOT_TOKEN: "tok-env" }, () => { const cfg: OpenClawConfig = { channels: { telegram: { botToken: "tok-config" }, @@ -63,19 +46,11 @@ describe("resolveTelegramAccount", () => { expect(account.accountId).toBe("default"); expect(account.token).toBe("tok-config"); expect(account.tokenSource).toBe("config"); - } finally { - if (prevTelegramToken === undefined) { - delete process.env.TELEGRAM_BOT_TOKEN; - } else { - process.env.TELEGRAM_BOT_TOKEN = prevTelegramToken; - } - } + }); }); it("does not fall back when accountId is explicitly provided", () => { - const prevTelegramToken = process.env.TELEGRAM_BOT_TOKEN; - process.env.TELEGRAM_BOT_TOKEN = ""; - try { + withEnv({ TELEGRAM_BOT_TOKEN: "" }, () => { const cfg: OpenClawConfig = { channels: { telegram: { accounts: { work: { botToken: "tok-work" } } }, @@ -86,12 +61,6 @@ describe("resolveTelegramAccount", () => { expect(account.accountId).toBe("default"); expect(account.tokenSource).toBe("none"); expect(account.token).toBe(""); - } finally { - if (prevTelegramToken === undefined) { - delete process.env.TELEGRAM_BOT_TOKEN; - } else { - process.env.TELEGRAM_BOT_TOKEN = prevTelegramToken; - } - } + }); }); });