Files
openwork/apps/app/tests/den-managed-dashboards-capability.test.ts

55 lines
2.1 KiB
TypeScript

import { describe, expect, test } from "bun:test";
import { createDenClient } from "../src/app/lib/den";
describe("Den managed-dashboard capability negotiation", () => {
test("does not call the new dashboard route when an older Den omits the capability", async () => {
const originalFetch = globalThis.fetch;
const paths: string[] = [];
const fetchMock: typeof fetch = async (input) => {
paths.push(new URL(String(input)).pathname);
return new Response(JSON.stringify({ capabilities: {} }), {
headers: { "Content-Type": "application/json" },
status: 200,
});
};
Object.defineProperty(globalThis, "fetch", { configurable: true, value: fetchMock });
try {
const dashboards = await createDenClient({ baseUrl: "http://den.local", token: "token" })
.listGrantedDashboards("organization_1");
expect(dashboards).toEqual([]);
expect(paths).toEqual(["/api/den/v1/org"]);
} finally {
Object.defineProperty(globalThis, "fetch", { configurable: true, value: originalFetch });
}
});
test("calls the dashboard route only after Den explicitly advertises support", async () => {
const originalFetch = globalThis.fetch;
const paths: string[] = [];
const fetchMock: typeof fetch = async (input) => {
const path = new URL(String(input)).pathname;
paths.push(path);
return new Response(JSON.stringify(path === "/api/den/v1/org"
? { capabilities: { orgManagedDashboards: true } }
: { items: [] }), {
headers: { "Content-Type": "application/json" },
status: 200,
});
};
Object.defineProperty(globalThis, "fetch", { configurable: true, value: fetchMock });
try {
const dashboards = await createDenClient({ baseUrl: "http://den.local", token: "token" })
.listGrantedDashboards("organization_1");
expect(dashboards).toEqual([]);
expect(paths).toEqual(["/api/den/v1/org", "/api/den/v1/me/dashboards"]);
} finally {
Object.defineProperty(globalThis, "fetch", { configurable: true, value: originalFetch });
}
});
});