import * as React from 'react';
import userEvent from '@testing-library/user-event';
import { render, screen } from '../../../test-utils/testing-library';
import DeleteConfirmationDialog, { DeleteConfirmationDialogProps } from '../DeleteConfirmationDialog';
import { TYPE_FOLDER } from '../../../constants';
const mockItem = { type: 'pdf', name: 'Test File' };
const mockFolderItem = { type: TYPE_FOLDER, name: 'Test Folder' };
jest.mock('react-modal', () => {
return jest.fn(({ children }) =>
{children}
);
});
describe('elements/content-explorer/DeleteConfirmationDialog', () => {
const defaultProps = {
appElement: document.body,
errorCode: '',
isLoading: false,
isOpen: false,
item: mockItem,
onCancel: jest.fn(),
onDelete: jest.fn(),
parentElement: document.createElement('div'),
};
const renderComponent = (props: Partial) =>
render();
test('should render the dialog with file message', async () => {
renderComponent({ isOpen: true });
expect(await screen.findByText('Are you sure you want to delete Test File?')).toBeInTheDocument();
});
test('should render the dialog with folder message', async () => {
renderComponent({ isOpen: true, item: mockFolderItem });
expect(
await screen.findByText('Are you sure you want to delete Test Folder and all its contents?'),
).toBeInTheDocument();
});
test('should call onCancel when cancel button is clicked', async () => {
const mockOnCancel = jest.fn();
renderComponent({ isOpen: true, onCancel: mockOnCancel });
const cancelButton = screen.getByRole('button', { name: 'Cancel' });
await userEvent.click(cancelButton);
expect(mockOnCancel).toBeCalledTimes(1);
});
test('should call onDelete when delete button is clicked', async () => {
const mockOnDelete = jest.fn();
renderComponent({ isOpen: true, onDelete: mockOnDelete });
const deleteButton = screen.getByRole('button', { name: 'Delete' });
await userEvent.click(deleteButton);
expect(mockOnDelete).toBeCalledTimes(1);
});
test('should disable buttons when isLoading is true', () => {
renderComponent({ isOpen: true, isLoading: true });
const cancelButton = screen.getByRole('button', { name: 'Cancel' });
expect(cancelButton).toBeDisabled();
const loadingIndicator = screen.getByRole('status', { name: 'Loading' });
expect(loadingIndicator).toBeInTheDocument();
});
});