import { fireEvent, render, screen } from "@testing-library/react";
import { describe, expect, it, vi } from "vitest";
import { Lightbox } from "../../components/Lightbox";
describe("Lightbox", () => {
const defaultProps = {
src: "/test-image.jpg",
alt: "Test Image",
onClose: vi.fn(),
};
beforeEach(() => {
vi.clearAllMocks();
});
it("renders image with correct src and alt", () => {
render();
const img = screen.getByAltText("Test Image");
expect(img).toBeInTheDocument();
expect(img).toHaveAttribute("src", "/test-image.jpg");
});
it("renders close button", () => {
render();
expect(screen.getByText("×")).toBeInTheDocument();
});
it("calls onClose when close button is clicked", () => {
const onClose = vi.fn();
render();
fireEvent.click(screen.getByText("×"));
expect(onClose).toHaveBeenCalled();
});
it("calls onClose when overlay is clicked", () => {
const onClose = vi.fn();
const { container } = render();
const overlay = container.querySelector(".lightbox-overlay");
fireEvent.click(overlay!);
expect(onClose).toHaveBeenCalled();
});
it("calls onClose when Escape key is pressed", () => {
const onClose = vi.fn();
const { container } = render();
const overlay = container.querySelector(".lightbox-overlay");
fireEvent.keyDown(overlay!, { key: "Escape" });
expect(onClose).toHaveBeenCalled();
});
it("does not call onClose when image is clicked", () => {
const onClose = vi.fn();
render();
fireEvent.click(screen.getByAltText("Test Image"));
expect(onClose).not.toHaveBeenCalled();
});
it("applies correct CSS classes", () => {
const { container } = render();
expect(container.querySelector(".lightbox-overlay")).toBeInTheDocument();
expect(container.querySelector(".lightbox-close")).toBeInTheDocument();
expect(container.querySelector(".lightbox-image")).toBeInTheDocument();
});
});