import { fireEvent, render, screen } from "@testing-library/react";
import { describe, expect, it, vi } from "vitest";
import ProfileModal from "../../components/ProfileModal";
// Mock Auth UserProfile component
vi.mock("../../components/Auth", () => ({
UserProfile: ({ onClose: _onClose }: { onClose: () => void }) => (
User Profile Content
),
}));
describe("ProfileModal", () => {
it("renders nothing when not open", () => {
const onClose = vi.fn();
render();
expect(screen.queryByTestId("user-profile")).not.toBeInTheDocument();
});
it("renders modal when open", () => {
const onClose = vi.fn();
render();
expect(screen.getByTestId("user-profile")).toBeInTheDocument();
});
it("renders close button", () => {
const onClose = vi.fn();
render();
const closeBtn = screen.getByText("×");
expect(closeBtn).toBeInTheDocument();
});
it("calls onClose when close button clicked", () => {
const onClose = vi.fn();
render();
const closeBtn = screen.getByText("×");
fireEvent.click(closeBtn);
expect(onClose).toHaveBeenCalledTimes(1);
});
it("calls onClose when overlay clicked", () => {
const onClose = vi.fn();
render();
const overlay = document.querySelector(".modal-overlay");
if (overlay) {
fireEvent.click(overlay);
}
expect(onClose).toHaveBeenCalledTimes(1);
});
it("does not call onClose when modal content clicked", () => {
const onClose = vi.fn();
render();
const content = document.querySelector(".modal-content");
if (content) {
fireEvent.click(content);
}
expect(onClose).not.toHaveBeenCalled();
});
});