From 93e305287aa43212b2ca7b6e5d2f25c5dd280797 Mon Sep 17 00:00:00 2001 From: Sam Kujovich Date: Mon, 19 Oct 2026 13:48:45 -0700 Subject: [PATCH] refactor(integrations): stop relying on the coming-soon flag Arcade is removing the coming-soon concept from the design-system toolkit metadata. The design-system metadata feeds the public catalog, and the docs generator required isComingSoon on every toolkit's branding, so dropping the field upstream would have stripped branding from every generated toolkit file. - The generator no longer reads or writes isComingSoon. Zod strips unknown keys, so it accepts branding with or without the field. - The integrations index drops toolkits without a page instead of rendering them as non-clickable coming-soon cards, and the coming-soon modal and its context are removed. - llms.txt no longer filters on the flag. --- app/_components/coming-soon-context.tsx | 30 -- app/_lib/integration-catalog.ts | 1 - app/_lib/integration-index.ts | 36 +-- app/_lib/toolkit-slug.ts | 2 +- .../components/coming-soon-modal.tsx | 138 --------- .../integrations/components/tool-card.tsx | 66 +---- .../components/toolkits-client.tsx | 266 ++++++++---------- .../components/use-toolkit-filters.ts | 26 +- scripts/generate-llmstxt.ts | 4 +- tests/integration-catalog.test.ts | 7 +- tests/integration-index-links.test.ts | 58 ++-- tests/toolkit-data-cache.test.ts | 2 - tests/toolkit-data.test.ts | 1 - tests/toolkit-markdown.test.ts | 1 - tests/toolkit-static-params.test.ts | 1 - .../src/diff/previous-output.ts | 1 - .../src/merger/data-merger.ts | 3 - .../src/merger/metadata-freshness.ts | 1 - .../src/shared/toolkit-schemas.ts | 1 - .../src/sources/design-system-metadata.ts | 2 - .../src/sources/public-catalog-schema.ts | 2 - toolkit-docs-generator/src/types/index.ts | 1 - .../tests/cli/generate-flow.test.ts | 2 - .../tests/diff/previous-output.test.ts | 5 - .../tests/diff/summary-diff.test.ts | 1 - .../tests/diff/toolkit-diff.test.ts | 2 - .../tests/fixtures/github-toolkit.json | 1 - .../tests/fixtures/metadata.json | 5 - .../tests/fixtures/slack-toolkit.json | 1 - .../llm/toolkit-summary-generator.test.ts | 1 - .../tests/merger/data-merger.test.ts | 1 - .../tests/merger/metadata-freshness.test.ts | 5 - .../tests/merger/secret-coherence.test.ts | 1 - .../scenarios/custom-sections-diff.test.ts | 1 - .../tests/scenarios/new-toolkit.test.ts | 1 - .../scenarios/removed-toolkit-cleanup.test.ts | 1 - .../tests/scenarios/removed-toolkit.test.ts | 1 - .../tests/scenarios/skip-unchanged.test.ts | 3 - .../scenarios/stale-version-tools.test.ts | 1 - .../scripts/sync-toolkit-sidebar.test.ts | 1 - .../sources/design-system-metadata.test.ts | 1 - .../tests/sources/in-memory.test.ts | 1 - .../tests/sources/public-catalog-api.test.ts | 17 +- .../tests/sources/toolkit-data-source.test.ts | 1 - 44 files changed, 196 insertions(+), 508 deletions(-) delete mode 100644 app/_components/coming-soon-context.tsx delete mode 100644 app/en/resources/integrations/components/coming-soon-modal.tsx diff --git a/app/_components/coming-soon-context.tsx b/app/_components/coming-soon-context.tsx deleted file mode 100644 index c219f19c3..000000000 --- a/app/_components/coming-soon-context.tsx +++ /dev/null @@ -1,30 +0,0 @@ -"use client"; -import type React from "react"; -import { createContext, useContext, useState } from "react"; - -type ComingSoonContextType = { - email: string; - // eslint-disable-next-line no-unused-vars - setEmail: (email: string) => void; -}; - -const ComingSoonContext = createContext({ - email: "", - setEmail: () => { - /* no-op */ - }, -}); - -export const ComingSoonProvider: React.FC<{ children: React.ReactNode }> = ({ - children, -}) => { - const [email, setEmail] = useState(""); - - return ( - - {children} - - ); -}; - -export const useComingSoon = () => useContext(ComingSoonContext); diff --git a/app/_lib/integration-catalog.ts b/app/_lib/integration-catalog.ts index b1f0f1e47..384b151ce 100644 --- a/app/_lib/integration-catalog.ts +++ b/app/_lib/integration-catalog.ts @@ -28,7 +28,6 @@ const toCatalogToolkit = ({ relativeDocsLink: new URL(metadata.docsLink).pathname, type: metadata.type, category: metadata.category, - isComingSoon: metadata.isComingSoon, isHidden: metadata.isHidden, }); diff --git a/app/_lib/integration-index.ts b/app/_lib/integration-index.ts index 036d7f3d9..aeeee9475 100644 --- a/app/_lib/integration-index.ts +++ b/app/_lib/integration-index.ts @@ -21,22 +21,16 @@ export function toIntegrationLink(toolkit: { return `${INTEGRATIONS_BASE}/${category}/${slug}`; } -export type ResolvedIndexToolkit = ToolkitWithDocsLink & { hasPage: boolean }; +export type ResolvedIndexToolkit = ToolkitWithDocsLink & { link: string }; /** - * Decide which catalog toolkits the integrations index should render, and - * whether each one links to a real page. + * Decide which catalog toolkits the integrations index should render, and the + * page each card links to. * - * The design-system catalog carries legacy bare-name entries (e.g. "Datadog" - * alongside "DatadogApi") and doc-less placeholders (e.g. "Discord") that have - * no generated docs page — linking to them 404s. Given the set of links that - * actually resolve (`validLinks`: dynamic toolkit routes + authored static - * pages), this: - * - drops a bare entry when its `-api` sibling owns the real page (collapses - * Datadog/DatadogApi, Vercel/VercelApi, Ashby/AshbyApi, Customerio/...), - * - de-dupes entries that resolve to the same URL (e.g. Notion/NotionToolkit), - * - flags the rest with `hasPage` so the caller can render doc-less toolkits - * as non-clickable cards instead of as broken links. + * Given the set of links that actually resolve (`validLinks`: dynamic toolkit + * routes + authored static pages), this: + * - drops toolkits without a page, so no card links to a 404, + * - de-dupes entries that resolve to the same URL (e.g. Notion/NotionToolkit). */ export function resolveIndexToolkits( toolkits: ToolkitWithDocsLink[], @@ -52,21 +46,11 @@ export function resolveIndexToolkits( } const link = toIntegrationLink(toolkit); - const hasPage = link !== null && validLinks.has(link); - - // A bare duplicate of a real "-api" toolkit: drop it; the real card stays. - if (link && !hasPage && validLinks.has(`${link}-api`)) { + if (link === null || !validLinks.has(link) || seen.has(link)) { continue; } - - // Collapse multiple catalog entries that point at the same URL. - if (link) { - if (seen.has(link)) { - continue; - } - seen.add(link); - } - resolved.push({ ...toolkit, hasPage }); + seen.add(link); + resolved.push({ ...toolkit, link }); } return resolved; diff --git a/app/_lib/toolkit-slug.ts b/app/_lib/toolkit-slug.ts index c99566dc3..5f9793940 100644 --- a/app/_lib/toolkit-slug.ts +++ b/app/_lib/toolkit-slug.ts @@ -7,7 +7,7 @@ import type { Toolkit } from "@arcadeai/design-system"; * render a Partner badge on cards). This type makes the properties explicit * so both server and client code can share it. */ -export type ToolkitWithDocsLink = Toolkit & { +export type ToolkitWithDocsLink = Omit & { docsLink?: string | null; isPartner?: boolean; }; diff --git a/app/en/resources/integrations/components/coming-soon-modal.tsx b/app/en/resources/integrations/components/coming-soon-modal.tsx deleted file mode 100644 index 21549e184..000000000 --- a/app/en/resources/integrations/components/coming-soon-modal.tsx +++ /dev/null @@ -1,138 +0,0 @@ -"use client"; -import { - Button, - Dialog, - DialogContent, - DialogDescription, - DialogHeader, - DialogTitle, - Input, -} from "@arcadeai/design-system"; -import posthog from "posthog-js"; -import type React from "react"; -import { useState } from "react"; -import { useComingSoon } from "@/app/_components/coming-soon-context"; - -type ComingSoonModalProps = { - isOpen: boolean; - onClose: () => void; - toolkitName: string; -}; - -export function ComingSoonModal({ - isOpen, - onClose, - toolkitName, -}: ComingSoonModalProps) { - const { email, setEmail } = useComingSoon(); - const [isSubmitted, setIsSubmitted] = useState(false); - const [isSubmitting, setIsSubmitting] = useState(false); - const [error, setError] = useState(""); - - const handleSubmit = (e: React.FormEvent) => { - e.preventDefault(); - if (!email?.includes("@")) { - setError("Please enter a valid email address"); - return; - } - - setIsSubmitting(true); - setError(""); - - try { - posthog.capture("Notify me clicked", { - toolkit_name: toolkitName, - notify_email: email, - }); - setIsSubmitted(true); - } catch { - setError("Failed to submit. Please try again."); - } finally { - setIsSubmitting(false); - } - }; - - const handleClose = () => { - setIsSubmitted(false); - setError(""); - onClose(); - }; - - return ( - !open && handleClose()} open={isOpen}> - - - - {toolkitName} is coming soon - - {!isSubmitted && ( - - This toolkit is coming to Arcade soon. Sign up to be notified when - it's available. - - )} - - - {isSubmitted ? ( - - ) : ( -
-
- setEmail(e.target.value)} - placeholder="Enter your email" - required - type="email" - value={email} - /> - {error &&

{error}

} -
- -
- )} -
-
- ); -} - -const SuccessMessage = ({ - toolkitName, - handleClose, -}: { - toolkitName: string; - handleClose: () => void; -}) => ( -
-
- - Success - - -
-

- Thanks for your interest! -

-

- We'll notify you when the {toolkitName} toolkit becomes available. -

- -
-); diff --git a/app/en/resources/integrations/components/tool-card.tsx b/app/en/resources/integrations/components/tool-card.tsx index 2473c89c4..49340eb25 100644 --- a/app/en/resources/integrations/components/tool-card.tsx +++ b/app/en/resources/integrations/components/tool-card.tsx @@ -13,17 +13,14 @@ import { Handshake, Package } from "lucide-react"; import Link from "next/link"; import posthog from "posthog-js"; import type React from "react"; -import { useState } from "react"; -import { ComingSoonModal } from "./coming-soon-modal"; import { TOOL_CARD_TYPE_CONFIG } from "./type-config"; type ToolCardProps = { name: string; icon?: React.ComponentType> | null; iconUrl?: string; - link?: string; + link: string; type: ToolkitType; - isComingSoon?: boolean; isByoc?: boolean; isPro?: boolean; isPartner?: boolean; @@ -35,44 +32,29 @@ export const ToolCard: React.FC = ({ iconUrl, link, type, - isComingSoon = false, isByoc = false, isPro = false, isPartner = false, }) => { - const [isModalOpen, setIsModalOpen] = useState(false); const { className, label, icon: IconComponent, color, } = TOOL_CARD_TYPE_CONFIG[type]; - const showHeaderBadges = isByoc || isPro || isPartner || isComingSoon; + const showHeaderBadges = isByoc || isPro || isPartner; const trackToolCardClick = () => { posthog.capture("Tool card clicked", { tool_name: toolName, tool_type: type, tool_link: link, - is_coming_soon: isComingSoon, is_byoc: isByoc, is_pro: isPro, is_partner: isPartner, }); }; - const handleCardClick = (e: React.MouseEvent | React.KeyboardEvent) => { - trackToolCardClick(); - if (isComingSoon) { - e.preventDefault(); - setIsModalOpen(true); - } - }; - - const handleModalClose = () => { - setIsModalOpen(false); - }; - let iconNode: React.ReactNode; if (ToolkitIcon) { iconNode = ; @@ -94,8 +76,7 @@ export const ToolCard: React.FC = ({ @@ -124,14 +105,6 @@ export const ToolCard: React.FC = ({ "gap-1.5" )} > - {isComingSoon && ( - - Coming soon - - )} {isByoc && } {isPro && } {isPartner && ( @@ -151,35 +124,8 @@ export const ToolCard: React.FC = ({ ); return ( - <> - {isComingSoon || !link ? ( - - ) : ( - - {cardContent} - - )} - - {isComingSoon && ( - - )} - + + {cardContent} + ); }; diff --git a/app/en/resources/integrations/components/toolkits-client.tsx b/app/en/resources/integrations/components/toolkits-client.tsx index 942205df9..41c49cfb0 100644 --- a/app/en/resources/integrations/components/toolkits-client.tsx +++ b/app/en/resources/integrations/components/toolkits-client.tsx @@ -4,11 +4,7 @@ import { Generic as GenericIcon } from "@arcadeai/design-system/components/ui/at import { cn } from "@arcadeai/design-system/lib/utils"; import { Code2, MessageSquarePlus, Search } from "lucide-react"; import Link from "next/link"; -import { ComingSoonProvider } from "@/app/_components/coming-soon-context"; -import { - type ResolvedIndexToolkit, - toIntegrationLink, -} from "@/app/_lib/integration-index"; +import type { ResolvedIndexToolkit } from "@/app/_lib/integration-index"; import { FiltersBar } from "./filters-bar"; import { ToolCard } from "./tool-card"; import { TYPE_CONFIG, TYPE_DESCRIPTIONS } from "./type-config"; @@ -56,152 +52,138 @@ export default function ToolkitsClient({ toolkits }: ToolkitsClientProps) { useToolkitFilters(toolkits); return ( - -
-
-
-

- MCP Servers -

-

- There are 5 designations for Arcade MCP Servers: -

-
- {Object.entries(TYPE_CONFIG).map( - ([key, { label, icon: Icon, color }]) => ( -
-
- -
-
-

- {label} -

-

- { - TYPE_DESCRIPTIONS[ - key as keyof typeof TYPE_DESCRIPTIONS - ] - } -

-
+
+
+
+

+ MCP Servers +

+

+ There are 5 designations for Arcade MCP Servers: +

+
+ {Object.entries(TYPE_CONFIG).map( + ([key, { label, icon: Icon, color }]) => ( +
+
+
- ) - )} -
- - {/* Don't see what you need? Two paths to fix that. */} -
-

- Don't see what you need? -

-
-
-
- -

- Build it yourself -

-
-

- Use Arcade's SDK to integrate with any service or API. -

- -
-
-
- -

- Tell us what's missing -

+
+

+ {label} +

+

+ {TYPE_DESCRIPTIONS[key as keyof typeof TYPE_DESCRIPTIONS]} +

-

- Request a missing tool, suggest a feature, or report a bug. -

-
-
-
+ ) + )}
-
-
- - -
- {filteredToolkits.length === 0 ? ( -
-
- + + {/* Don't see what you need? Two paths to fix that. */} +
+

+ Don't see what you need? +

+
+
+
+ +

+ Build it yourself +

-

- No MCP Servers found -

-

- Try adjusting your filters or search query +

+ Use Arcade's SDK to integrate with any service or API.

- {hasActiveFilters && ( - - )} +
- ) : ( -
- {filteredToolkits.map((toolkit) => { - // Get icon with fallback for API toolkits (e.g., GithubApi → Github) - const IconComponent = getToolkitIconWithFallback(toolkit.id); - // Use publicIconUrl from Design System as additional fallback - const iconUrl = - "publicIconUrl" in toolkit - ? (toolkit.publicIconUrl as string) - : undefined; - return ( - - ); - })} +
+
+ +

+ Tell us what's missing +

+
+

+ Request a missing tool, suggest a feature, or report a bug. +

+
- )} -
+
+
- +
+ + +
+ {filteredToolkits.length === 0 ? ( +
+
+ +
+

+ No MCP Servers found +

+

+ Try adjusting your filters or search query +

+ {hasActiveFilters && ( + + )} +
+ ) : ( +
+ {filteredToolkits.map((toolkit) => { + // Get icon with fallback for API toolkits (e.g., GithubApi → Github) + const IconComponent = getToolkitIconWithFallback(toolkit.id); + // Use publicIconUrl from Design System as additional fallback + const iconUrl = + "publicIconUrl" in toolkit + ? (toolkit.publicIconUrl as string) + : undefined; + return ( + + ); + })} +
+ )} +
+
+
); } diff --git a/app/en/resources/integrations/components/use-toolkit-filters.ts b/app/en/resources/integrations/components/use-toolkit-filters.ts index 2a15c1385..735c1b6c1 100644 --- a/app/en/resources/integrations/components/use-toolkit-filters.ts +++ b/app/en/resources/integrations/components/use-toolkit-filters.ts @@ -1,6 +1,7 @@ -import type { Toolkit, ToolkitType } from "@arcadeai/design-system"; +import type { ToolkitType } from "@arcadeai/design-system"; import { useDebounce } from "@uidotdev/usehooks"; import { useMemo } from "react"; +import type { ToolkitWithDocsLink } from "@/app/_lib/toolkit-slug"; import { useFilters } from "./use-filters"; const DEFAULT_PRIORITY = 5; @@ -25,27 +26,20 @@ const TYPE_LABELS: Record = { const getTypePriority = (type: string): number => TYPE_PRIORITY[type as ToolkitType] ?? DEFAULT_PRIORITY; -const compareToolkits = (a: T, b: T): number => { - // First prioritize available toolkits over coming soon toolkits - if (a.isComingSoon !== b.isComingSoon) { - return a.isComingSoon ? 1 : -1; - } - - // Within each availability group, prioritize by type - if (!(a.isComingSoon || b.isComingSoon)) { - const aPriority = getTypePriority(a.type); - const bPriority = getTypePriority(b.type); +const compareToolkits = (a: T, b: T): number => { + const aPriority = getTypePriority(a.type); + const bPriority = getTypePriority(b.type); - if (aPriority !== bPriority) { - return aPriority - bPriority; - } + if (aPriority !== bPriority) { + return aPriority - bPriority; } - // Finally sort alphabetically within each group return a.label.localeCompare(b.label); }; -export function useToolkitFilters(toolkits: T[]) { +export function useToolkitFilters( + toolkits: T[] +) { const { selectedCategory, selectedType, diff --git a/scripts/generate-llmstxt.ts b/scripts/generate-llmstxt.ts index 1224747fa..811751129 100644 --- a/scripts/generate-llmstxt.ts +++ b/scripts/generate-llmstxt.ts @@ -245,7 +245,7 @@ type ToolkitData = Partial< metadata?: Partial< Pick< MergedToolkitMetadata, - "category" | "docsLink" | "isHidden" | "isComingSoon" + "category" | "docsLink" | "isHidden" > >; }; @@ -330,7 +330,7 @@ async function discoverToolkitPages(): Promise< const data = JSON.parse( await fs.readFile(filePath, "utf-8") ) as ToolkitData; - if (!data.id || data.metadata?.isHidden || data.metadata?.isComingSoon) { + if (!data.id || data.metadata?.isHidden) { continue; } if (allowedIds && !allowedIds.has(data.id)) { diff --git a/tests/integration-catalog.test.ts b/tests/integration-catalog.test.ts index 62c8a0142..2af3b5fbc 100644 --- a/tests/integration-catalog.test.ts +++ b/tests/integration-catalog.test.ts @@ -1,7 +1,7 @@ import { describe, expect, test } from "vitest"; import type { ToolkitData } from "@/app/_components/toolkit-docs/types"; -import type { PartnerToolkit } from "@/app/_data/partner-toolkits"; import { toIntegrationCatalog } from "@/app/_lib/integration-catalog"; +import type { ToolkitWithDocsLink } from "@/app/_lib/toolkit-slug"; const INTEGRATIONS = "https://docs.arcade.dev/en/resources/integrations"; @@ -21,7 +21,6 @@ const makeGenerated = ( isPro: false, type: "arcade", docsLink: `${INTEGRATIONS}/social/${id.toLowerCase()}`, - isComingSoon: false, isHidden: false, ...metadata, }, @@ -39,9 +38,8 @@ const partner = { mcpUrl: "https://mcp.example.com/mcp", docsLink: `${INTEGRATIONS}/search/partner`, relativeDocsLink: "/en/resources/integrations/search/partner", - isComingSoon: false, isHidden: false, -} satisfies PartnerToolkit; +} satisfies ToolkitWithDocsLink & { mcpUrl: string }; describe("toIntegrationCatalog", () => { test("lists a published toolkit with the card fields from its generated file", () => { @@ -60,7 +58,6 @@ describe("toIntegrationCatalog", () => { relativeDocsLink: "/en/resources/integrations/social/twilio", type: "verified", category: "social", - isComingSoon: false, isHidden: false, }); }); diff --git a/tests/integration-index-links.test.ts b/tests/integration-index-links.test.ts index d52763f68..b1b00d0f3 100644 --- a/tests/integration-index-links.test.ts +++ b/tests/integration-index-links.test.ts @@ -51,7 +51,6 @@ const makeToolkit = ( type: "arcade", category, isHidden, - isComingSoon: false, isBYOC: false, isPro: false, docsLink: category @@ -65,50 +64,47 @@ describe("resolveIndexToolkits (logic)", () => { const validLinks = new Set([ `${INTEGRATIONS}/development/alpha-api`, // stands in for a generated route `${INTEGRATIONS}/search/gamma`, // stands in for an authored static page + `${INTEGRATIONS}/productivity/delta`, ]); const catalog: ToolkitWithDocsLink[] = [ makeToolkit("AlphaApi", "development", "alpha-api"), // real page - makeToolkit("Alpha", "development", "alpha"), // bare, no page, has "-api" sibling -> drop - makeToolkit("Beta", "social", "beta"), // no page, no "-api" sibling -> non-clickable - makeToolkit("Gamma", "search", "gamma"), // page exists -> clickable - makeToolkit("Delta", "productivity", "delta"), // duplicate A (no page) + makeToolkit("Alpha", "development", "alpha"), // no page -> drop + makeToolkit("Gamma", "search", "gamma"), // page exists -> kept + makeToolkit("Delta", "productivity", "delta"), // duplicate A makeToolkit("DeltaPrime", "productivity", "delta"), // duplicate B, same link -> collapse makeToolkit("Zeta", "social", "zeta", true), // hidden -> excluded ]; const resolved = resolveIndexToolkits(catalog, validLinks); const byId = (id: string) => resolved.find((toolkit) => toolkit.id === id); - const links = resolved.map(toIntegrationLink); - test("drops a bare entry when its '-api' sibling owns the page", () => { - expect(resolved.some((toolkit) => toolkit.id === "Alpha")).toBe(false); - expect(byId("AlphaApi")?.hasPage).toBe(true); + test("drops a toolkit without a page", () => { + expect(byId("Alpha")).toBeUndefined(); }); - test("keeps a toolkit without a page, but marks it non-clickable", () => { - expect(byId("Beta")?.hasPage).toBe(false); - }); - - test("keeps a toolkit whose page exists clickable", () => { - expect(byId("Gamma")?.hasPage).toBe(true); + test("keeps a toolkit whose page exists, with its link", () => { + expect(byId("AlphaApi")?.link).toBe( + `${INTEGRATIONS}/development/alpha-api` + ); + expect(byId("Gamma")?.link).toBe(`${INTEGRATIONS}/search/gamma`); }); test("excludes hidden toolkits entirely", () => { - expect(resolved.some((toolkit) => toolkit.id === "Zeta")).toBe(false); + expect(byId("Zeta")).toBeUndefined(); }); test("collapses entries that resolve to the same link", () => { expect( - links.filter((link) => link === `${INTEGRATIONS}/productivity/delta`) + resolved.filter( + (toolkit) => toolkit.link === `${INTEGRATIONS}/productivity/delta` + ) ).toHaveLength(1); - expect(links.length).toBe(new Set(links).size); }); - test("does not manufacture an others link for a missing category", () => { + test("drops a toolkit without a category", () => { const toolkit = makeToolkit("NoCategory", null, "no-category"); - const [resolvedToolkit] = resolveIndexToolkits([toolkit], validLinks); expect(toIntegrationLink(toolkit)).toBeNull(); - expect(resolvedToolkit?.hasPage).toBe(false); + expect(resolveIndexToolkits([toolkit], validLinks)).toEqual([]); }); }); @@ -125,25 +121,23 @@ describe("integrations index links (live data)", () => { resolved = resolveIndexToolkits(toolkits, validLinks); }, TIMEOUT); - test("no clickable card links to a page that does not exist", () => { - const brokenClickable = resolved - .filter((toolkit) => toolkit.hasPage) - .map((toolkit) => toIntegrationLink(toolkit)) - .filter((link): link is string => link !== null && !validLinks.has(link)); + test("every card links to a page that exists", () => { + const broken = resolved + .map((toolkit) => toolkit.link) + .filter((link) => !validLinks.has(link)); - expect(brokenClickable).toEqual([]); + expect(broken).toEqual([]); }); test("every rendered card resolves to a unique link (duplicates collapse)", () => { - const links = resolved.map((toolkit) => toIntegrationLink(toolkit)); + const links = resolved.map((toolkit) => toolkit.link); expect(links.length).toBe(new Set(links).size); }); - test("the index renders cards and at least one links to a real page", () => { - // Guards total breakage (empty catalog, or a validLinks computation that - // matches nothing so every card is non-clickable). + test("the index renders cards", () => { + // Guards total breakage: an empty catalog, or a validLinks computation + // that matches nothing and so drops every card. expect(resolved.length).toBeGreaterThan(0); - expect(resolved.some((toolkit) => toolkit.hasPage)).toBe(true); }); test("authored static integration pages are recognized as valid links", () => { diff --git a/tests/toolkit-data-cache.test.ts b/tests/toolkit-data-cache.test.ts index dfe7a46ff..8b3c6b618 100644 --- a/tests/toolkit-data-cache.test.ts +++ b/tests/toolkit-data-cache.test.ts @@ -28,7 +28,6 @@ const validToolkitJson = (id: string, docsSlug: string): string => isPro: false, type: "arcade", docsLink: `https://docs.arcade.dev/en/resources/integrations/development/${docsSlug}`, - isComingSoon: false, isHidden: false, }, auth: null, @@ -206,7 +205,6 @@ describe("readToolkitData cache keys distinguish slug variants", () => { type: "arcade", docsLink: "https://docs.arcade.dev/en/resources/integrations/productivity/notion", - isComingSoon: false, isHidden: false, }, auth: null, diff --git a/tests/toolkit-data.test.ts b/tests/toolkit-data.test.ts index 84decef5e..a5d7362fa 100644 --- a/tests/toolkit-data.test.ts +++ b/tests/toolkit-data.test.ts @@ -93,7 +93,6 @@ describe("toolkit data loader", () => { type: "arcade_starter", docsLink: "https://docs.arcade.dev/en/mcp-servers/development/posthog-api", - isComingSoon: false, isHidden: false, }, }; diff --git a/tests/toolkit-markdown.test.ts b/tests/toolkit-markdown.test.ts index e2a166be1..20e1a0465 100644 --- a/tests/toolkit-markdown.test.ts +++ b/tests/toolkit-markdown.test.ts @@ -20,7 +20,6 @@ const fixture: ToolkitData = { isPro: false, type: "arcade", docsLink: "", - isComingSoon: false, isHidden: false, }, auth: null, diff --git a/tests/toolkit-static-params.test.ts b/tests/toolkit-static-params.test.ts index 6b8e92b0a..dc36a0cc3 100644 --- a/tests/toolkit-static-params.test.ts +++ b/tests/toolkit-static-params.test.ts @@ -72,7 +72,6 @@ const writeToolkitData = async ( isPro: false, type: "arcade", docsLink: "", - isComingSoon: false, isHidden: false, ...toolkit.metadata, }, diff --git a/toolkit-docs-generator/src/diff/previous-output.ts b/toolkit-docs-generator/src/diff/previous-output.ts index bbfefcde8..8c03032a3 100644 --- a/toolkit-docs-generator/src/diff/previous-output.ts +++ b/toolkit-docs-generator/src/diff/previous-output.ts @@ -14,7 +14,6 @@ const DEFAULT_PREVIOUS_TOOLKIT_METADATA = { isPro: false, type: "arcade" as const, docsLink: "", - isComingSoon: false, isHidden: false, }; diff --git a/toolkit-docs-generator/src/merger/data-merger.ts b/toolkit-docs-generator/src/merger/data-merger.ts index 833d89407..fa2d0dcaa 100644 --- a/toolkit-docs-generator/src/merger/data-merger.ts +++ b/toolkit-docs-generator/src/merger/data-merger.ts @@ -519,7 +519,6 @@ const getDefaultMetadata = (toolkitId: string): MergedToolkitMetadata => isPro: false, type: "arcade", docsLink: `https://docs.arcade.dev/en/resources/integrations/${DEFAULT_METADATA_CATEGORY}/${getDefaultDocsSlug(toolkitId)}`, - isComingSoon: false, isHidden: true, }); @@ -535,7 +534,6 @@ const transformMetadata = ( isPro: metadata.isPro, type: metadata.type, docsLink: metadata.docsLink, - isComingSoon: metadata.isComingSoon, isHidden: metadata.isHidden, }); @@ -1175,7 +1173,6 @@ export class DataMerger { isPro: false, type: isApiSuffixedToolkitId(toolkitId) ? "arcade_starter" : "arcade", docsLink: "", - isComingSoon: false, isHidden: true, }, auth: null, diff --git a/toolkit-docs-generator/src/merger/metadata-freshness.ts b/toolkit-docs-generator/src/merger/metadata-freshness.ts index edfa19da2..595d75dcc 100644 --- a/toolkit-docs-generator/src/merger/metadata-freshness.ts +++ b/toolkit-docs-generator/src/merger/metadata-freshness.ts @@ -47,7 +47,6 @@ const METADATA_FIELDS: ReadonlyArray = [ "isPro", "type", "docsLink", - "isComingSoon", "isHidden", ]; diff --git a/toolkit-docs-generator/src/shared/toolkit-schemas.ts b/toolkit-docs-generator/src/shared/toolkit-schemas.ts index 42f5a5f66..54bb1b247 100644 --- a/toolkit-docs-generator/src/shared/toolkit-schemas.ts +++ b/toolkit-docs-generator/src/shared/toolkit-schemas.ts @@ -327,7 +327,6 @@ export const MergedToolkitMetadataSchema = z.object({ isPro: z.boolean(), type: ToolkitTypeSchema, docsLink: z.string(), - isComingSoon: z.boolean(), isHidden: z.boolean(), }); diff --git a/toolkit-docs-generator/src/sources/design-system-metadata.ts b/toolkit-docs-generator/src/sources/design-system-metadata.ts index 6d46d2f5c..cba9b52ec 100644 --- a/toolkit-docs-generator/src/sources/design-system-metadata.ts +++ b/toolkit-docs-generator/src/sources/design-system-metadata.ts @@ -29,7 +29,6 @@ const DesignSystemToolkitSchema = z.object({ iconUrl: z.string().optional(), isBYOC: z.boolean(), isPro: z.boolean(), - isComingSoon: z.boolean(), isHidden: z.boolean(), }); @@ -52,7 +51,6 @@ function toToolkitMetadata(entry: DesignSystemToolkit): ToolkitMetadata | null { isPro: entry.isPro, type: entry.type, docsLink: entry.docsLink, - isComingSoon: entry.isComingSoon, isHidden: entry.isHidden, }); diff --git a/toolkit-docs-generator/src/sources/public-catalog-schema.ts b/toolkit-docs-generator/src/sources/public-catalog-schema.ts index d2b120d8c..501c97d0a 100644 --- a/toolkit-docs-generator/src/sources/public-catalog-schema.ts +++ b/toolkit-docs-generator/src/sources/public-catalog-schema.ts @@ -52,7 +52,6 @@ const PublicCatalogToolkitMetadataSchema = z iconUrl: z.string().optional(), isBYOC: z.boolean(), isPro: z.boolean(), - isComingSoon: z.boolean(), isHidden: z.boolean(), }) .nullable() @@ -119,7 +118,6 @@ export const transformPublicToolkitMetadata = ( isPro: metadata.isPro, type: metadata.type, docsLink: metadata.docsLink, - isComingSoon: metadata.isComingSoon, isHidden: metadata.isHidden, }); diff --git a/toolkit-docs-generator/src/types/index.ts b/toolkit-docs-generator/src/types/index.ts index 0990a2f28..265d51a72 100644 --- a/toolkit-docs-generator/src/types/index.ts +++ b/toolkit-docs-generator/src/types/index.ts @@ -81,7 +81,6 @@ export const ToolkitMetadataSchema = z.object({ isPro: z.boolean(), type: ToolkitTypeSchema, docsLink: z.string(), - isComingSoon: z.boolean(), isHidden: z.boolean(), }); diff --git a/toolkit-docs-generator/tests/cli/generate-flow.test.ts b/toolkit-docs-generator/tests/cli/generate-flow.test.ts index dc9f06017..4a09cbea7 100644 --- a/toolkit-docs-generator/tests/cli/generate-flow.test.ts +++ b/toolkit-docs-generator/tests/cli/generate-flow.test.ts @@ -273,7 +273,6 @@ describe("assertRequireCompleteMetadata", () => { isPro: false, type: "arcade", docsLink: "https://docs.example.com", - isComingSoon: false, isHidden: false, }, }; @@ -299,7 +298,6 @@ describe("assertRequireCompleteMetadata", () => { isPro: false, type: "arcade", docsLink: "https://docs.example.com", - isComingSoon: false, isHidden: false, }, }; diff --git a/toolkit-docs-generator/tests/diff/previous-output.test.ts b/toolkit-docs-generator/tests/diff/previous-output.test.ts index a59004108..ca8e974ed 100644 --- a/toolkit-docs-generator/tests/diff/previous-output.test.ts +++ b/toolkit-docs-generator/tests/diff/previous-output.test.ts @@ -15,7 +15,6 @@ const createValidToolkit = (): MergedToolkit => ({ isPro: false, type: "arcade", docsLink: "https://docs.example.com/github", - isComingSoon: false, isHidden: false, }, auth: null, @@ -74,7 +73,6 @@ describe("parsePreviousToolkitForDiff", () => { isPro: false, type: "arcade", docsLink: "https://docs.example.com/jira", - isComingSoon: false, isHidden: false, }, auth: null, @@ -149,7 +147,6 @@ describe("parsePreviousToolkitForDiff", () => { isPro: false, type: "arcade", docsLink: "https://docs.example.com/github", - isComingSoon: false, isHidden: false, }, auth: null, @@ -216,7 +213,6 @@ describe("parsePreviousToolkitForDiff", () => { isPro: false, type: "arcade", docsLink: "https://docs.example.com/zoom", - isComingSoon: false, isHidden: false, }, auth: null, @@ -269,7 +265,6 @@ describe("parsePreviousToolkitForDiff", () => { isPro: false, type: "arcade", docsLink: "https://docs.example.com/notion", - isComingSoon: false, isHidden: false, }, auth: null, diff --git a/toolkit-docs-generator/tests/diff/summary-diff.test.ts b/toolkit-docs-generator/tests/diff/summary-diff.test.ts index 36d434fa0..857f76450 100644 --- a/toolkit-docs-generator/tests/diff/summary-diff.test.ts +++ b/toolkit-docs-generator/tests/diff/summary-diff.test.ts @@ -21,7 +21,6 @@ const createMergedToolkit = (id: string, version: string): MergedToolkit => ({ isPro: false, type: "arcade", docsLink: "https://docs.example.com", - isComingSoon: false, isHidden: false, }, auth: null, diff --git a/toolkit-docs-generator/tests/diff/toolkit-diff.test.ts b/toolkit-docs-generator/tests/diff/toolkit-diff.test.ts index 8f9dbf4ca..844a74d53 100644 --- a/toolkit-docs-generator/tests/diff/toolkit-diff.test.ts +++ b/toolkit-docs-generator/tests/diff/toolkit-diff.test.ts @@ -97,7 +97,6 @@ const createMergedToolkit = ( isPro: false, type: "arcade", docsLink: "https://docs.example.com/test", - isComingSoon: false, isHidden: false, }, auth: { @@ -124,7 +123,6 @@ const createToolkitMetadata = ( isPro: false, type: "arcade", docsLink: "https://docs.example.com/test", - isComingSoon: false, isHidden: false, ...overrides, }); diff --git a/toolkit-docs-generator/tests/fixtures/github-toolkit.json b/toolkit-docs-generator/tests/fixtures/github-toolkit.json index bf89775f7..d07dcb5e8 100644 --- a/toolkit-docs-generator/tests/fixtures/github-toolkit.json +++ b/toolkit-docs-generator/tests/fixtures/github-toolkit.json @@ -11,7 +11,6 @@ "isPro": false, "type": "arcade", "docsLink": "https://docs.arcade.dev/en/mcp-servers/development/github", - "isComingSoon": false, "isHidden": false }, "auth": { diff --git a/toolkit-docs-generator/tests/fixtures/metadata.json b/toolkit-docs-generator/tests/fixtures/metadata.json index ad2301af4..75220cd83 100644 --- a/toolkit-docs-generator/tests/fixtures/metadata.json +++ b/toolkit-docs-generator/tests/fixtures/metadata.json @@ -8,7 +8,6 @@ "isPro": false, "type": "arcade", "docsLink": "https://docs.arcade.dev/en/mcp-servers/development/github", - "isComingSoon": false, "isHidden": false }, "Slack": { @@ -20,7 +19,6 @@ "isPro": false, "type": "arcade", "docsLink": "https://docs.arcade.dev/en/mcp-servers/social/slack", - "isComingSoon": false, "isHidden": false }, "Gmail": { @@ -32,7 +30,6 @@ "isPro": false, "type": "arcade", "docsLink": "https://docs.arcade.dev/en/mcp-servers/productivity/gmail", - "isComingSoon": false, "isHidden": false }, "Jira": { @@ -44,7 +41,6 @@ "isPro": false, "type": "arcade", "docsLink": "https://docs.arcade.dev/en/mcp-servers/development/jira", - "isComingSoon": false, "isHidden": false }, "Stripe": { @@ -56,7 +52,6 @@ "isPro": true, "type": "arcade", "docsLink": "https://docs.arcade.dev/en/mcp-servers/payments/stripe", - "isComingSoon": false, "isHidden": false } } diff --git a/toolkit-docs-generator/tests/fixtures/slack-toolkit.json b/toolkit-docs-generator/tests/fixtures/slack-toolkit.json index ce3f5f4d3..e67177b8d 100644 --- a/toolkit-docs-generator/tests/fixtures/slack-toolkit.json +++ b/toolkit-docs-generator/tests/fixtures/slack-toolkit.json @@ -11,7 +11,6 @@ "isPro": false, "type": "arcade", "docsLink": "https://docs.arcade.dev/en/mcp-servers/social/slack", - "isComingSoon": false, "isHidden": false }, "auth": { diff --git a/toolkit-docs-generator/tests/llm/toolkit-summary-generator.test.ts b/toolkit-docs-generator/tests/llm/toolkit-summary-generator.test.ts index 211423bbf..8a6bb7b28 100644 --- a/toolkit-docs-generator/tests/llm/toolkit-summary-generator.test.ts +++ b/toolkit-docs-generator/tests/llm/toolkit-summary-generator.test.ts @@ -17,7 +17,6 @@ const createToolkit = ( isPro: false, type: "arcade", docsLink: "https://docs.arcade.dev/en/mcp-servers/development/github", - isComingSoon: false, isHidden: false, }, auth: { diff --git a/toolkit-docs-generator/tests/merger/data-merger.test.ts b/toolkit-docs-generator/tests/merger/data-merger.test.ts index 0d55d1664..e49ca4207 100644 --- a/toolkit-docs-generator/tests/merger/data-merger.test.ts +++ b/toolkit-docs-generator/tests/merger/data-merger.test.ts @@ -82,7 +82,6 @@ const createMetadata = ( isPro: false, type: "arcade", docsLink: "https://docs.example.com/test", - isComingSoon: false, isHidden: false, ...overrides, }); diff --git a/toolkit-docs-generator/tests/merger/metadata-freshness.test.ts b/toolkit-docs-generator/tests/merger/metadata-freshness.test.ts index 498bb0512..6c1445444 100644 --- a/toolkit-docs-generator/tests/merger/metadata-freshness.test.ts +++ b/toolkit-docs-generator/tests/merger/metadata-freshness.test.ts @@ -28,7 +28,6 @@ const createMetadata = ( isPro: false, type: "arcade", docsLink: "https://docs.arcade.dev/en/mcp-servers/development/github", - isComingSoon: false, isHidden: false, ...overrides, }); @@ -372,7 +371,6 @@ describe("mergeToolkit metadata freshness integration", () => { isPro: false, type: "arcade" as const, docsLink: "https://docs.arcade.dev/en/mcp-servers/sales/testkit", - isComingSoon: false, isHidden: false, }; @@ -389,7 +387,6 @@ describe("mergeToolkit metadata freshness integration", () => { isPro: false, type: "arcade" as const, docsLink: "https://docs.arcade.dev/en/mcp-servers/development/testkit", - isComingSoon: false, isHidden: false, }, auth: null, @@ -447,7 +444,6 @@ describe("mergeToolkit metadata freshness integration", () => { isPro: false, type: "arcade" as const, docsLink: "https://docs.arcade.dev/en/mcp-servers/development/testkit", - isComingSoon: false, isHidden: false, }; @@ -463,7 +459,6 @@ describe("mergeToolkit metadata freshness integration", () => { isPro: false, type: "arcade" as const, docsLink: "https://docs.arcade.dev/en/mcp-servers/development/testkit", - isComingSoon: false, isHidden: false, }, auth: null, diff --git a/toolkit-docs-generator/tests/merger/secret-coherence.test.ts b/toolkit-docs-generator/tests/merger/secret-coherence.test.ts index 43e6f768e..2241e2133 100644 --- a/toolkit-docs-generator/tests/merger/secret-coherence.test.ts +++ b/toolkit-docs-generator/tests/merger/secret-coherence.test.ts @@ -49,7 +49,6 @@ const toolkit = (overrides: Partial = {}): MergedToolkit => ({ isPro: false, type: "arcade", docsLink: "", - isComingSoon: false, isHidden: false, }, auth: null, diff --git a/toolkit-docs-generator/tests/scenarios/custom-sections-diff.test.ts b/toolkit-docs-generator/tests/scenarios/custom-sections-diff.test.ts index e8f05de31..5d6620280 100644 --- a/toolkit-docs-generator/tests/scenarios/custom-sections-diff.test.ts +++ b/toolkit-docs-generator/tests/scenarios/custom-sections-diff.test.ts @@ -15,7 +15,6 @@ const previousToolkit = (documentation = "old"): MergedToolkit => ({ isPro: false, type: "arcade", docsLink: "https://docs.example.com", - isComingSoon: false, isHidden: false, }, auth: null, diff --git a/toolkit-docs-generator/tests/scenarios/new-toolkit.test.ts b/toolkit-docs-generator/tests/scenarios/new-toolkit.test.ts index 16658a225..0172ea953 100644 --- a/toolkit-docs-generator/tests/scenarios/new-toolkit.test.ts +++ b/toolkit-docs-generator/tests/scenarios/new-toolkit.test.ts @@ -126,7 +126,6 @@ describe("Scenario: New toolkit is added", () => { isPro: false, type: "arcade", docsLink: "https://docs.example.com", - isComingSoon: false, isHidden: false, }; diff --git a/toolkit-docs-generator/tests/scenarios/removed-toolkit-cleanup.test.ts b/toolkit-docs-generator/tests/scenarios/removed-toolkit-cleanup.test.ts index 68c9811a3..037980f81 100644 --- a/toolkit-docs-generator/tests/scenarios/removed-toolkit-cleanup.test.ts +++ b/toolkit-docs-generator/tests/scenarios/removed-toolkit-cleanup.test.ts @@ -45,7 +45,6 @@ const makeToolkit = (id: string): MergedToolkit => ({ isPro: false, type: "arcade", docsLink: `https://docs.example.com/${id.toLowerCase()}`, - isComingSoon: false, isHidden: false, }, auth: null, diff --git a/toolkit-docs-generator/tests/scenarios/removed-toolkit.test.ts b/toolkit-docs-generator/tests/scenarios/removed-toolkit.test.ts index 1cce596f7..367310d70 100644 --- a/toolkit-docs-generator/tests/scenarios/removed-toolkit.test.ts +++ b/toolkit-docs-generator/tests/scenarios/removed-toolkit.test.ts @@ -25,7 +25,6 @@ const createMergedToolkit = (id: string): MergedToolkit => ({ isPro: false, type: "arcade", docsLink: "https://docs.example.com", - isComingSoon: false, isHidden: false, }, auth: null, diff --git a/toolkit-docs-generator/tests/scenarios/skip-unchanged.test.ts b/toolkit-docs-generator/tests/scenarios/skip-unchanged.test.ts index 5214500de..e4e45014d 100644 --- a/toolkit-docs-generator/tests/scenarios/skip-unchanged.test.ts +++ b/toolkit-docs-generator/tests/scenarios/skip-unchanged.test.ts @@ -40,7 +40,6 @@ const createMergedToolkit = (id: string, version = "1.0.0"): MergedToolkit => ({ isPro: false, type: "arcade", docsLink: "https://docs.example.com", - isComingSoon: false, isHidden: false, }, auth: null, @@ -159,7 +158,6 @@ describe("Scenario: Skip unchanged toolkits", () => { isPro: false, type: "arcade", docsLink: "https://docs.example.com", - isComingSoon: false, isHidden: false, }, auth: null, @@ -212,7 +210,6 @@ describe("Scenario: Skip unchanged toolkits", () => { isPro: false, type: "arcade", docsLink: "https://docs.example.com/databases/github", - isComingSoon: false, isHidden: false, }, }, diff --git a/toolkit-docs-generator/tests/scenarios/stale-version-tools.test.ts b/toolkit-docs-generator/tests/scenarios/stale-version-tools.test.ts index 72bb2e28f..86177c555 100644 --- a/toolkit-docs-generator/tests/scenarios/stale-version-tools.test.ts +++ b/toolkit-docs-generator/tests/scenarios/stale-version-tools.test.ts @@ -49,7 +49,6 @@ const createMergedToolkit = ( isPro: false, type: "arcade", docsLink: "https://docs.example.com", - isComingSoon: false, isHidden: false, }, auth: null, diff --git a/toolkit-docs-generator/tests/scripts/sync-toolkit-sidebar.test.ts b/toolkit-docs-generator/tests/scripts/sync-toolkit-sidebar.test.ts index 89efcc3db..1c5fc98b1 100644 --- a/toolkit-docs-generator/tests/scripts/sync-toolkit-sidebar.test.ts +++ b/toolkit-docs-generator/tests/scripts/sync-toolkit-sidebar.test.ts @@ -330,7 +330,6 @@ describe("buildToolkitInfoList", () => { isBYOC: false, isPro: false, type: "arcade", - isComingSoon: false, isHidden: false, }, }); diff --git a/toolkit-docs-generator/tests/sources/design-system-metadata.test.ts b/toolkit-docs-generator/tests/sources/design-system-metadata.test.ts index 9f33b8f51..46d9dc34b 100644 --- a/toolkit-docs-generator/tests/sources/design-system-metadata.test.ts +++ b/toolkit-docs-generator/tests/sources/design-system-metadata.test.ts @@ -13,7 +13,6 @@ const createMetadata = ( isPro: false, type: "arcade", docsLink: "https://docs.arcade.dev/en/mcp-servers/development/github", - isComingSoon: false, isHidden: false, ...overrides, }); diff --git a/toolkit-docs-generator/tests/sources/in-memory.test.ts b/toolkit-docs-generator/tests/sources/in-memory.test.ts index aca13dcd5..aaa25d07f 100644 --- a/toolkit-docs-generator/tests/sources/in-memory.test.ts +++ b/toolkit-docs-generator/tests/sources/in-memory.test.ts @@ -72,7 +72,6 @@ const createTestMetadata = ( isPro: false, type: "arcade", docsLink: "https://docs.arcade.dev/en/mcp-servers/development/github", - isComingSoon: false, isHidden: false, ...overrides, }); diff --git a/toolkit-docs-generator/tests/sources/public-catalog-api.test.ts b/toolkit-docs-generator/tests/sources/public-catalog-api.test.ts index 8775472ca..e38d716d4 100644 --- a/toolkit-docs-generator/tests/sources/public-catalog-api.test.ts +++ b/toolkit-docs-generator/tests/sources/public-catalog-api.test.ts @@ -18,7 +18,6 @@ const githubBranding = { publicIconUrl: "https://design-system.arcade.dev/icons/github.svg", isBYOC: false, isPro: false, - isComingSoon: false, isHidden: false, }; @@ -443,7 +442,6 @@ describe("PublicCatalogApiSource", () => { type: "arcade", docsLink: "https://docs.arcade.dev/en/resources/integrations/development/github", - isComingSoon: false, isHidden: false, }); expect(catalogCalls).toBe(1); @@ -532,4 +530,19 @@ describe("createPublicCatalogSources", () => { expect(data.tools).toHaveLength(1); expect(data.metadata?.label).toBe("GitHub"); }); + + it("keeps branding that carries fields the generator no longer reads", async () => { + const brandingWithRetiredField = { ...githubBranding, isComingSoon: false }; + const { toolkitDataSource } = createPublicCatalogSources({ + baseUrl: "https://experience.example/api", + fetchFn: stubCatalogFetch( + [{ ...githubCatalogEntry, metadata: brandingWithRetiredField }], + [githubTool] + ), + }); + + const data = await toolkitDataSource.fetchToolkitData("Github"); + + expect(data.metadata?.label).toBe("GitHub"); + }); }); diff --git a/toolkit-docs-generator/tests/sources/toolkit-data-source.test.ts b/toolkit-docs-generator/tests/sources/toolkit-data-source.test.ts index bfe1d4cef..cd680696e 100644 --- a/toolkit-docs-generator/tests/sources/toolkit-data-source.test.ts +++ b/toolkit-docs-generator/tests/sources/toolkit-data-source.test.ts @@ -43,7 +43,6 @@ const createMetadata = ( isPro: false, type: "arcade", docsLink: "https://docs.example.com/github", - isComingSoon: false, isHidden: false, ...overrides, });