diff --git a/surfaces/gui/e2e/access-section.spec.ts b/surfaces/gui/e2e/access-section.spec.ts index 5d4b490e..bbaa9402 100644 --- a/surfaces/gui/e2e/access-section.spec.ts +++ b/surfaces/gui/e2e/access-section.spec.ts @@ -52,7 +52,7 @@ test("+ Add a source: full catalog on focus, filter as you type → connect-in-c const search = page.getByTestId("access-add-search"); await expect(search).toBeFocused(); const rows = page.locator('[data-testid^="access-add-"]:not([data-testid="access-add-search"])'); - await expect(rows).toHaveCount(9); // 12 in the catalog − browser/slack/github (connected) + await expect(rows).toHaveCount(10); // 13 in the catalog − browser/slack/github (connected) await expect(page.getByTestId("access-add-notion")).toBeVisible(); // Already-connected sources don't match (Slack and GitHub are connected in fixtures)… @@ -63,7 +63,7 @@ test("+ Add a source: full catalog on focus, filter as you type → connect-in-c // …and clearing the query restores the full list ("filter as you type", not search-only). await search.fill(""); - await expect(rows).toHaveCount(9); + await expect(rows).toHaveCount(10); // Capability aliases match too: "calendar" surfaces Outlook (title alone never would). await search.fill("calendar"); diff --git a/surfaces/gui/e2e/fixtures.ts b/surfaces/gui/e2e/fixtures.ts index dd00f48e..ee8246ad 100644 --- a/surfaces/gui/e2e/fixtures.ts +++ b/surfaces/gui/e2e/fixtures.ts @@ -138,7 +138,6 @@ const CONNECTORS = { connectors: [ { name: "browser", title: "Browser", icon: "B", blurb: "Headless browser.", auth: "none", two_way: false, channels: false, available: true, brand_color: "#6b7280", logo: "", fields: [], instructions: [], connected: true, account: null, enabled: true, allowed_users: [], tools: [], managed: false, managed_profile: false }, { name: "telegram", title: "Telegram", icon: "T", blurb: "Two-way Telegram messaging.", auth: "bot_token", two_way: true, channels: true, available: true, brand_color: "#229ed9", logo: "telegram", fields: [{ key: "bot_token", label: "Bot token", secret: true, required: true, help: "", placeholder: "123456:ABC…" }], instructions: [], connected: false, account: null, enabled: false, allowed_users: [], tools: [], managed: false, managed_profile: false }, - { name: "obsidian", title: "Obsidian", icon: "\u25c8", blurb: "Search, read, and write notes in your local vault \u2014 no account needed.", auth: "folder", two_way: false, channels: false, available: true, brand_color: "#7c3aed", logo: "obsidian", fields: [{ key: "vault_path", label: "Vault folder", secret: false, required: true, help: "The folder holding your notes.", placeholder: "~/Documents/MyVault", kind: "folder" }], instructions: ["Pick your vault folder \u2014 no account, no keys."], connected: false, account: null, enabled: false, allowed_users: [], tools: [], managed: false, managed_profile: false }, // Managed-capable connector (one-click via cloud when signed in; manual paste otherwise). // Carries pre-connect detail copy (§38): about + access + tools drive available-detail.spec.ts. { name: "gmail", title: "Gmail", icon: "✉", blurb: "Search, summarize, draft, and send email.", about: "Search, summarize, and send over your Gmail.", access: ["Reads and searches your mail.", "Sends email as you.", "Never deletes mail or changes account settings."], auth: "oauth", two_way: false, channels: false, available: true, brand_color: "#ea4335", logo: "gmail", fields: [{ key: "access_token", label: "OAuth access token", secret: true, required: true, help: "", placeholder: "" }], instructions: [], connected: false, account: null, enabled: false, allowed_users: [], tools: [{ name: "gmail_search", label: "Search mail", kind: "read", description: "Search messages.", enabled: true, requires_approval: false }, { name: "gmail_send", label: "Send email", kind: "write", description: "Send a message.", enabled: true, requires_approval: true }], managed: true, managed_profile: false }, @@ -156,6 +155,7 @@ const CONNECTORS = { // (two-mode modal). Neither needs cloud sign-in. { name: "monday", title: "monday.com", icon: "▦", blurb: "Read boards and items, track work, create items and post updates.", aliases: ["project management", "tasks", "boards"], auth: "oauth", two_way: false, channels: false, available: true, brand_color: "#6161ff", logo: "monday", mcp: true, fields: [], instructions: ["One click connects via monday.com sign-in in your browser.", "Sign-in is fully local — tokens stay on this Mac."], connected: false, account: null, enabled: false, allowed_users: [], tools: [{ name: "mcp__monday__get_board_info", label: "Read board", kind: "read", description: "Read a board's columns and groups.", enabled: true, requires_approval: false }, { name: "mcp__monday__create_item", label: "Create item", kind: "write", description: "Create an item on a board.", enabled: true, requires_approval: true }], managed: false, managed_profile: false }, { name: "jira", title: "Jira", icon: "◆", blurb: "Search, summarize, create, and update issues.", aliases: ["issues", "tickets", "atlassian"], auth: "api_token", two_way: false, channels: false, available: true, brand_color: "#0052cc", logo: "jira", mcp: true, fields: [{ key: "base_url", label: "Atlassian site URL", secret: false, required: true, help: "", placeholder: "" }, { key: "email", label: "Account email", secret: false, required: true, help: "", placeholder: "" }, { key: "api_token", label: "API token", secret: true, required: true, help: "", placeholder: "" }], instructions: [], connected: false, account: null, enabled: false, allowed_users: [], tools: [], managed: false, managed_profile: false }, + { name: "obsidian", title: "Obsidian", icon: "\u25c8", blurb: "Search, read, and write notes in your local vault \u2014 no account needed.", auth: "folder", two_way: false, channels: false, available: true, brand_color: "#7c3aed", logo: "obsidian", fields: [{ key: "vault_path", label: "Vault folder", secret: false, required: true, help: "The folder holding your notes.", placeholder: "~/Documents/MyVault", kind: "folder" }], instructions: ["Pick your vault folder \u2014 no account, no keys."], connected: false, account: null, enabled: false, allowed_users: [], tools: [], managed: false, managed_profile: false }, ], }; diff --git a/surfaces/gui/e2e/obsidian-connector.spec.ts b/surfaces/gui/e2e/obsidian-connector.spec.ts index 6427cc6e..1f677034 100644 --- a/surfaces/gui/e2e/obsidian-connector.spec.ts +++ b/surfaces/gui/e2e/obsidian-connector.spec.ts @@ -14,6 +14,8 @@ async function openConnectors(page) { test("obsidian: folder field, vault validation error, then connects", async ({ page }) => { await openConnectors(page); + // Obsidian sits at the catalog's tail — expand past the truncation fold first. + await page.getByRole("button", { name: "show all" }).click(); const card = page.getByTestId("connector-obsidian"); await expect(card).toContainText("Obsidian"); await card.getByRole("button", { name: "Connect" }).click();