import { fireEvent, render, screen } from "@testing-library/react";
import { beforeEach, describe, expect, it, vi } from "vitest";
import ExportModal from "../../components/ExportModal";
describe("ExportModal", () => {
const defaultProps = {
isOpen: true,
onClose: vi.fn(),
onExport: vi.fn(),
exporting: false,
};
beforeEach(() => {
vi.clearAllMocks();
});
it("returns null when not open", () => {
const { container } = render();
expect(container.firstChild).toBeNull();
});
it("renders when open", () => {
render();
expect(screen.getByText(/exportImport\.exportOptions/i)).toBeInTheDocument();
});
it("calls onClose when close button is clicked", () => {
render();
fireEvent.click(screen.getByText("×"));
expect(defaultProps.onClose).toHaveBeenCalled();
});
it("calls onClose when overlay is clicked", () => {
const { container } = render();
const overlay = container.querySelector(".modal-overlay");
fireEvent.click(overlay!);
expect(defaultProps.onClose).toHaveBeenCalled();
});
it("renders export options", () => {
const { container } = render();
// Should have action card buttons
const actionCards = container.querySelectorAll(".action-card");
expect(actionCards.length).toBe(2);
});
it("calls onExport with true when export with images button clicked", () => {
const { container } = render();
const actionCards = container.querySelectorAll(".action-card");
fireEvent.click(actionCards[0]);
expect(defaultProps.onClose).toHaveBeenCalled();
expect(defaultProps.onExport).toHaveBeenCalledWith(true);
});
it("calls onExport with false when export data only button clicked", () => {
const { container } = render();
const actionCards = container.querySelectorAll(".action-card");
fireEvent.click(actionCards[1]);
expect(defaultProps.onClose).toHaveBeenCalled();
expect(defaultProps.onExport).toHaveBeenCalledWith(false);
});
it("disables buttons when exporting", () => {
const { container } = render();
const actionCards = container.querySelectorAll(".action-card");
actionCards.forEach((card) => {
expect(card).toBeDisabled();
});
});
it("renders cancel button", () => {
render();
expect(screen.getByText(/common\.close/i)).toBeInTheDocument();
});
it("calls onClose when cancel button is clicked", () => {
render();
fireEvent.click(screen.getByText(/common\.close/i));
expect(defaultProps.onClose).toHaveBeenCalled();
});
it("does not trigger export actions while exporting", () => {
const { container } = render();
const actionCards = container.querySelectorAll(".action-card");
fireEvent.click(actionCards[0]);
fireEvent.click(actionCards[1]);
expect(defaultProps.onExport).not.toHaveBeenCalled();
});
});