Files
openwork/apps/app/tests/library-connector-cues.test.ts

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",
]);
});
});