import * as React from 'react'; import userEvent from '@testing-library/user-event'; import { render, screen, waitFor } from '../../../../test-utils/testing-library'; import APICache from '../../../../utils/Cache'; import PreviewDialog, { PreviewDialogProps } from '../PreviewDialog'; jest.mock('react-modal', () => { return jest.fn(({ children }) =>
{children}
); }); describe('elements/content-explorer/PreviewDialog', () => { const defaultProps = { appElement: document.body, apiHost: 'https://api.box.com', appHost: 'https://app.box.com', cache: new APICache(), canDownload: true, contentPreviewProps: {}, currentCollection: { items: [{ id: '1', type: 'file' }] }, isOpen: true, isTouch: false, item: { id: '1', type: 'file' }, onCancel: jest.fn(), onDownload: jest.fn(), onPreview: jest.fn(), parentElement: document.createElement('div'), previewLibraryVersion: '1.0.0', staticHost: 'https://static.box.com', staticPath: '/static', token: 'token', }; const renderComponent = (props?: Partial) => render(); test('renders', async () => { renderComponent(); expect(await screen.findByLabelText('Preview')).toBeInTheDocument(); expect(await screen.findByRole('button', { name: 'Close' })); }); test('calls onCancel when modal is closed', async () => { renderComponent(); const closeButton = screen.getByRole('button', { name: 'Close' }); await userEvent.click(closeButton); expect(defaultProps.onCancel).toHaveBeenCalled(); }); test('does not render when item is null', () => { const props = { item: null }; const { container } = renderComponent(props); expect(container.firstChild).toBeNull(); }); test('does not render when items are null', () => { const props = { currentCollection: { items: null } }; const { container } = renderComponent(props); expect(container.firstChild).toBeNull(); }); test('calls onPreview with cloned data on load', () => { const data = { id: '1', type: 'file' }; renderComponent(); waitFor(() => { expect(defaultProps.onPreview).toHaveBeenCalledWith(expect.objectContaining(data)); }); }); });