import { QueryClientProvider } from "@tanstack/react-query";
import { render, screen } from "@testing-library/react";
import { describe, expect, it, vi } from "vitest";
import { ProviderCard } from "@/components/providers/ProviderCard";
import type { Provider } from "@/types";
import { createTestQueryClient } from "../utils/testQueryClient";
vi.mock("@/components/providers/ProviderCardActions", () => ({
ProviderCardActions: () => null,
}));
vi.mock("@/components/ProviderIcon", () => ({ ProviderIcon: () => null }));
vi.mock("@/components/UsageFooter", () => ({ default: () => null }));
vi.mock("@/components/SubscriptionQuotaFooter", () => ({
default: ({ appId }: { appId: string }) => (
{appId}
),
}));
vi.mock("@/components/CopilotQuotaFooter", () => ({ default: () => null }));
vi.mock("@/components/CodexOauthQuotaFooter", () => ({ default: () => null }));
vi.mock("@/components/XaiOauthQuotaFooter", () => ({ default: () => null }));
vi.mock("@/components/AgyAccountQuotaFooter", () => ({
default: ({ accountId }: { accountId: string }) => (
{accountId}
),
}));
const platform = vi.hoisted(() => ({ mac: true }));
vi.mock("@/lib/platform", async (importOriginal) => ({
...(await importOriginal()),
isMac: () => platform.mac,
}));
vi.mock("@/lib/query/failover", () => ({
useProviderHealth: () => ({ data: undefined }),
}));
vi.mock("@/lib/query/queries", () => ({
useUsageQuery: () => ({ data: undefined }),
}));
function renderCard(provider: Provider, appId: "agy" | "gemini" = "agy") {
return render(
,
);
}
const relay: Provider = {
id: "relay",
name: "Relay",
settingsConfig: {
env: {
GEMINI_API_KEY: "k",
GOOGLE_GEMINI_BASE_URL: "https://relay.example.com",
},
config: { model: { name: "Gemini 3.1 Pro (High)" } },
},
};
describe("ProviderCard Antigravity model", () => {
it("shows the configured model instead of the endpoint", () => {
renderCard(relay);
expect(screen.getByText("Gemini 3.1 Pro (High)")).toBeInTheDocument();
expect(
screen.queryByText("https://relay.example.com"),
).not.toBeInTheDocument();
});
it("falls back to GEMINI_MODEL and leaves other apps alone", () => {
renderCard({
...relay,
settingsConfig: { env: { GEMINI_MODEL: "Gemini 3.8 Flash (Low)" } },
});
expect(screen.getByText("Gemini 3.8 Flash (Low)")).toBeInTheDocument();
});
it("keeps showing the endpoint for Gemini CLI cards", () => {
renderCard(relay, "gemini");
expect(screen.queryByText("Gemini 3.1 Pro (High)")).not.toBeInTheDocument();
});
});
describe("ProviderCard Antigravity official quota", () => {
const official: Provider = {
id: "official",
name: "Antigravity",
category: "official",
settingsConfig: { config: {} },
meta: {
usage_script: {
enabled: true,
language: "javascript",
code: "",
templateType: "official_subscription",
},
},
};
it("shows the signed-in quota once official usage is turned on", () => {
renderCard(official);
expect(screen.getByTestId("subscription-quota")).toHaveTextContent("agy");
});
it("stays hidden while usage is off", () => {
renderCard({
...official,
meta: {
usage_script: { ...official.meta!.usage_script!, enabled: false },
},
});
expect(screen.queryByTestId("subscription-quota")).not.toBeInTheDocument();
});
const bound: Provider = {
...official,
meta: {
...official.meta,
authBinding: {
source: "managed_account",
authProvider: "agy_oauth",
accountId: "sub-b",
},
},
};
it("shows the bound account's quota, not agy's current sign-in", () => {
platform.mac = true;
renderCard(bound);
expect(screen.getByTestId("agy-account-quota")).toHaveTextContent("sub-b");
expect(screen.queryByTestId("subscription-quota")).not.toBeInTheDocument();
});
it("ignores the binding where accounts cannot be switched", () => {
platform.mac = false;
renderCard(bound);
expect(screen.getByTestId("subscription-quota")).toHaveTextContent("agy");
expect(screen.queryByTestId("agy-account-quota")).not.toBeInTheDocument();
platform.mac = true;
});
});