From bb3f8382d6bb4ea5a902cd8f9e47ca83c39316d1 Mon Sep 17 00:00:00 2001 From: Vincent Koc Date: Thu, 12 Mar 2026 01:26:49 -0400 Subject: [PATCH] Tests: cover shared Telegram draft stream state --- src/telegram/draft-stream.test.ts | 47 ++++++++++++++++++++++++++++++- 1 file changed, 46 insertions(+), 1 deletion(-) diff --git a/src/telegram/draft-stream.test.ts b/src/telegram/draft-stream.test.ts index 58990c41abf..07221ccc644 100644 --- a/src/telegram/draft-stream.test.ts +++ b/src/telegram/draft-stream.test.ts @@ -1,6 +1,7 @@ import type { Bot } from "grammy"; import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; -import { createTelegramDraftStream } from "./draft-stream.js"; +import { importFreshModule } from "../../test/helpers/import-fresh.js"; +import { __testing, createTelegramDraftStream } from "./draft-stream.js"; type TelegramDraftStreamParams = Parameters[0]; @@ -65,6 +66,10 @@ function createForceNewMessageHarness(params: { throttleMs?: number } = {}) { } describe("createTelegramDraftStream", () => { + afterEach(() => { + __testing.resetTelegramDraftStreamForTests(); + }); + it("sends stream preview message with message_thread_id when provided", async () => { const api = createMockDraftApi(); const stream = createForumDraftStream(api); @@ -355,6 +360,46 @@ describe("createTelegramDraftStream", () => { expect(api.editMessageText).not.toHaveBeenCalled(); }); + it("shares draft-id allocation across distinct module instances", async () => { + const draftA = await importFreshModule( + import.meta.url, + "./draft-stream.js?scope=shared-a", + ); + const draftB = await importFreshModule( + import.meta.url, + "./draft-stream.js?scope=shared-b", + ); + const apiA = createMockDraftApi(); + const apiB = createMockDraftApi(); + + draftA.__testing.resetTelegramDraftStreamForTests(); + + try { + const streamA = draftA.createTelegramDraftStream({ + api: apiA as unknown as Bot["api"], + chatId: 123, + thread: { id: 42, scope: "dm" }, + previewTransport: "draft", + }); + const streamB = draftB.createTelegramDraftStream({ + api: apiB as unknown as Bot["api"], + chatId: 123, + thread: { id: 42, scope: "dm" }, + previewTransport: "draft", + }); + + streamA.update("Message A"); + await streamA.flush(); + streamB.update("Message B"); + await streamB.flush(); + + expect(apiA.sendMessageDraft.mock.calls[0]?.[1]).toBe(1); + expect(apiB.sendMessageDraft.mock.calls[0]?.[1]).toBe(2); + } finally { + draftA.__testing.resetTelegramDraftStreamForTests(); + } + }); + it("creates new message after forceNewMessage is called", async () => { const { api, stream } = createForceNewMessageHarness();