import { describe, it, expect, vi } from "vitest"; import { render, screen } from "@testing-library/react"; import { ProviderIcon } from "../ProviderIcon"; // Mock lucide-react to avoid rendering actual SVGs in tests vi.mock("lucide-react", () => ({ Brain: ({ size }: { size?: number }) => , Sparkles: ({ size }: { size?: number }) => , Search: ({ size }: { size?: number }) => , Terminal: ({ size }: { size?: number }) => , Cpu: ({ size }: { size?: number }) => , })); describe("ProviderIcon", () => { it("renders Brain icon for anthropic provider", () => { render(); expect(screen.getByTestId("brain-icon")).toBeInTheDocument(); }); it("renders Sparkles icon for openai provider", () => { render(); expect(screen.getByTestId("sparkles-icon")).toBeInTheDocument(); }); it("renders Search icon for google provider", () => { render(); expect(screen.getByTestId("search-icon")).toBeInTheDocument(); }); it("renders Search icon for gemini provider", () => { render(); expect(screen.getByTestId("search-icon")).toBeInTheDocument(); }); it("renders Terminal icon for ollama provider", () => { render(); expect(screen.getByTestId("terminal-icon")).toBeInTheDocument(); }); it("renders Cpu icon as fallback for unknown providers", () => { render(); expect(screen.getByTestId("cpu-icon")).toBeInTheDocument(); }); it("renders Cpu icon as fallback for empty provider", () => { render(); expect(screen.getByTestId("cpu-icon")).toBeInTheDocument(); }); it("normalizes provider name to lowercase", () => { render(); expect(screen.getByTestId("brain-icon")).toBeInTheDocument(); }); it("applies provider-specific color for anthropic", () => { render(); const icon = screen.getByTestId("brain-icon").parentElement; expect(icon).toHaveStyle({ color: "#d4a27f" }); }); it("applies provider-specific color for openai", () => { render(); const icon = screen.getByTestId("sparkles-icon").parentElement; expect(icon).toHaveStyle({ color: "#10a37f" }); }); it("applies provider-specific color for google", () => { render(); const icon = screen.getByTestId("search-icon").parentElement; expect(icon).toHaveStyle({ color: "#4285f4" }); }); it("applies provider-specific color for ollama", () => { render(); const icon = screen.getByTestId("terminal-icon").parentElement; expect(icon).toHaveStyle({ color: "#fff" }); }); it("applies default color for unknown providers", () => { render(); const icon = screen.getByTestId("cpu-icon").parentElement; expect(icon).toHaveStyle({ color: "var(--text-muted)" }); }); it("sets data-provider attribute with normalized provider name", () => { render(); const icon = screen.getByTestId("brain-icon").parentElement; expect(icon).toHaveAttribute("data-provider", "anthropic"); }); it("uses sm size (16px) by default", () => { render(); expect(screen.getByTestId("brain-icon")).toHaveAttribute("data-size", "16"); }); it("uses sm size when explicitly specified", () => { render(); expect(screen.getByTestId("brain-icon")).toHaveAttribute("data-size", "16"); }); it("uses md size (20px) when specified", () => { render(); expect(screen.getByTestId("brain-icon")).toHaveAttribute("data-size", "20"); }); it("uses lg size (24px) when specified", () => { render(); expect(screen.getByTestId("brain-icon")).toHaveAttribute("data-size", "24"); }); it("renders with className provider-icon", () => { render(); const icon = screen.getByTestId("brain-icon").parentElement; expect(icon).toHaveClass("provider-icon"); }); });