import { afterEach, describe, expect, it } from "vitest";
import { cleanup, render } from "@testing-library/react";
import { ConnectorBadge, ConnectorIcon, isDarkMark } from "./ConnectorIcon";
afterEach(cleanup);
describe("ConnectorIcon", () => {
it("renders the registry SVG and applies the brand color for a known logo id", () => {
const { container } = render(
,
);
const el = container.querySelector("[data-logo]") as HTMLElement;
expect(el).not.toBeNull();
expect(el.getAttribute("data-logo")).toBe("slack");
expect(el.querySelector("svg")).not.toBeNull();
// Brand color comes from the prop, set inline as the --brand custom property.
expect(el.style.getPropertyValue("--brand")).toBe("#611f69");
});
it("falls back to the plug glyph for an unknown id while keeping the provided color", () => {
const { container } = render(
,
);
const el = container.querySelector("[data-logo]") as HTMLElement;
expect(el.getAttribute("data-logo")).toBe("fallback");
expect(el.querySelector("svg")).not.toBeNull();
expect(el.style.getPropertyValue("--brand")).toBe("#123456");
});
it("uses the neutral fallback color when none is provided", () => {
const { container } = render();
const el = container.querySelector("[data-logo]") as HTMLElement;
expect(el.getAttribute("data-logo")).toBe("fallback");
expect(el.style.getPropertyValue("--brand")).toBe("#6b7280");
});
it("flags near-black marks so dark-mode CSS can compensate", () => {
// GitHub / Notion near-black → flagged; HubSpot orange → not.
expect(isDarkMark("#1f2328")).toBe(true);
expect(isDarkMark("#ff7a59")).toBe(false);
expect(isDarkMark("not-a-color")).toBe(false);
const dark = render(
,
);
expect(
(dark.container.querySelector(".connector-icon") as HTMLElement).getAttribute("data-dark-mark"),
).toBe("true");
const bright = render(
,
);
expect(
(bright.container.querySelector(".connector-icon") as HTMLElement).hasAttribute("data-dark-mark"),
).toBe(false);
});
});
describe("ConnectorBadge", () => {
it("renders a brand-tinted badge with the registry SVG for a known id", () => {
const { container } = render(
,
);
const badge = container.querySelector(".connector-badge") as HTMLElement;
expect(badge).not.toBeNull();
expect(badge.getAttribute("data-logo")).toBe("github");
expect(badge.style.getPropertyValue("--brand")).toBe("#1f2328");
expect(badge.querySelector("svg")).not.toBeNull();
});
});