import {
DeleteConfirmationModal,
DeleteConfirmationModalProps
} from "@/core/ui/Modals/DeleteConfirmationModal";
import { render, screen } from '@testing-library/react';
import userEvent from "@testing-library/user-event";
describe("Test the DeleteConfirmationModal component", () => {
let props: DeleteConfirmationModalProps;
beforeEach(() => {
props = {
title: "Do you want to delete XYZ?",
subtitle: "the subtitle",
message: "deleting this will also delete this other thing",
isOpen: true,
closeFn: vi.fn(),
deleteFn: vi.fn()
};
});
test('Renders title and subtitle when openFn is true', () => {
// Act
render();
// Assert
expect(screen.getByText('Do you want to delete XYZ?')).toBeInTheDocument();
expect(screen.getByText('the subtitle')).toBeInTheDocument();
expect(screen.getByText('deleting this will also delete this other thing')).toBeInTheDocument();
});
test('Doesnt render anything when isOpen is false', () => {
// Arrange
props.isOpen = false;
// Act
render();
// Assert
expect(screen.queryByText('Do you want to delete XYZ?')).toBeNull();
expect(screen.queryByText('the subtitle')).toBeNull();
expect(screen.queryByText('deleting this will also delete this other thing')).toBeNull();
});
test('Correctly fires the delete function when the delete button is clicked', async () => {
// Arrange
const user = userEvent.setup();
// Act
render();
await user.click(screen.getByText('delete'));
// Assert
expect(props.deleteFn).toHaveBeenCalledTimes(1);
});
});