import { fireEvent, render, screen } from "@testing-library/react";
import { beforeEach, describe, expect, it, vi } from "vitest";
import { CodexOAuthSection } from "@/components/providers/forms/CodexOAuthSection";
import { CopilotAuthSection } from "@/components/providers/forms/CopilotAuthSection";
const authMocks = vi.hoisted(() => ({
refetchCodex: vi.fn(),
refetchCopilot: vi.fn(),
}));
const failedStatus = (refetchStatus: () => void) => ({
accounts: [],
defaultAccountId: null,
migrationError: null,
isStatusSuccess: false,
isStatusError: true,
hasAnyAccount: false,
pollingState: "idle" as const,
deviceCode: null,
error: null,
isPolling: false,
isAddingAccount: false,
isRemovingAccount: false,
isSettingDefaultAccount: false,
addAccount: vi.fn(),
removeAccount: vi.fn(),
setDefaultAccount: vi.fn(),
cancelAuth: vi.fn(),
logout: vi.fn(),
refetchStatus,
});
vi.mock("@/components/providers/forms/hooks/useCodexOauth", () => ({
useCodexOauth: () => failedStatus(authMocks.refetchCodex),
}));
vi.mock("@/components/providers/forms/hooks/useCopilotAuth", () => ({
useCopilotAuth: () => failedStatus(authMocks.refetchCopilot),
}));
describe("managed auth status failures", () => {
beforeEach(() => {
authMocks.refetchCodex.mockResolvedValue(undefined);
authMocks.refetchCopilot.mockResolvedValue(undefined);
});
it("shows a retryable error instead of an empty Codex account selector", () => {
const onAccountSelect = vi.fn();
render(
,
);
expect(screen.getByRole("alert")).toHaveTextContent(
"无法加载 ChatGPT 账号状态,请重试。",
);
expect(screen.queryByRole("combobox")).not.toBeInTheDocument();
expect(onAccountSelect).not.toHaveBeenCalled();
fireEvent.click(screen.getByRole("button", { name: "重试" }));
expect(authMocks.refetchCodex).toHaveBeenCalledTimes(1);
});
it("shows a retryable error instead of an empty Copilot account selector", () => {
const onAccountSelect = vi.fn();
render(
,
);
expect(screen.getByRole("alert")).toHaveTextContent(
"无法加载 GitHub Copilot 账号状态,请重试。",
);
expect(screen.queryByRole("combobox")).not.toBeInTheDocument();
expect(onAccountSelect).not.toHaveBeenCalled();
fireEvent.click(screen.getByRole("button", { name: "重试" }));
expect(authMocks.refetchCopilot).toHaveBeenCalledTimes(1);
});
});