test: dedupe telegram draft stream setup and extend state-dir env coverage

This commit is contained in:
Peter Steinberger
2026-02-22 07:46:11 +00:00
parent 265da4dd2a
commit bdbbcbcc11
2 changed files with 58 additions and 32 deletions

View File

@@ -2,6 +2,8 @@ import type { Bot } from "grammy";
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
import { createTelegramDraftStream } from "./draft-stream.js";
type TelegramDraftStreamParams = Parameters<typeof createTelegramDraftStream>[0];
function createMockDraftApi(sendMessageImpl?: () => Promise<{ message_id: number }>) {
return {
sendMessage: vi.fn(sendMessageImpl ?? (async () => ({ message_id: 17 }))),
@@ -17,11 +19,18 @@ function createForumDraftStream(api: ReturnType<typeof createMockDraftApi>) {
function createThreadedDraftStream(
api: ReturnType<typeof createMockDraftApi>,
thread: { id: number; scope: "forum" | "dm" },
) {
return createDraftStream(api, { thread });
}
function createDraftStream(
api: ReturnType<typeof createMockDraftApi>,
overrides: Omit<Partial<TelegramDraftStreamParams>, "api" | "chatId"> = {},
) {
return createTelegramDraftStream({
api: api as unknown as Bot["api"],
chatId: 123,
thread,
...overrides,
});
}
@@ -34,6 +43,18 @@ async function expectInitialForumSend(
);
}
function createForceNewMessageHarness(params: { throttleMs?: number } = {}) {
const api = createMockDraftApi();
api.sendMessage
.mockResolvedValueOnce({ message_id: 17 })
.mockResolvedValueOnce({ message_id: 42 });
const stream = createDraftStream(
api,
params.throttleMs != null ? { throttleMs: params.throttleMs } : {},
);
return { api, stream };
}
describe("createTelegramDraftStream", () => {
it("sends stream preview message with message_thread_id when provided", async () => {
const api = createMockDraftApi();
@@ -100,18 +121,7 @@ describe("createTelegramDraftStream", () => {
});
it("creates new message after forceNewMessage is called", async () => {
const api = {
sendMessage: vi
.fn()
.mockResolvedValueOnce({ message_id: 17 })
.mockResolvedValueOnce({ message_id: 42 }),
editMessageText: vi.fn().mockResolvedValue(true),
deleteMessage: vi.fn().mockResolvedValue(true),
};
const stream = createTelegramDraftStream({
api: api as unknown as Bot["api"],
chatId: 123,
});
const { api, stream } = createForceNewMessageHarness();
// First message
stream.update("Hello");
@@ -136,19 +146,7 @@ describe("createTelegramDraftStream", () => {
it("sends first update immediately after forceNewMessage within throttle window", async () => {
vi.useFakeTimers();
try {
const api = {
sendMessage: vi
.fn()
.mockResolvedValueOnce({ message_id: 17 })
.mockResolvedValueOnce({ message_id: 42 }),
editMessageText: vi.fn().mockResolvedValue(true),
deleteMessage: vi.fn().mockResolvedValue(true),
};
const stream = createTelegramDraftStream({
api: api as unknown as Bot["api"],
chatId: 123,
throttleMs: 1000,
});
const { api, stream } = createForceNewMessageHarness({ throttleMs: 1000 });
stream.update("Hello");
await vi.waitFor(() => expect(api.sendMessage).toHaveBeenCalledTimes(1));