From 3a21f8b1e309ac56166172608bf1f8eeb5d9e5d1 Mon Sep 17 00:00:00 2001 From: Peter Steinberger Date: Fri, 13 Mar 2026 19:10:57 +0000 Subject: [PATCH] refactor: share discord proxy fetch failure helper --- src/discord/monitor/provider.proxy.test.ts | 60 ++++++++++------------ 1 file changed, 26 insertions(+), 34 deletions(-) diff --git a/src/discord/monitor/provider.proxy.test.ts b/src/discord/monitor/provider.proxy.test.ts index 0b45fd2a2e7..9a15dcef94b 100644 --- a/src/discord/monitor/provider.proxy.test.ts +++ b/src/discord/monitor/provider.proxy.test.ts @@ -123,6 +123,30 @@ describe("createDiscordGatewayPlugin", () => { }; } + async function registerGatewayClient(plugin: unknown) { + await ( + plugin as { + registerClient: (client: { options: { token: string } }) => Promise; + } + ).registerClient({ + options: { token: "token-123" }, + }); + } + + async function expectGatewayRegisterFetchFailure(response: Response) { + const runtime = createRuntime(); + globalFetchMock.mockResolvedValue(response); + const plugin = createDiscordGatewayPlugin({ + discordConfig: {}, + runtime, + }); + + await expect(registerGatewayClient(plugin)).rejects.toThrow( + "Failed to get gateway information from Discord: fetch failed", + ); + expect(baseRegisterClientSpy).not.toHaveBeenCalled(); + } + beforeEach(() => { vi.stubGlobal("fetch", globalFetchMock); baseRegisterClientSpy.mockClear(); @@ -165,28 +189,12 @@ describe("createDiscordGatewayPlugin", () => { }); it("maps plain-text Discord 503 responses to fetch failed", async () => { - const runtime = createRuntime(); - globalFetchMock.mockResolvedValue({ + await expectGatewayRegisterFetchFailure({ ok: false, status: 503, text: async () => "upstream connect error or disconnect/reset before headers. reset reason: overflow", } as Response); - const plugin = createDiscordGatewayPlugin({ - discordConfig: {}, - runtime, - }); - - await expect( - ( - plugin as unknown as { - registerClient: (client: { options: { token: string } }) => Promise; - } - ).registerClient({ - options: { token: "token-123" }, - }), - ).rejects.toThrow("Failed to get gateway information from Discord: fetch failed"); - expect(baseRegisterClientSpy).not.toHaveBeenCalled(); }); it("uses proxy agent for gateway WebSocket when configured", async () => { @@ -257,28 +265,12 @@ describe("createDiscordGatewayPlugin", () => { }); it("maps body read failures to fetch failed", async () => { - const runtime = createRuntime(); - globalFetchMock.mockResolvedValue({ + await expectGatewayRegisterFetchFailure({ ok: true, status: 200, text: async () => { throw new Error("body stream closed"); }, } as unknown as Response); - const plugin = createDiscordGatewayPlugin({ - discordConfig: {}, - runtime, - }); - - await expect( - ( - plugin as unknown as { - registerClient: (client: { options: { token: string } }) => Promise; - } - ).registerClient({ - options: { token: "token-123" }, - }), - ).rejects.toThrow("Failed to get gateway information from Discord: fetch failed"); - expect(baseRegisterClientSpy).not.toHaveBeenCalled(); }); });