import * as React from 'react';
import userEvent from '@testing-library/user-event';
import { render, screen } from '../../../test-utils/testing-library';
import ShareDialog, { ShareDialogProps } from '../ShareDialog';
jest.mock('react-modal', () => {
return jest.fn(({ children }) =>
{children}
);
});
describe('elements/content-explorer/ShareDialog', () => {
const defaultProps = {
appElement: document.createElement('div'),
canSetShareAccess: true,
isLoading: false,
isOpen: true,
item: { shared_link: { url: 'http://example.com' } },
onCancel: jest.fn(),
onShareAccessChange: jest.fn(),
parentElement: document.createElement('div'),
};
const renderComponent = (props?: Partial) => render();
test('renders', async () => {
renderComponent();
expect(await screen.findByLabelText('Share')).toBeInTheDocument();
expect(await screen.findByRole('button', { name: 'Close' }));
});
test('calls onCancel when Close button is clicked', async () => {
renderComponent();
await userEvent.click(await screen.findByRole('button', { name: 'Close' }));
expect(defaultProps.onCancel).toHaveBeenCalled();
});
test('copies URL to clipboard when Copy button is clicked', async () => {
renderComponent();
const copyButton = await screen.findByRole('button', { name: 'Copy' });
document.execCommand = jest.fn();
await userEvent.click(copyButton);
expect(document.execCommand).toHaveBeenCalledWith('copy');
});
test('renders loading state when isLoading is true', async () => {
renderComponent({ isLoading: true });
expect(await screen.findByRole('status', { name: 'Loading' })).toBeInTheDocument();
});
test('renders with empty input when item has no shared link', async () => {
renderComponent({ item: { shared_link: null } });
expect(await screen.findByRole('textbox')).toHaveValue('None');
});
});