import { fireEvent, render, screen } from "@testing-library/react"; import { QueryClientProvider } from "@tanstack/react-query"; import type { ComponentProps } from "react"; import { describe, expect, it, vi } from "vitest"; import { ClaudeDesktopProviderForm } from "@/components/providers/forms/ClaudeDesktopProviderForm"; import { createTestQueryClient } from "../utils/testQueryClient"; vi.mock("@/lib/api/providers", () => ({ providersApi: { getClaudeDesktopDefaultRoutes: () => Promise.resolve([]), }, })); function renderForm( initialData: ComponentProps["initialData"], ) { const queryClient = createTestQueryClient(); return render( , ); } describe("ClaudeDesktopProviderForm", () => { it("编辑模型映射的菜单显示名时保持输入框焦点", () => { renderForm({ name: "Proxy Provider", settingsConfig: { env: { ANTHROPIC_BASE_URL: "https://api.example.com", ANTHROPIC_AUTH_TOKEN: "sk-test", }, }, meta: { claudeDesktopMode: "proxy", claudeDesktopModelRoutes: { "claude-old": { model: "upstream-old", }, }, }, }); const input = screen.getByPlaceholderText( "DeepSeek V4 Pro", ) as HTMLInputElement; input.focus(); fireEvent.change(input, { target: { value: "DeepSeek V4 Pro" } }); const currentInput = screen.getByPlaceholderText( "DeepSeek V4 Pro", ) as HTMLInputElement; expect(currentInput).toHaveValue("DeepSeek V4 Pro"); expect(document.activeElement).toBe(currentInput); }); it("编辑直连模型列表的模型 ID 时保持输入框焦点", () => { renderForm({ name: "Direct Provider", settingsConfig: { env: { ANTHROPIC_BASE_URL: "https://api.example.com", ANTHROPIC_AUTH_TOKEN: "sk-test", }, }, meta: { claudeDesktopMode: "direct", claudeDesktopModelRoutes: { "claude-old": { model: "claude-old", }, }, }, }); const input = screen.getByPlaceholderText( "claude-deepseek-chat", ) as HTMLInputElement; input.focus(); fireEvent.change(input, { target: { value: "claude-12345" } }); const currentInput = screen.getByPlaceholderText( "claude-deepseek-chat", ) as HTMLInputElement; expect(currentInput).toHaveValue("claude-12345"); expect(document.activeElement).toBe(currentInput); }); });