litellm/ui/litellm-dashboard/src/components/Projects/ProjectModals/CreateProjectModal.test.tsx
yuneng-jiang e34960b3f0 [Test] UI - Projects: add Vitest unit tests for all Projects components
Adds 77 tests across 8 files covering ProjectsPage, ProjectDetailsPage,
ProjectKeysSection, ProjectKeysTable, CreateProjectModal, EditProjectModal,
ProjectBaseForm, and projectFormUtils.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-03-04 17:26:11 -08:00

55 lines
2.1 KiB
TypeScript

import { describe, it, expect, vi, beforeEach } from "vitest";
import userEvent from "@testing-library/user-event";
import { renderWithProviders, screen } from "../../../../tests/test-utils";
import { CreateProjectModal } from "./CreateProjectModal";
const mockMutate = vi.fn();
vi.mock("@/app/(dashboard)/hooks/projects/useCreateProject", () => ({
useCreateProject: () => ({ mutate: mockMutate, isPending: false }),
}));
// Mock the form to keep tests focused on modal behavior
vi.mock("./ProjectBaseForm", () => ({
ProjectBaseForm: () => <div data-testid="project-base-form" />,
}));
describe("CreateProjectModal", () => {
const onClose = vi.fn();
beforeEach(() => {
vi.clearAllMocks();
});
it("should not render modal content when closed", () => {
renderWithProviders(<CreateProjectModal isOpen={false} onClose={onClose} />);
expect(screen.queryByText("Create New Project")).not.toBeInTheDocument();
});
it("should render the modal when open", () => {
renderWithProviders(<CreateProjectModal isOpen={true} onClose={onClose} />);
expect(screen.getByText("Create New Project")).toBeInTheDocument();
});
it("should show a 'Create Project' submit button", () => {
renderWithProviders(<CreateProjectModal isOpen={true} onClose={onClose} />);
expect(screen.getByRole("button", { name: /create project/i })).toBeInTheDocument();
});
it("should show a 'Cancel' button", () => {
renderWithProviders(<CreateProjectModal isOpen={true} onClose={onClose} />);
expect(screen.getByRole("button", { name: /cancel/i })).toBeInTheDocument();
});
it("should call onClose when the Cancel button is clicked", async () => {
const user = userEvent.setup();
renderWithProviders(<CreateProjectModal isOpen={true} onClose={onClose} />);
await user.click(screen.getByRole("button", { name: /cancel/i }));
expect(onClose).toHaveBeenCalledOnce();
});
it("should render the project form inside the modal", () => {
renderWithProviders(<CreateProjectModal isOpen={true} onClose={onClose} />);
expect(screen.getByTestId("project-base-form")).toBeInTheDocument();
});
});