|
| 1 | +import { afterEach, describe, expect, test } from "bun:test" |
| 2 | + |
| 3 | +import { authenticatedFetch } from "../src/api/client" |
| 4 | + |
| 5 | +const originalFetch = globalThis.fetch |
| 6 | +const originalSessionStorage = globalThis.sessionStorage |
| 7 | + |
| 8 | +afterEach(() => { |
| 9 | + Object.defineProperty(globalThis, "fetch", { |
| 10 | + configurable: true, |
| 11 | + value: originalFetch, |
| 12 | + }) |
| 13 | + Object.defineProperty(globalThis, "sessionStorage", { |
| 14 | + configurable: true, |
| 15 | + value: originalSessionStorage, |
| 16 | + }) |
| 17 | +}) |
| 18 | + |
| 19 | +describe("authenticatedFetch", () => { |
| 20 | + test("adds the active UI Bearer token while preserving caller headers", async () => { |
| 21 | + const values = new Map([["keen-pbr-auth-token", "test-token"]]) |
| 22 | + Object.defineProperty(globalThis, "sessionStorage", { |
| 23 | + configurable: true, |
| 24 | + value: { |
| 25 | + getItem: (key: string) => values.get(key) ?? null, |
| 26 | + setItem: (key: string, value: string) => values.set(key, value), |
| 27 | + removeItem: (key: string) => values.delete(key), |
| 28 | + }, |
| 29 | + }) |
| 30 | + |
| 31 | + let receivedHeaders: Headers | undefined |
| 32 | + Object.defineProperty(globalThis, "fetch", { |
| 33 | + configurable: true, |
| 34 | + value: (_url: string, options?: RequestInit) => { |
| 35 | + receivedHeaders = new Headers(options?.headers) |
| 36 | + return Promise.resolve(new Response(null, { status: 204 })) |
| 37 | + }, |
| 38 | + }) |
| 39 | + |
| 40 | + const response = await authenticatedFetch( |
| 41 | + "/api/diagnostics/command-failure", |
| 42 | + { |
| 43 | + headers: { Accept: "text/plain" }, |
| 44 | + } |
| 45 | + ) |
| 46 | + |
| 47 | + expect(response.status).toBe(204) |
| 48 | + expect(receivedHeaders?.get("Authorization")).toBe("Bearer test-token") |
| 49 | + expect(receivedHeaders?.get("Accept")).toBe("text/plain") |
| 50 | + }) |
| 51 | +}) |
0 commit comments