Files
template-app/test/start-report.test.ts
T
2026-11-14 09:56:45 +00:00

44 lines
1.7 KiB
TypeScript

// SPDX-License-Identifier: LicenseRef-ConusAI-Template-1.0
// Start has no `onRequestError`: the loaders and the server entry report what they leave unhandled, and a
// redirect or a not-found the app raised on purpose is control flow.
import { notFound, redirect } from "@tanstack/react-router"
import { afterEach, describe, expect, it, vi } from "vitest"
const mocks = vi.hoisted(() => ({ current: undefined as unknown }))
vi.mock("@app/config", () => ({ currentObservability: () => mocks.current }))
const { reportFailure } = await import("../apps/web/src/server/report")
const context = { routePath: "/$org", routeType: "loader" }
const observer = () => ({
captureException: vi.fn(),
log: { error: vi.fn(), warn: vi.fn(), info: vi.fn(), debug: vi.fn() },
})
const request = new Request("http://app.test/acme/notes?x=1", { headers: { traceparent: "t" } })
afterEach(() => {
mocks.current = undefined
})
describe("a failed request's report", () => {
it("reports a fault with the route, and says nothing of a redirect or a not-found", () => {
const observe = observer()
mocks.current = observe
reportFailure(notFound(), request, context)
reportFailure(redirect({ href: "/" }), request, context)
expect(observe.captureException).not.toHaveBeenCalled()
const fault = new Error("fault")
reportFailure(fault, request, context)
expect(observe.captureException).toHaveBeenCalledWith(fault, { route: "/$org", kind: "loader" })
expect(observe.log.error).toHaveBeenCalledOnce()
expect(observe.log.error.mock.calls[0]?.[1]).toMatchObject({ "url.path": "/acme/notes" })
})
it("does nothing in a process that started no observability", () => {
expect(() => reportFailure(new Error("fault"), request, context)).not.toThrow()
})
})