Files
openwork/apps/app/tests/den-mcp-connect-compatibility.test.ts

49 lines
1.6 KiB
TypeScript

import { afterEach, describe, expect, test } from "bun:test";
import { createDenClient, DenApiError } from "../src/app/lib/den";
const originalFetch = globalThis.fetch;
afterEach(() => {
Object.defineProperty(globalThis, "fetch", {
configurable: true,
value: originalFetch,
});
});
describe("published desktop MCP connect compatibility", () => {
test("surfaces an issuer-review conflict as an actionable Den error", async () => {
const message = "This connection's OAuth issuer changed and existing credentials must be cleared. Ask a workspace admin to reconnect it.";
Object.defineProperty(globalThis, "fetch", {
configurable: true,
value: async (input: RequestInfo | URL, init?: RequestInit) => {
expect(String(input)).toBe("https://api.den.example.test/v1/mcp-connections/connection_1/connect/start");
expect(init?.method).toBe("GET");
return Response.json({
error: "mcp_oauth_issuer_mismatch",
message,
}, { status: 409 });
},
});
const client = createDenClient({
baseUrl: "https://den.example.test",
apiBaseUrl: "https://api.den.example.test",
token: "published-desktop-token",
});
let failure: unknown;
try {
await client.startMcpConnectionConnect("org_1", "connection_1");
} catch (error) {
failure = error;
}
expect(failure).toBeInstanceOf(DenApiError);
if (!(failure instanceof DenApiError)) throw new Error("Expected a structured Den API error.");
expect(failure.status).toBe(409);
expect(failure.code).toBe("mcp_oauth_issuer_mismatch");
expect(failure.message).toBe(message);
});
});