89 lines
2.7 KiB
TypeScript
89 lines
2.7 KiB
TypeScript
import { describe, expect, test } from "bun:test";
|
|
|
|
import type { DenExternalMcpPreset } from "../src/app/lib/den";
|
|
import {
|
|
libraryConnectorCues,
|
|
libraryConnectorIconUrls,
|
|
} from "../src/react-app/domains/settings/library-connector-cues";
|
|
|
|
function preset(
|
|
presetId: string,
|
|
displayName: string,
|
|
url = `https://mcp.${presetId}.example/mcp`,
|
|
): DenExternalMcpPreset {
|
|
return {
|
|
presetId,
|
|
displayName,
|
|
description: `${displayName} connection`,
|
|
url,
|
|
authType: "oauth",
|
|
};
|
|
}
|
|
|
|
describe("Library connector discovery cues", () => {
|
|
test("prioritizes recognizable live Den presets alongside hosted suites", () => {
|
|
const cues = libraryConnectorCues([
|
|
preset("linear", "Linear"),
|
|
preset("slack", "Slack"),
|
|
preset("notion", "Notion"),
|
|
preset("sentry", "Sentry"),
|
|
]);
|
|
|
|
expect(cues.map((cue) => cue.name)).toEqual([
|
|
"Notion",
|
|
"Slack",
|
|
"Google Workspace",
|
|
"Microsoft 365",
|
|
"Linear",
|
|
]);
|
|
expect(cues[0]?.serviceUrl).toBe("https://mcp.notion.example/mcp");
|
|
expect(cues).toHaveLength(5);
|
|
});
|
|
|
|
test("keeps hosted-service discovery useful when the live preset catalog is unavailable", () => {
|
|
expect(libraryConnectorCues([]).map((cue) => cue.name)).toEqual([
|
|
"Google Workspace",
|
|
"Microsoft 365",
|
|
]);
|
|
});
|
|
|
|
test("deduplicates repeated presets before filling the compact cue strip", () => {
|
|
const cues = libraryConnectorCues([
|
|
preset("notion", "Old Notion"),
|
|
preset("notion", "Notion"),
|
|
preset("slack", "Slack"),
|
|
preset("linear", "Linear"),
|
|
]);
|
|
|
|
expect(cues.map((cue) => cue.name)).toEqual([
|
|
"Notion",
|
|
"Slack",
|
|
"Google Workspace",
|
|
"Microsoft 365",
|
|
"Linear",
|
|
]);
|
|
});
|
|
|
|
test("falls back from unavailable catalog slugs to recognizable service favicons", () => {
|
|
const cues = libraryConnectorCues([
|
|
preset("slack", "Slack", "https://mcp.slack.com/mcp"),
|
|
]);
|
|
const slack = cues.find((cue) => cue.id === "slack");
|
|
const google = cues.find((cue) => cue.id === "google-workspace");
|
|
const microsoft = cues.find((cue) => cue.id === "microsoft-365");
|
|
|
|
expect(slack && libraryConnectorIconUrls(slack)).toEqual([
|
|
"https://cdn.simpleicons.org/slack",
|
|
"https://www.google.com/s2/favicons?sz=64&domain=slack.com",
|
|
]);
|
|
expect(google && libraryConnectorIconUrls(google)).toEqual([
|
|
"https://cdn.simpleicons.org/googleworkspace",
|
|
"https://www.google.com/s2/favicons?sz=64&domain=google.com",
|
|
]);
|
|
expect(microsoft && libraryConnectorIconUrls(microsoft)).toEqual([
|
|
"https://cdn.simpleicons.org/microsoft365",
|
|
"https://www.google.com/s2/favicons?sz=64&domain=microsoft365.com",
|
|
]);
|
|
});
|
|
});
|