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"), + }, + ); + } }