fix(web): handle empty-body 201/204 responses in API client
This commit is contained in:
parent
53755e9c3a
commit
9afb5fcee8
2 changed files with 9 additions and 2 deletions
|
|
@ -1,5 +1,5 @@
|
|||
import { describe, it, expect, vi, beforeEach } from "vitest";
|
||||
import { apiGet } from "./client";
|
||||
import { apiGet, apiSend } from "./client";
|
||||
import { NetWorthSchema } from "./schemas";
|
||||
beforeEach(() => vi.restoreAllMocks());
|
||||
describe("apiGet", () => {
|
||||
|
|
@ -13,3 +13,9 @@ describe("apiGet", () => {
|
|||
await expect(apiGet("/networth", NetWorthSchema)).rejects.toThrow();
|
||||
});
|
||||
});
|
||||
describe("apiSend", () => {
|
||||
it("resolves to null on an empty-body 201 (e.g. POST /categories, POST /manual-assets)", async () => {
|
||||
vi.stubGlobal("fetch", vi.fn(async () => new Response("", { status: 201 })));
|
||||
await expect(apiSend("POST", "/categories", { name: "Food" })).resolves.toBeNull();
|
||||
});
|
||||
});
|
||||
|
|
|
|||
|
|
@ -21,7 +21,8 @@ async function req(method: string, path: string, body?: unknown): Promise<unknow
|
|||
throw new ApiError(401, "unauthorized");
|
||||
}
|
||||
if (!res.ok) throw new ApiError(res.status, await res.text());
|
||||
return res.status === 204 ? null : res.json();
|
||||
const text = await res.text();
|
||||
return text ? JSON.parse(text) : null;
|
||||
}
|
||||
|
||||
export async function apiGet<T>(path: string, schema: z.ZodType<T>): Promise<T> {
|
||||
|
|
|
|||
Loading…
Add table
Reference in a new issue