






















@@ -537,6 +537,60 @@ describe("startTelegramWebhook", () => {
537537);
538538});
539539540+it("returns after grammY timeout reply while webhook work continues", async () => {
541+let finishWork: (() => void) | undefined;
542+let workFinished = false;
543+webhookCallbackSpy.mockImplementationOnce(
544+() =>
545+vi.fn(
546+async (
547+update: unknown,
548+reply: (json: string) => Promise<void>,
549+_secretHeader: string | undefined,
550+_unauthorized: () => Promise<void>,
551+) => {
552+expect(update).toEqual({ update_id: 2, message: { text: "slow" } });
553+await reply("{}");
554+await new Promise<void>((resolve) => {
555+finishWork = resolve;
556+});
557+workFinished = true;
558+},
559+) as unknown as typeof handlerSpy,
560+);
561+562+await withStartedWebhook(
563+{
564+secret: TELEGRAM_SECRET,
565+path: TELEGRAM_WEBHOOK_PATH,
566+},
567+async ({ port }) => {
568+expect(webhookCallbackSpy).toHaveBeenCalledWith(
569+expect.anything(),
570+"callback",
571+expect.objectContaining({
572+onTimeout: "return",
573+timeoutMilliseconds: 5_000,
574+}),
575+);
576+const response = await postWebhookJson({
577+url: webhookUrl(port, TELEGRAM_WEBHOOK_PATH),
578+payload: JSON.stringify({ update_id: 2, message: { text: "slow" } }),
579+secret: TELEGRAM_SECRET,
580+timeoutMs: 1_000,
581+});
582+583+expect(response.status).toBe(200);
584+expect(await response.text()).toBe("{}");
585+expect(workFinished).toBe(false);
586+587+finishWork?.();
588+await sleep(WEBHOOK_TEST_YIELD_MS);
589+expect(workFinished).toBe(true);
590+},
591+);
592+});
593+540594it("rejects unauthenticated requests before reading the request body", async () => {
541595handlerSpy.mockClear();
542596await withStartedWebhook(
此内容由惯性聚合(RSS阅读器)自动聚合整理,仅供阅读参考。 原文来自 — 版权归原作者所有。