diff --git a/ui/litellm-dashboard/src/app/(dashboard)/hooks/mcpServers/useMCPServers.test.ts b/ui/litellm-dashboard/src/app/(dashboard)/hooks/mcpServers/useMCPServers.test.ts
index 3681ffc747..ee03a0ab7c 100644
--- a/ui/litellm-dashboard/src/app/(dashboard)/hooks/mcpServers/useMCPServers.test.ts
+++ b/ui/litellm-dashboard/src/app/(dashboard)/hooks/mcpServers/useMCPServers.test.ts
@@ -74,7 +74,7 @@ describe("useMCPServers", () => {
expect(result.current.isSuccess).toBe(true);
});
- expect(networking.fetchMCPServers).toHaveBeenCalledWith(mockAccessToken);
+ expect(networking.fetchMCPServers).toHaveBeenCalledWith(mockAccessToken, undefined);
expect(result.current.data).toEqual(mockServers);
});
diff --git a/ui/litellm-dashboard/src/app/(dashboard)/models-and-endpoints/components/AllModelsTab.test.tsx b/ui/litellm-dashboard/src/app/(dashboard)/models-and-endpoints/components/AllModelsTab.test.tsx
index b7d4db2618..32ab83ea75 100644
--- a/ui/litellm-dashboard/src/app/(dashboard)/models-and-endpoints/components/AllModelsTab.test.tsx
+++ b/ui/litellm-dashboard/src/app/(dashboard)/models-and-endpoints/components/AllModelsTab.test.tsx
@@ -20,11 +20,15 @@ vi.mock("@/components/molecules/notifications_manager", () => ({
// Mock react-query
const mockInvalidateQueries = vi.fn();
-vi.mock("@tanstack/react-query", () => ({
- useQueryClient: () => ({
- invalidateQueries: mockInvalidateQueries,
- }),
-}));
+vi.mock("@tanstack/react-query", async (importOriginal) => {
+ const actual = await importOriginal() as any;
+ return {
+ ...actual,
+ useQueryClient: () => ({
+ invalidateQueries: mockInvalidateQueries,
+ }),
+ };
+});
// Mock the useModelsInfo hook
const mockUseModelsInfo = vi.fn(() => ({
@@ -553,7 +557,7 @@ describe("AllModelsTab", () => {
mockUseModelsInfo.mockReturnValue({ data: modelData, isLoading: false, error: null, refetch: vi.fn() });
- render();
+ renderWithProviders();
await waitFor(() => {
expect(screen.getByText("gpt-4-delete-test")).toBeInTheDocument();
@@ -597,7 +601,7 @@ describe("AllModelsTab", () => {
mockUseModelsInfo.mockReturnValue({ data: modelData, isLoading: false, error: null, refetch: vi.fn() });
- render();
+ renderWithProviders();
await waitFor(() => {
expect(screen.getByText("gpt-4-clickable")).toBeInTheDocument();
diff --git a/ui/litellm-dashboard/src/components/mcp_server_management/MCPToolPermissions.test.tsx b/ui/litellm-dashboard/src/components/mcp_server_management/MCPToolPermissions.test.tsx
index 07b19cc555..5b8611f4e9 100644
--- a/ui/litellm-dashboard/src/components/mcp_server_management/MCPToolPermissions.test.tsx
+++ b/ui/litellm-dashboard/src/components/mcp_server_management/MCPToolPermissions.test.tsx
@@ -72,7 +72,7 @@ describe("MCPToolPermissions", () => {
// Verify API calls
// Note: useMCPServers uses useAuthorized() internally, which returns "123" from global mock
- expect(networking.fetchMCPServers).toHaveBeenCalledWith("123");
+ expect(networking.fetchMCPServers).toHaveBeenCalledWith("123", undefined);
// listMCPTools uses the accessToken prop directly
expect(networking.listMCPTools).toHaveBeenCalledWith(mockAccessToken, mockServerId);
});
diff --git a/ui/litellm-dashboard/src/components/mcp_tools/create_mcp_server.test.tsx b/ui/litellm-dashboard/src/components/mcp_tools/create_mcp_server.test.tsx
index 28c3b75c3a..d49c49446b 100644
--- a/ui/litellm-dashboard/src/components/mcp_tools/create_mcp_server.test.tsx
+++ b/ui/litellm-dashboard/src/components/mcp_tools/create_mcp_server.test.tsx
@@ -53,8 +53,24 @@ const getServerNameInput = () => document.getElementById("server_name") as HTMLI
/** Helper: select a dropdown option by opening a select near a label and clicking an option */
async function selectAntOption(labelText: string, optionText: string) {
const label = screen.getByText(labelText);
- const formItem = label.closest(".ant-form-item")!;
- const select = formItem.querySelector(".ant-select");
+ // First try to find a .ant-form-item ancestor (standard form fields)
+ let select: Element | null = null;
+ const formItem = label.closest(".ant-form-item");
+ if (formItem) {
+ select = formItem.querySelector(".ant-select");
+ }
+ // If not found, try .ant-collapse-content ancestor (auth type is inside a Collapse panel)
+ if (!select) {
+ const collapseContent = label.closest(".ant-collapse-item");
+ if (collapseContent) {
+ select = collapseContent.querySelector(".ant-select");
+ }
+ }
+ // Fallback: look for a sibling or nearby select
+ if (!select) {
+ const parent = label.closest("div");
+ select = parent?.querySelector(".ant-select") ?? null;
+ }
act(() => {
fireEvent.mouseDown(select!.querySelector(".ant-select-selector")!);
});
diff --git a/ui/litellm-dashboard/src/components/mcp_tools/mcp_servers.test.tsx b/ui/litellm-dashboard/src/components/mcp_tools/mcp_servers.test.tsx
index 0ca3d69895..4d67456b78 100644
--- a/ui/litellm-dashboard/src/components/mcp_tools/mcp_servers.test.tsx
+++ b/ui/litellm-dashboard/src/components/mcp_tools/mcp_servers.test.tsx
@@ -126,7 +126,7 @@ describe("MCPServers", () => {
// Verify the API was called
// Note: useMCPServers uses useAuthorized() internally, which returns "123" from global mock
- expect(networking.fetchMCPServers).toHaveBeenCalledWith("123");
+ expect(networking.fetchMCPServers).toHaveBeenCalledWith("123", undefined);
});
it("should fetch and merge health status for servers", async () => {
diff --git a/ui/litellm-dashboard/src/components/molecules/models/columns.test.tsx b/ui/litellm-dashboard/src/components/molecules/models/columns.test.tsx
index 0a8dacbadd..b20c85ecb3 100644
--- a/ui/litellm-dashboard/src/components/molecules/models/columns.test.tsx
+++ b/ui/litellm-dashboard/src/components/molecules/models/columns.test.tsx
@@ -612,18 +612,19 @@ describe("columns", () => {
it("should allow Admin to delete DB models", async () => {
const user = userEvent.setup();
- const setSelectedModelId = vi.fn();
+ const onDeleteClick = vi.fn();
const cols = columns(
"Admin",
"admin-user",
defaultProps.premiumUser,
- setSelectedModelId,
+ defaultProps.setSelectedModelId,
defaultProps.setSelectedTeamId,
defaultProps.getDisplayModelName,
defaultProps.handleEditClick,
defaultProps.handleRefreshClick,
defaultProps.expandedRows,
defaultProps.setExpandedRows,
+ onDeleteClick,
);
const model = createMockModel({
@@ -639,23 +640,24 @@ describe("columns", () => {
expect(deleteButton).toBeInTheDocument();
await user.click(deleteButton);
- expect(setSelectedModelId).toHaveBeenCalledWith("deletable-model");
+ expect(onDeleteClick).toHaveBeenCalledWith("deletable-model");
});
it("should allow model creator to delete their own DB models", async () => {
const user = userEvent.setup();
- const setSelectedModelId = vi.fn();
+ const onDeleteClick = vi.fn();
const cols = columns(
"User",
"model-creator",
defaultProps.premiumUser,
- setSelectedModelId,
+ defaultProps.setSelectedModelId,
defaultProps.setSelectedTeamId,
defaultProps.getDisplayModelName,
defaultProps.handleEditClick,
defaultProps.handleRefreshClick,
defaultProps.expandedRows,
defaultProps.setExpandedRows,
+ onDeleteClick,
);
const model = createMockModel({
@@ -672,7 +674,7 @@ describe("columns", () => {
expect(deleteButton).toBeInTheDocument();
await user.click(deleteButton);
- expect(setSelectedModelId).toHaveBeenCalledWith("user-model");
+ expect(onDeleteClick).toHaveBeenCalledWith("user-model");
});
diff --git a/ui/litellm-dashboard/src/components/playground/chat_ui/ChatUI.tsx b/ui/litellm-dashboard/src/components/playground/chat_ui/ChatUI.tsx
index 9936f34452..eba9d37669 100644
--- a/ui/litellm-dashboard/src/components/playground/chat_ui/ChatUI.tsx
+++ b/ui/litellm-dashboard/src/components/playground/chat_ui/ChatUI.tsx
@@ -60,7 +60,8 @@ import CodeInterpreterOutput from "./CodeInterpreterOutput";
import CodeInterpreterTool from "./CodeInterpreterTool";
import { generateCodeSnippet } from "./CodeSnippets";
import EndpointSelector from "./EndpointSelector";
-import MCPEventsDisplay, { MCPEvent } from "./MCPEventsDisplay";
+import MCPEventsDisplay from "./MCPEventsDisplay";
+import type { MCPEvent } from "../../mcp_tools/types";
import { EndpointType, getEndpointType } from "./mode_endpoint_mapping";
import ReasoningContent from "./ReasoningContent";
import ResponseMetrics, { TokenUsage } from "./ResponseMetrics";
diff --git a/ui/litellm-dashboard/src/components/playground/llm_calls/chat_completion.tsx b/ui/litellm-dashboard/src/components/playground/llm_calls/chat_completion.tsx
index 048ea9bfa1..3197c9409c 100644
--- a/ui/litellm-dashboard/src/components/playground/llm_calls/chat_completion.tsx
+++ b/ui/litellm-dashboard/src/components/playground/llm_calls/chat_completion.tsx
@@ -3,8 +3,7 @@ import { ChatCompletionMessageParam } from "openai/resources/chat/completions";
import { TokenUsage } from "../chat_ui/ResponseMetrics";
import { VectorStoreSearchResponse } from "../chat_ui/types";
import { getProxyBaseUrl } from "@/components/networking";
-import { MCPServer } from "../../mcp_tools/types";
-import { MCPEvent } from "../chat_ui/MCPEventsDisplay";
+import { MCPServer, type MCPEvent } from "../../mcp_tools/types";
export async function makeOpenAIChatCompletionRequest(
chatHistory: { role: string; content: string | any[] }[],
diff --git a/ui/litellm-dashboard/src/components/playground/llm_calls/responses_api.test.tsx b/ui/litellm-dashboard/src/components/playground/llm_calls/responses_api.test.tsx
index f14ac52b84..77ff5fd00b 100644
--- a/ui/litellm-dashboard/src/components/playground/llm_calls/responses_api.test.tsx
+++ b/ui/litellm-dashboard/src/components/playground/llm_calls/responses_api.test.tsx
@@ -127,15 +127,15 @@ describe("responses_api", () => {
expect(callArgs.tools).toEqual([
{
type: "mcp",
- server_label: "litellm",
- server_url: "litellm_proxy/mcp/alpha",
+ server_label: "Alpha",
+ server_url: "https://example.com/mcp/Alpha",
require_approval: "never",
allowed_tools: ["toolA"],
},
{
type: "mcp",
- server_label: "litellm",
- server_url: "litellm_proxy/mcp/Beta",
+ server_label: "Beta",
+ server_url: "https://example.com/mcp/Beta",
require_approval: "never",
allowed_tools: ["toolB", "toolC"],
},