diff --git a/src/components/CriterionContainer/ReviewCriterion.test.jsx b/src/components/CriterionContainer/ReviewCriterion.test.jsx
index e8885cc4..2e374115 100644
--- a/src/components/CriterionContainer/ReviewCriterion.test.jsx
+++ b/src/components/CriterionContainer/ReviewCriterion.test.jsx
@@ -1,7 +1,24 @@
-import { shallow } from '@edx/react-unit-test-utils';
+import React from 'react';
+import { render, screen } from '@testing-library/react';
+import '@testing-library/jest-dom';
+import { IntlProvider } from '@edx/frontend-platform/i18n';
import ReviewCriterion from './ReviewCriterion';
+jest.unmock('@openedx/paragon');
+jest.unmock('react');
+jest.unmock('@edx/frontend-platform/i18n');
+
+const mockMessages = {
+ 'frontend-app-ora.RadioCriterion.optionPoints': '{points} points',
+};
+
+const withIntl = (component) => (
+
+ {component}
+
+);
+
describe('', () => {
const criterion = {
options: [
@@ -18,17 +35,18 @@ describe('', () => {
],
};
- it('renders correctly', () => {
- const wrapper = shallow();
- expect(wrapper.snapshot).toMatchSnapshot();
+ it('renders options with labels and points', () => {
+ render(withIntl());
- expect(wrapper.instance.findByType('Form.Label').length).toBe(2);
+ expect(screen.getByText('Option 1')).toBeInTheDocument();
+ expect(screen.getByText('Option 2')).toBeInTheDocument();
+ expect(screen.getByText('1 points')).toBeInTheDocument();
+ expect(screen.getByText('2 points')).toBeInTheDocument();
});
- it('renders correctly with no options', () => {
- const wrapper = shallow();
- expect(wrapper.snapshot).toMatchSnapshot();
+ it('renders with no options', () => {
+ render(withIntl());
- expect(wrapper.instance.findByType('Form.Label').length).toBe(0);
+ expect(screen.queryByText(/points/)).not.toBeInTheDocument();
});
});
diff --git a/src/components/CriterionContainer/__snapshots__/ReviewCriterion.test.jsx.snap b/src/components/CriterionContainer/__snapshots__/ReviewCriterion.test.jsx.snap
deleted file mode 100644
index d1af26a1..00000000
--- a/src/components/CriterionContainer/__snapshots__/ReviewCriterion.test.jsx.snap
+++ /dev/null
@@ -1,80 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[` renders correctly 1`] = `
-
-
-
-`;
-
-exports[` renders correctly with no options 1`] = `
-
-
-
-`;
diff --git a/src/components/FilePreview/components/FileRenderer/BaseRenderers/PDFRenderer.test.jsx b/src/components/FilePreview/components/FileRenderer/BaseRenderers/PDFRenderer.test.jsx
index d2daf081..1227a511 100644
--- a/src/components/FilePreview/components/FileRenderer/BaseRenderers/PDFRenderer.test.jsx
+++ b/src/components/FilePreview/components/FileRenderer/BaseRenderers/PDFRenderer.test.jsx
@@ -1,67 +1,211 @@
import React from 'react';
-import { shallow } from '@edx/react-unit-test-utils';
+import { render, screen } from '@testing-library/react';
+import userEvent from '@testing-library/user-event';
+import '@testing-library/jest-dom';
import PDFRenderer from './PDFRenderer';
-
import { usePDFRendererData } from './pdfHooks';
+/* eslint-disable react/prop-types */
+
+jest.unmock('@openedx/paragon');
+jest.unmock('react');
+jest.unmock('@edx/frontend-platform/i18n');
+
jest.mock('react-pdf', () => ({
pdfjs: { GlobalWorkerOptions: {} },
- Document: () => 'Document',
- Page: () => 'Page',
+ Document: ({ children, onLoadSuccess, onLoadError }) => (
+
+ {children}
+
+ ),
+ Page: ({ pageNumber, onLoadSuccess }) => (
+
+ Page {pageNumber}
+
+ ),
}));
jest.mock('./pdfHooks', () => ({
usePDFRendererData: jest.fn(),
}));
-describe('PDF Renderer Component', () => {
- const props = {
- url: 'some_url.pdf',
- onError: jest.fn().mockName('this.props.onError'),
- onSuccess: jest.fn().mockName('this.props.onSuccess'),
+describe('PDFRenderer', () => {
+ const defaultProps = {
+ url: 'test-document.pdf',
+ onError: jest.fn(),
+ onSuccess: jest.fn(),
};
- const hookProps = {
+
+ const defaultHookReturnValue = {
pageNumber: 1,
numPages: 10,
- relativeHeight: 200,
- wrapperRef: { current: 'wrapperRef' },
- onDocumentLoadSuccess: jest.fn().mockName('onDocumentLoadSuccess'),
- onLoadPageSuccess: jest.fn().mockName('onLoadPageSuccess'),
- onDocumentLoadError: jest.fn().mockName('onDocumentLoadError'),
- onInputPageChange: jest.fn().mockName('onInputPageChange'),
- onNextPageButtonClick: jest.fn().mockName('onNextPageButtonClick'),
- onPrevPageButtonClick: jest.fn().mockName('onPrevPageButtonClick'),
+ relativeHeight: 400,
+ wrapperRef: { current: null },
+ onDocumentLoadSuccess: jest.fn(),
+ onLoadPageSuccess: jest.fn(),
+ onDocumentLoadError: jest.fn(),
+ onInputPageChange: jest.fn(),
+ onNextPageButtonClick: jest.fn(),
+ onPrevPageButtonClick: jest.fn(),
hasNext: true,
- hasPref: false,
+ hasPrev: false,
};
beforeEach(() => {
jest.clearAllMocks();
+ usePDFRendererData.mockReturnValue(defaultHookReturnValue);
});
- describe('snapshots', () => {
- test('first page, prev is disabled', () => {
- usePDFRendererData.mockReturnValue(hookProps);
- const wrapper = shallow();
- expect(wrapper.snapshot).toMatchSnapshot();
-
- const [prevButton, nextButton] = wrapper.instance.findByType('IconButton');
- expect(prevButton.props.disabled).toBe(true);
- expect(nextButton.props.disabled).toBe(false);
+
+ describe('navigation controls', () => {
+ it('disables previous button on first page', () => {
+ render();
+
+ const prevButton = screen.getByRole('button', {
+ name: /previous pdf page/i,
+ });
+ const nextButton = screen.getByRole('button', { name: /next pdf page/i });
+
+ expect(prevButton).toBeDisabled();
+ expect(nextButton).toBeEnabled();
});
- test('on last page, next is disabled', () => {
+
+ it('disables next button on last page', () => {
usePDFRendererData.mockReturnValue({
- ...hookProps,
- pageNumber: hookProps.numPages,
+ ...defaultHookReturnValue,
+ pageNumber: 10,
hasNext: false,
hasPrev: true,
});
- const wrapper = shallow();
- expect(wrapper.snapshot).toMatchSnapshot();
- const [prevButton, nextButton] = wrapper.instance.findByType('IconButton');
- expect(prevButton.props.disabled).toBe(false);
- expect(nextButton.props.disabled).toBe(true);
+ render();
+
+ const prevButton = screen.getByRole('button', {
+ name: /previous pdf page/i,
+ });
+ const nextButton = screen.getByRole('button', { name: /next pdf page/i });
+
+ expect(prevButton).toBeEnabled();
+ expect(nextButton).toBeDisabled();
+ });
+
+ it('enables both buttons on middle page', () => {
+ usePDFRendererData.mockReturnValue({
+ ...defaultHookReturnValue,
+ pageNumber: 5,
+ hasNext: true,
+ hasPrev: true,
+ });
+
+ render();
+
+ const prevButton = screen.getByRole('button', {
+ name: /previous pdf page/i,
+ });
+ const nextButton = screen.getByRole('button', { name: /next pdf page/i });
+
+ expect(prevButton).toBeEnabled();
+ expect(nextButton).toBeEnabled();
+ });
+ });
+
+ describe('page number input', () => {
+ it('displays current page number and total pages', () => {
+ render();
+
+ const pageInput = screen.getByRole('spinbutton');
+ expect(pageInput).toHaveValue(1);
+ expect(screen.getByText('of 10')).toBeInTheDocument();
+ });
+
+ it('calls onInputPageChange when page number is changed', async () => {
+ const user = userEvent.setup();
+ const mockOnInputPageChange = jest.fn();
+
+ usePDFRendererData.mockReturnValue({
+ ...defaultHookReturnValue,
+ onInputPageChange: mockOnInputPageChange,
+ });
+
+ render();
+
+ const pageInput = screen.getByRole('spinbutton');
+ await user.clear(pageInput);
+ await user.type(pageInput, '5');
+
+ expect(mockOnInputPageChange).toHaveBeenCalled();
+ });
+ });
+
+ describe('button interactions', () => {
+ it('calls onPrevPageButtonClick when previous button is clicked', async () => {
+ const user = userEvent.setup();
+ const mockOnPrevPageButtonClick = jest.fn();
+
+ usePDFRendererData.mockReturnValue({
+ ...defaultHookReturnValue,
+ pageNumber: 5,
+ hasPrev: true,
+ onPrevPageButtonClick: mockOnPrevPageButtonClick,
+ });
+
+ render();
+
+ const prevButton = screen.getByRole('button', {
+ name: /previous pdf page/i,
+ });
+ await user.click(prevButton);
+
+ expect(mockOnPrevPageButtonClick).toHaveBeenCalledTimes(1);
+ });
+
+ it('calls onNextPageButtonClick when next button is clicked', async () => {
+ const user = userEvent.setup();
+ const mockOnNextPageButtonClick = jest.fn();
+
+ usePDFRendererData.mockReturnValue({
+ ...defaultHookReturnValue,
+ onNextPageButtonClick: mockOnNextPageButtonClick,
+ });
+
+ render();
+
+ const nextButton = screen.getByRole('button', { name: /next pdf page/i });
+ await user.click(nextButton);
+
+ expect(mockOnNextPageButtonClick).toHaveBeenCalledTimes(1);
+ });
+ });
+
+ describe('PDF document rendering', () => {
+ it('renders PDF document and page', () => {
+ render();
+
+ expect(
+ screen.getByRole('document', { name: 'PDF Document' }),
+ ).toBeInTheDocument();
+ expect(
+ screen.getByRole('img', { name: 'PDF Page 1' }),
+ ).toBeInTheDocument();
+ expect(screen.getByText('Page 1')).toBeInTheDocument();
+ });
+
+ it('passes hook functions to usePDFRendererData', () => {
+ render();
+
+ expect(usePDFRendererData).toHaveBeenCalledWith({
+ onError: defaultProps.onError,
+ onSuccess: defaultProps.onSuccess,
+ });
});
});
});
diff --git a/src/components/FilePreview/components/FileRenderer/BaseRenderers/__snapshots__/PDFRenderer.test.jsx.snap b/src/components/FilePreview/components/FileRenderer/BaseRenderers/__snapshots__/PDFRenderer.test.jsx.snap
deleted file mode 100644
index b84771c8..00000000
--- a/src/components/FilePreview/components/FileRenderer/BaseRenderers/__snapshots__/PDFRenderer.test.jsx.snap
+++ /dev/null
@@ -1,135 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[`PDF Renderer Component snapshots first page, prev is disabled 1`] = `
-
-
-
-
-
-
-
-
- Page
-
-
-
- of
- 10
-
-
-
-
-
-`;
-
-exports[`PDF Renderer Component snapshots on last page, next is disabled 1`] = `
-
-
-
-
-
-
-
-
- Page
-
-
-
- of
- 10
-
-
-
-
-
-`;
diff --git a/src/components/FileUpload/ActionCell.test.jsx b/src/components/FileUpload/ActionCell.test.jsx
index 52835616..10c7c3bb 100644
--- a/src/components/FileUpload/ActionCell.test.jsx
+++ b/src/components/FileUpload/ActionCell.test.jsx
@@ -1,17 +1,53 @@
-import { shallow } from '@edx/react-unit-test-utils';
+import { render, screen } from '@testing-library/react';
+import '@testing-library/jest-dom';
+import userEvent from '@testing-library/user-event';
+import { IntlProvider } from '@edx/frontend-platform/i18n';
import { useDeleteFileAction } from 'hooks/actions';
import ActionCell from './ActionCell';
-jest.mock('components/ConfirmDialog', () => 'ConfirmDialog');
+/* eslint-disable react/prop-types */
+
+jest.unmock('@openedx/paragon');
+jest.unmock('react');
+jest.unmock('@edx/frontend-platform/i18n');
+jest.unmock('hooks/actions');
jest.mock('hooks/actions', () => ({
useDeleteFileAction: jest.fn(),
}));
+jest.unmock('components/ConfirmDialog');
+jest.mock(
+ 'components/ConfirmDialog',
+ () => ({
+ title, description, onConfirm, isOpen,
+ }) => {
+ if (!isOpen) {
+ return null;
+ }
+ return (
+
+
{title}
+
{description}
+
+
+ );
+ },
+);
+
+const renderWithIntl = (ui) => render(
+
+ {ui}
+ ,
+);
+
describe('', () => {
+ const mockOnClick = jest.fn();
const props = {
- onDeletedFile: jest.fn().mockName('onDeletedFile'),
+ onDeletedFile: jest.fn(),
disabled: false,
row: {
original: {
@@ -22,27 +58,50 @@ describe('', () => {
const deleteFileAction = {
action: {
- onClick: jest.fn().mockName('onClick'),
+ onClick: mockOnClick,
},
confirmProps: {
- abc: 123,
+ title: 'Delete File',
+ description: 'Are you sure you want to delete this file?',
+ onConfirm: jest.fn(),
+ isOpen: false,
},
};
- useDeleteFileAction.mockReturnValue(deleteFileAction);
+ beforeEach(() => {
+ jest.clearAllMocks();
+ useDeleteFileAction.mockReturnValue(deleteFileAction);
+ });
+
+ it('renders nothing when disabled', () => {
+ const { container } = renderWithIntl();
+ expect(container.firstChild).toBeNull();
+ });
+
+ it('renders delete button when enabled', () => {
+ renderWithIntl();
+
+ const deleteButton = screen.getByRole('button', { name: /delete/i });
+ expect(deleteButton).toBeInTheDocument();
+ expect(deleteButton).not.toBeDisabled();
+ });
+
+ it('calls onClick when delete button is clicked', async () => {
+ const user = userEvent.setup();
+ renderWithIntl();
- it('render empty on disabled', () => {
- const wrapper = shallow();
- expect(wrapper.snapshot).toMatchSnapshot();
+ const deleteButton = screen.getByRole('button', { name: /delete/i });
+ await user.click(deleteButton);
- expect(wrapper.isEmptyRender()).toBe(true);
+ expect(mockOnClick).toHaveBeenCalledTimes(1);
});
- it('render action cell and confirm dialog', () => {
- const wrapper = shallow();
- expect(wrapper.snapshot).toMatchSnapshot();
+ it('calls useDeleteFileAction with correct parameters', () => {
+ renderWithIntl();
- expect(wrapper.instance.findByType('IconButton')).toHaveLength(1);
- expect(wrapper.instance.findByType('ConfirmDialog')).toHaveLength(1);
+ expect(useDeleteFileAction).toHaveBeenCalledWith({
+ fileIndex: 1,
+ onDeletedFile: props.onDeletedFile,
+ });
});
});
diff --git a/src/components/FileUpload/FileDownload.test.jsx b/src/components/FileUpload/FileDownload.test.jsx
index 100d5f02..f766d3a2 100644
--- a/src/components/FileUpload/FileDownload.test.jsx
+++ b/src/components/FileUpload/FileDownload.test.jsx
@@ -1,19 +1,33 @@
-import { shallow } from '@edx/react-unit-test-utils';
+import { render, screen } from '@testing-library/react';
+import '@testing-library/jest-dom';
+import userEvent from '@testing-library/user-event';
+import { IntlProvider } from '@edx/frontend-platform/i18n';
import FileDownload from './FileDownload';
+import { useFileDownloadHooks } from './hooks';
+
+jest.unmock('@openedx/paragon');
+jest.unmock('react');
+jest.unmock('@edx/frontend-platform/i18n');
+
jest.mock('react-router', () => ({
useParams: () => ({
xblockId: 'xblockId',
}),
}));
+
+const mockDownloadFiles = jest.fn();
jest.mock('./hooks', () => ({
- useFileDownloadHooks: () => ({
- downloadFiles: jest.fn().mockName('downloadFiles'),
- status: 'not that it matters',
- }),
+ useFileDownloadHooks: jest.fn(),
}));
+const renderWithIntl = (ui) => render(
+
+ {ui}
+ ,
+);
+
describe('', () => {
const props = {
files: [
@@ -25,17 +39,73 @@ describe('', () => {
],
};
- it('render empty on no files', () => {
- const wrapper = shallow();
- expect(wrapper.snapshot).toMatchSnapshot();
+ beforeEach(() => {
+ jest.clearAllMocks();
+ useFileDownloadHooks.mockReturnValue({
+ downloadFiles: mockDownloadFiles,
+ status: 'idle',
+ });
+ });
+
+ it('renders nothing when no files are provided', () => {
+ const { container } = renderWithIntl();
+ expect(container.firstChild).toBeNull();
+ });
+
+ it('renders download button when files are provided', () => {
+ renderWithIntl();
+
+ const downloadButton = screen.getByRole('button', { name: /download files/i });
+ expect(downloadButton).toBeInTheDocument();
+ expect(downloadButton).not.toBeDisabled();
+ });
+
+ it('calls downloadFiles when button is clicked', async () => {
+ const user = userEvent.setup();
+ renderWithIntl();
+
+ const downloadButton = screen.getByRole('button', { name: /download files/i });
+ await user.click(downloadButton);
+
+ expect(mockDownloadFiles).toHaveBeenCalledTimes(1);
+ });
+
+ it('shows loading state when status is loading', () => {
+ useFileDownloadHooks.mockReturnValue({
+ downloadFiles: mockDownloadFiles,
+ status: 'loading',
+ });
+
+ renderWithIntl();
- expect(wrapper.isEmptyRender()).toBe(true);
+ const downloadButton = screen.getByRole('button', { name: /downloading/i });
+ expect(downloadButton).toBeInTheDocument();
+ expect(downloadButton).toHaveAttribute('aria-disabled', 'true');
});
- it('render download button', () => {
- const wrapper = shallow();
- expect(wrapper.snapshot).toMatchSnapshot();
+ it('shows success state when status is success', () => {
+ useFileDownloadHooks.mockReturnValue({
+ downloadFiles: mockDownloadFiles,
+ status: 'success',
+ });
+
+ renderWithIntl();
+
+ const downloadButton = screen.getByRole('button', { name: /downloaded/i });
+ expect(downloadButton).toBeInTheDocument();
+ expect(downloadButton).toHaveAttribute('aria-disabled', 'true');
+ });
+
+ it('shows error state when status is error', () => {
+ useFileDownloadHooks.mockReturnValue({
+ downloadFiles: mockDownloadFiles,
+ status: 'error',
+ });
+
+ renderWithIntl();
- expect(wrapper.instance.findByType('StatefulButton')).toHaveLength(1);
+ const downloadButton = screen.getByRole('button', { name: /retry download/i });
+ expect(downloadButton).toBeInTheDocument();
+ expect(downloadButton).not.toBeDisabled();
});
});
diff --git a/src/components/FileUpload/UploadConfirmModal.test.jsx b/src/components/FileUpload/UploadConfirmModal.test.jsx
index 3cac01dc..34a14bfc 100644
--- a/src/components/FileUpload/UploadConfirmModal.test.jsx
+++ b/src/components/FileUpload/UploadConfirmModal.test.jsx
@@ -1,14 +1,46 @@
-import { shallow } from '@edx/react-unit-test-utils';
+import { render, screen } from '@testing-library/react';
+import '@testing-library/jest-dom';
+import userEvent from '@testing-library/user-event';
+import { IntlProvider } from '@edx/frontend-platform/i18n';
import { useUploadConfirmModalHooks } from './hooks';
-
+import messages from './messages';
import UploadConfirmModal from './UploadConfirmModal';
+jest.unmock('@openedx/paragon');
+jest.unmock('react');
+jest.unmock('@edx/frontend-platform/i18n');
+
jest.mock('./hooks', () => ({
useUploadConfirmModalHooks: jest.fn(),
}));
+const renderWithIntl = (ui) => {
+ const testMessages = {
+ 'frontend-app-ora.FileCellContent.uploadFileModalTitle':
+ messages.uploadFileModalTitle.defaultMessage,
+ 'frontend-app-ora.FileCellContent.uploadFileDescriptionFieldLabel':
+ messages.uploadFileDescriptionFieldLabel.defaultMessage,
+ 'frontend-app-ora.FileCellContent.cancelUploadFileButton':
+ messages.cancelUploadFileButton.defaultMessage,
+ 'frontend-app-ora.FileCellContent.confirmUploadFileButton':
+ messages.confirmUploadFileButton.defaultMessage,
+ 'frontend-app-ora.FileCellContent.fileDescriptionMissingError':
+ messages.fileDescriptionMissingError.defaultMessage,
+ };
+
+ return render(
+
+ {ui}
+ ,
+ );
+};
+
describe('', () => {
+ const mockExitHandler = jest.fn();
+ const mockConfirmUploadClickHandler = jest.fn();
+ const mockOnFileDescriptionChange = jest.fn();
+
const props = {
open: true,
file: {
@@ -18,24 +50,104 @@ describe('', () => {
uploadHandler: jest.fn(),
};
- useUploadConfirmModalHooks.mockReturnValue({
+ const mockHooksReturn = {
shouldShowError: false,
- exitHandler: jest.fn().mockName('exitHandler'),
- confirmUploadClickHandler: jest.fn().mockName('confirmUploadClickHandler'),
- onFileDescriptionChange: jest.fn().mockName('onFileDescriptionChange'),
+ exitHandler: mockExitHandler,
+ confirmUploadClickHandler: mockConfirmUploadClickHandler,
+ onFileDescriptionChange: mockOnFileDescriptionChange,
+ };
+
+ beforeEach(() => {
+ jest.clearAllMocks();
+ useUploadConfirmModalHooks.mockReturnValue(mockHooksReturn);
+ });
+
+ it('renders modal with file description form when file is provided', () => {
+ renderWithIntl();
+
+ expect(screen.getByRole('dialog')).toBeInTheDocument();
+ expect(
+ screen.getByText(/add a text description to your file/i),
+ ).toBeInTheDocument();
+ expect(
+ screen.getByLabelText(/description for: file name/i),
+ ).toBeInTheDocument();
+ expect(
+ screen.getByRole('button', { name: /cancel upload/i }),
+ ).toBeInTheDocument();
+ expect(
+ screen.getByRole('button', { name: /upload files/i }),
+ ).toBeInTheDocument();
+ });
+
+ it('renders modal without file description form when no file is provided', () => {
+ renderWithIntl();
+
+ expect(screen.getByRole('dialog')).toBeInTheDocument();
+ expect(
+ screen.getByText(/add a text description to your file/i),
+ ).toBeInTheDocument();
+ expect(screen.queryByRole('textbox')).not.toBeInTheDocument();
+ expect(
+ screen.getByRole('button', { name: /cancel upload/i }),
+ ).toBeInTheDocument();
+ expect(
+ screen.getByRole('button', { name: /upload files/i }),
+ ).toBeInTheDocument();
});
- it('render upload confirm modal', () => {
- const wrapper = shallow();
- expect(wrapper.snapshot).toMatchSnapshot();
+ it('calls exitHandler when cancel button is clicked', async () => {
+ const user = userEvent.setup();
+ renderWithIntl();
+
+ const cancelButton = screen.getByRole('button', { name: /cancel upload/i });
+ await user.click(cancelButton);
+
+ expect(mockExitHandler).toHaveBeenCalled();
+ });
+
+ it('calls confirmUploadClickHandler when upload button is clicked', async () => {
+ const user = userEvent.setup();
+ renderWithIntl();
+
+ const uploadButton = screen.getByRole('button', { name: /upload files/i });
+ await user.click(uploadButton);
+
+ expect(mockConfirmUploadClickHandler).toHaveBeenCalledTimes(1);
+ });
+
+ it('calls onFileDescriptionChange when input value changes', async () => {
+ const user = userEvent.setup();
+ renderWithIntl();
+
+ const descriptionInput = screen.getByLabelText(
+ /description for: file name/i,
+ );
+ await user.type(descriptionInput, 'test description');
+
+ expect(mockOnFileDescriptionChange).toHaveBeenCalled();
+ });
+
+ it('shows error message when shouldShowError is true', () => {
+ useUploadConfirmModalHooks.mockReturnValue({
+ ...mockHooksReturn,
+ shouldShowError: true,
+ });
+
+ renderWithIntl();
- expect(wrapper.instance.findByType('Form.Group')).toHaveLength(1);
+ expect(
+ screen.getByText(/please enter a file description/i),
+ ).toBeInTheDocument();
+ const descriptionInput = screen.getByLabelText(
+ /description for: file name/i,
+ );
+ expect(descriptionInput).toHaveClass('is-invalid');
});
- it('render upload confirm modal with no file', () => {
- const wrapper = shallow();
- expect(wrapper.snapshot).toMatchSnapshot();
+ it('does not render modal when open is false', () => {
+ renderWithIntl();
- expect(wrapper.instance.findByType('Form.Group')).toHaveLength(0);
+ expect(screen.queryByRole('dialog')).not.toBeInTheDocument();
});
});
diff --git a/src/components/FileUpload/__snapshots__/ActionCell.test.jsx.snap b/src/components/FileUpload/__snapshots__/ActionCell.test.jsx.snap
deleted file mode 100644
index 35b6b509..00000000
--- a/src/components/FileUpload/__snapshots__/ActionCell.test.jsx.snap
+++ /dev/null
@@ -1,17 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[` render action cell and confirm dialog 1`] = `
-
-
-
-
-`;
-
-exports[` render empty on disabled 1`] = `false`;
diff --git a/src/components/FileUpload/__snapshots__/FileDownload.test.jsx.snap b/src/components/FileUpload/__snapshots__/FileDownload.test.jsx.snap
deleted file mode 100644
index 1d4925d3..00000000
--- a/src/components/FileUpload/__snapshots__/FileDownload.test.jsx.snap
+++ /dev/null
@@ -1,56 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[` render download button 1`] = `
-,
- "idle": ,
- "loading": ,
- "success": ,
- }
- }
- labels={
- {
- "error": ,
- "idle": ,
- "loading": ,
- "success": ,
- }
- }
- onClick={[MockFunction downloadFiles]}
- state="not that it matters"
-/>
-`;
-
-exports[` render empty on no files 1`] = `null`;
diff --git a/src/components/FileUpload/__snapshots__/UploadConfirmModal.test.jsx.snap b/src/components/FileUpload/__snapshots__/UploadConfirmModal.test.jsx.snap
deleted file mode 100644
index ba6258e4..00000000
--- a/src/components/FileUpload/__snapshots__/UploadConfirmModal.test.jsx.snap
+++ /dev/null
@@ -1,111 +0,0 @@
-// Jest Snapshot v1, https://goo.gl/fbAQLP
-
-exports[` render upload confirm modal 1`] = `
-
-
-
- Add a text description to your file
-
-
-
-
-
-
-
-
- Description for:
-
-
- file name
-
-
-
-
-
-
-
-
-
-
- Cancel upload
-
-
-
-
-
-`;
-
-exports[` render upload confirm modal with no file 1`] = `
-
-
-
- Add a text description to your file
-
-
-
-
-
-
-
-
-
-
- Cancel upload
-
-
-
-
-
-`;