diff --git a/ui/litellm-dashboard/src/components/search_tools/SearchToolSelector.test.tsx b/ui/litellm-dashboard/src/components/search_tools/SearchToolSelector.test.tsx new file mode 100644 index 00000000000..860c8bee397 --- /dev/null +++ b/ui/litellm-dashboard/src/components/search_tools/SearchToolSelector.test.tsx @@ -0,0 +1,34 @@ +import userEvent from "@testing-library/user-event"; +import { beforeEach, describe, expect, it, vi } from "vitest"; +import { renderWithProviders, screen } from "../../../tests/test-utils"; +import { fetchSearchTools } from "../networking"; +import SearchToolSelector from "./SearchToolSelector"; + +vi.mock("../networking", () => ({ + fetchSearchTools: vi.fn(), +})); + +describe("SearchToolSelector", () => { + beforeEach(() => { + vi.clearAllMocks(); + vi.mocked(fetchSearchTools).mockResolvedValue({ + search_tools: [{ search_tool_name: "search-one" }, { search_tool_name: "search-two" }], + }); + }); + + it("should render", () => { + renderWithProviders(); + + expect(screen.getByRole("combobox")).toBeInTheDocument(); + }); + + it("should load and display available search tools", async () => { + const user = userEvent.setup(); + renderWithProviders(); + + await user.click(screen.getByRole("combobox")); + + expect(await screen.findByRole("option", { name: "search-one" })).toBeInTheDocument(); + expect(screen.getByRole("option", { name: "search-two" })).toBeInTheDocument(); + }); +}); diff --git a/ui/litellm-dashboard/src/components/team/MyUserTab.test.tsx b/ui/litellm-dashboard/src/components/team/MyUserTab.test.tsx new file mode 100644 index 00000000000..d9ba3d82230 --- /dev/null +++ b/ui/litellm-dashboard/src/components/team/MyUserTab.test.tsx @@ -0,0 +1,49 @@ +import { beforeEach, describe, expect, it, vi } from "vitest"; +import { renderWithProviders, screen } from "../../../tests/test-utils"; +import MyUserTab from "./MyUserTab"; +import { useMyTeamMember } from "./useMyTeamMember"; + +vi.mock("./useMyTeamMember", () => ({ + useMyTeamMember: vi.fn(), +})); + +describe("MyUserTab", () => { + beforeEach(() => { + vi.clearAllMocks(); + }); + + it("should render", () => { + vi.mocked(useMyTeamMember).mockReturnValue({ isLoading: true } as ReturnType); + + renderWithProviders(); + + expect(screen.getByText("Loading your membership info…")).toBeInTheDocument(); + }); + + it("should display the current member budget and model scope", () => { + vi.mocked(useMyTeamMember).mockReturnValue({ + data: { + user_id: "user-1", + user_email: "member@example.com", + team_id: "team-1", + role: "admin", + spend: 12.5, + total_spend: 30, + litellm_budget_table: { + max_budget: 100, + tpm_limit: 1000, + rpm_limit: 10, + allowed_models: ["model-one"], + }, + }, + isLoading: false, + error: null, + } as ReturnType); + + renderWithProviders(); + + expect(screen.getByText("member@example.com")).toBeInTheDocument(); + expect(screen.getByText("model-one")).toBeInTheDocument(); + expect(screen.getByText("TPM: 1,000")).toBeInTheDocument(); + }); +});