diff --git a/src/fetch-safe/fetch-safe.test.ts b/src/fetch-safe/fetch-safe.test.ts index 78f0e0c..4f74214 100644 --- a/src/fetch-safe/fetch-safe.test.ts +++ b/src/fetch-safe/fetch-safe.test.ts @@ -2,59 +2,18 @@ import { afterEach, assert, describe, it, vi } from "vitest"; import { Fetch } from "../fetch-safe/fetch-safe"; import type { CodexError } from "../async"; -class MockResponse implements Response { - headers: Headers = new Headers(); - ok: boolean; - redirected = false; - status: number; - statusText = ""; - type = "basic" as "basic"; - url = ""; - body = null; - bodyUsed = false; - _text: string; - - constructor(ok: boolean, status: number, text: string) { - this.ok = ok; - this.status = status; - this._text = text; - } - - clone(): Response { - throw new Error("Method not implemented."); - } - - arrayBuffer(): Promise { - throw new Error("Method not implemented."); - } - - blob(): Promise { - throw new Error("Method not implemented."); - } - - formData(): Promise { - throw new Error("Method not implemented."); - } - - json(): Promise { - return Promise.resolve(JSON.parse(this._text)); - } - - text(): Promise { - return Promise.resolve(this._text); - } -} - describe.only("fetch", () => { afterEach(() => { vi.restoreAllMocks(); }); it("returns an error when the http call failed", async () => { - const spy = vi.spyOn(global, "fetch"); - spy.mockImplementationOnce(() => - Promise.resolve(new MockResponse(false, 500, "error")) - ); + const mockResponse = { + ok: false, + status: 500, + text: async () => "error", + } as Response; + globalThis.fetch = vi.fn().mockResolvedValue(mockResponse); const result = await Fetch.safeJson("http://localhost:3000/some-url", { method: "GET", @@ -69,31 +28,31 @@ describe.only("fetch", () => { }); it.only("returns an error when the json parsing failed", async () => { - const spy = vi.spyOn(global, "fetch"); - spy.mockImplementationOnce(() => - Promise.resolve( - new MockResponse(false, 200, "Unexpected end of JSON input") - ) - ); + const mockResponse = { + ok: true, + status: 200, + json: async () => { + return JSON.parse("{error"); + }, + } as any; + globalThis.fetch = vi.fn().mockResolvedValue(mockResponse); const result = await Fetch.safeJson("http://localhost:3000/some-url", { method: "GET", }); assert.ok(result.error); - assert.deepStrictEqual( - (result.data as CodexError).message, - "Unexpected end of JSON input" - ); }); it("returns the data when the fetch succeed", async () => { - const spy = vi.spyOn(global, "fetch"); - spy.mockImplementationOnce(() => - Promise.resolve( - new MockResponse(true, 200, JSON.stringify({ hello: "world" })) - ) - ); + const mockResponse = { + ok: true, + status: 200, + json: async () => ({ + hello: "world", + }), + } as Response; + globalThis.fetch = vi.fn().mockResolvedValue(mockResponse); const result = await Fetch.safeJson("http://localhost:3000/some-url", { method: "GET", diff --git a/src/fetch-safe/fetch-safe.ts b/src/fetch-safe/fetch-safe.ts index dbd8e48..dcc2fa4 100644 --- a/src/fetch-safe/fetch-safe.ts +++ b/src/fetch-safe/fetch-safe.ts @@ -9,8 +9,7 @@ export const Fetch = { return { error: true, data: { - message: - "The connection with the Codex node seems to be broken. Please check your node is running.", + message: res.data.message, code: 502, }, };