From 06b91c2e63675d938d8e47e99da7367e36ab507c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=B0=8F=E6=A9=98?= Date: Thu, 30 Apr 2026 13:07:19 +0000 Subject: [PATCH] test(workflow-utils): add error path tests for createLlmAdapter MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Cover non-ok HTTP response (500) and network failure (ECONNREFUSED). Per review feedback from 星月 🌙 on PR #278. --- .../src/__tests__/create-llm-adapter.test.ts | 24 +++++++++++++++++++ 1 file changed, 24 insertions(+) diff --git a/packages/workflow-utils/src/__tests__/create-llm-adapter.test.ts b/packages/workflow-utils/src/__tests__/create-llm-adapter.test.ts index 5504b1a..f0d3a90 100644 --- a/packages/workflow-utils/src/__tests__/create-llm-adapter.test.ts +++ b/packages/workflow-utils/src/__tests__/create-llm-adapter.test.ts @@ -51,4 +51,28 @@ describe("createLlmAdapter", () => { { role: "user", content: "trigger text" }, ]); }); + + it("throws on non-ok fetch response", async () => { + const fetchMock = vi.fn().mockResolvedValue({ + ok: false, + status: 500, + text: async () => "Internal Server Error", + }); + vi.stubGlobal("fetch", fetchMock); + + const provider = { baseUrl: "https://api.example/v1", apiKey: "k", model: "m" }; + const adapter = createLlmAdapter(provider); + + await expect(adapter(makeCtx("t1", "hi"), "sys")).rejects.toThrow("llm:"); + }); + + it("throws on fetch network failure", async () => { + const fetchMock = vi.fn().mockRejectedValue(new Error("ECONNREFUSED")); + vi.stubGlobal("fetch", fetchMock); + + const provider = { baseUrl: "https://api.example/v1", apiKey: "k", model: "m" }; + const adapter = createLlmAdapter(provider); + + await expect(adapter(makeCtx("t1", "hi"), "sys")).rejects.toThrow(); + }); });