import { beforeAll, beforeEach, describe, expect, it } from "vitest"; import { setDefaultChannelPluginRegistryForTests } from "./channel-test-helpers.js"; import { configMocks, offsetMocks } from "./channels.mock-harness.js"; import { baseConfigSnapshot, createTestRuntime } from "./test-runtime-config-helpers.js"; const runtime = createTestRuntime(); let channelsAddCommand: typeof import("./channels.js").channelsAddCommand; describe("channelsAddCommand", () => { beforeAll(async () => { ({ channelsAddCommand } = await import("./channels.js")); }); beforeEach(async () => { configMocks.readConfigFileSnapshot.mockClear(); configMocks.writeConfigFile.mockClear(); offsetMocks.deleteTelegramUpdateOffset.mockClear(); runtime.log.mockClear(); runtime.error.mockClear(); runtime.exit.mockClear(); setDefaultChannelPluginRegistryForTests(); }); it("clears telegram update offsets when the token changes", async () => { configMocks.readConfigFileSnapshot.mockResolvedValue({ ...baseConfigSnapshot, config: { channels: { telegram: { botToken: "old-token", enabled: true }, }, }, }); await channelsAddCommand( { channel: "telegram", account: "default", token: "new-token" }, runtime, { hasFlags: true }, ); expect(offsetMocks.deleteTelegramUpdateOffset).toHaveBeenCalledTimes(1); expect(offsetMocks.deleteTelegramUpdateOffset).toHaveBeenCalledWith({ accountId: "default" }); }); it("does not clear telegram update offsets when the token is unchanged", async () => { configMocks.readConfigFileSnapshot.mockResolvedValue({ ...baseConfigSnapshot, config: { channels: { telegram: { botToken: "same-token", enabled: true }, }, }, }); await channelsAddCommand( { channel: "telegram", account: "default", token: "same-token" }, runtime, { hasFlags: true }, ); expect(offsetMocks.deleteTelegramUpdateOffset).not.toHaveBeenCalled(); }); });