From bb36c6ee4957cbfeb6bc808083113e2cc1e50780 Mon Sep 17 00:00:00 2001 From: Aki Kuivas <91662678+asku1990@users.noreply.github.com> Date: Wed, 1 Jul 2026 13:06:01 +0300 Subject: [PATCH] fix: add missing error handling for trial route --- .../[dogId]/trials/__tests__/route.test.ts | 22 ++++++++++++++ .../api/beagle/dogs/[dogId]/trials/route.ts | 29 ++++++++++++++----- 2 files changed, 44 insertions(+), 7 deletions(-) diff --git a/apps/web/app/api/beagle/dogs/[dogId]/trials/__tests__/route.test.ts b/apps/web/app/api/beagle/dogs/[dogId]/trials/__tests__/route.test.ts index 1b5cf794..06fd673b 100644 --- a/apps/web/app/api/beagle/dogs/[dogId]/trials/__tests__/route.test.ts +++ b/apps/web/app/api/beagle/dogs/[dogId]/trials/__tests__/route.test.ts @@ -71,4 +71,26 @@ describe("public dog trials api route", () => { error: "Dog profile not found.", }); }); + + it("returns structured errors when the service throws", async () => { + getBeagleDogTrialsMock.mockRejectedValue(new Error("boom")); + + const { GET } = await import("../route"); + const request = new NextRequest( + "http://localhost/api/beagle/dogs/dog_1/trials", + { + headers: { origin: "http://localhost:3000" }, + }, + ); + const response = await GET(request, { + params: Promise.resolve({ dogId: "dog_1" }), + }); + + expect(response.status).toBe(500); + await expect(response.json()).resolves.toEqual({ + ok: false, + error: "Failed to load dog trials.", + code: "INTERNAL_ERROR", + }); + }); }); diff --git a/apps/web/app/api/beagle/dogs/[dogId]/trials/route.ts b/apps/web/app/api/beagle/dogs/[dogId]/trials/route.ts index e83c5926..1fa3e610 100644 --- a/apps/web/app/api/beagle/dogs/[dogId]/trials/route.ts +++ b/apps/web/app/api/beagle/dogs/[dogId]/trials/route.ts @@ -15,11 +15,26 @@ export async function OPTIONS(request: NextRequest) { } export async function GET(request: NextRequest, { params }: RouteParams) { - const { dogId } = await params; - const result = await dogsService.getBeagleDogTrials(dogId); - return jsonResponse(result.body, { - status: result.status, - methods: "GET,OPTIONS", - origin: request.headers.get("origin"), - }); + try { + const { dogId } = await params; + const result = await dogsService.getBeagleDogTrials(dogId); + return jsonResponse(result.body, { + status: result.status, + methods: "GET,OPTIONS", + origin: request.headers.get("origin"), + }); + } catch { + return jsonResponse( + { + ok: false, + error: "Failed to load dog trials.", + code: "INTERNAL_ERROR", + }, + { + status: 500, + methods: "GET,OPTIONS", + origin: request.headers.get("origin"), + }, + ); + } }