源码快照 @ 2026-09-02 (source-only, 剔除非源码素材)
This commit is contained in:
@@ -0,0 +1,54 @@
|
||||
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 });
|
||||
}
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user