mirror of
https://github.com/tiennm99/litellm.git
synced 2026-08-11 00:25:15 +00:00
fixing ui build and tests
This commit is contained in:
@@ -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);
|
||||
});
|
||||
|
||||
|
||||
+11
-7
@@ -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(<AllModelsTab {...defaultProps} />);
|
||||
renderWithProviders(<AllModelsTab {...defaultProps} />);
|
||||
|
||||
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(<AllModelsTab {...defaultProps} />);
|
||||
renderWithProviders(<AllModelsTab {...defaultProps} />);
|
||||
|
||||
await waitFor(() => {
|
||||
expect(screen.getByText("gpt-4-clickable")).toBeInTheDocument();
|
||||
|
||||
+1
-1
@@ -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);
|
||||
});
|
||||
|
||||
@@ -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")!);
|
||||
});
|
||||
|
||||
@@ -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 () => {
|
||||
|
||||
@@ -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");
|
||||
});
|
||||
|
||||
|
||||
|
||||
@@ -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";
|
||||
|
||||
@@ -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[] }[],
|
||||
|
||||
@@ -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"],
|
||||
},
|
||||
|
||||
Reference in New Issue
Block a user