Skip to content

Commit ab0f139

Browse files
test: Deprecate react-unit-test-utils 7/15 (#662)
1 parent 8a0b9dc commit ab0f139

File tree

10 files changed

+166
-409
lines changed

10 files changed

+166
-409
lines changed
Lines changed: 21 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,17 +1,32 @@
1-
import { shallow } from '@edx/react-unit-test-utils';
1+
import { render, screen } from '@testing-library/react';
2+
import { IntlProvider } from '@edx/frontend-platform/i18n';
3+
import { formatMessage } from 'testUtils';
24

35
import { FilterKeys } from 'data/constants/app';
46
import ActiveCourseFilters from './ActiveCourseFilters';
7+
import messages from './messages';
8+
9+
jest.unmock('@edx/frontend-platform/i18n');
10+
jest.unmock('@openedx/paragon');
11+
jest.unmock('react');
12+
13+
const filters = Object.values(FilterKeys);
514

615
describe('ActiveCourseFilters', () => {
716
const props = {
8-
filters: Object.values(FilterKeys),
17+
filters,
918
handleRemoveFilter: jest.fn().mockName('handleRemoveFilter'),
1019
};
11-
describe('snapshot', () => {
12-
test('renders', () => {
13-
const wrapper = shallow(<ActiveCourseFilters {...props} />);
14-
expect(wrapper.snapshot).toMatchSnapshot();
20+
it('renders chips correctly', () => {
21+
render(<IntlProvider locale="en"><ActiveCourseFilters {...props} /></IntlProvider>);
22+
filters.map((key) => {
23+
const chip = screen.getByText(formatMessage(messages[key]));
24+
return expect(chip).toBeInTheDocument();
1525
});
1626
});
27+
it('renders button correctly', () => {
28+
render(<IntlProvider locale="en"><ActiveCourseFilters {...props} /></IntlProvider>);
29+
const button = screen.getByRole('button', { name: formatMessage(messages.clearAll) });
30+
expect(button).toBeInTheDocument();
31+
});
1732
});
Lines changed: 53 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -1,60 +1,79 @@
1-
import { shallow } from '@edx/react-unit-test-utils';
2-
1+
import { render, screen } from '@testing-library/react';
2+
import { formatMessage } from 'testUtils';
33
import { breakpoints, useWindowSize } from '@openedx/paragon';
4-
54
import { reduxHooks } from 'hooks';
5+
import { IntlProvider } from '@edx/frontend-platform/i18n';
6+
import { FilterKeys, SortKeys } from 'data/constants/app';
67

8+
import messages from './messages';
79
import CourseFilterControls from './CourseFilterControls';
810
import useCourseFilterControlsData from './hooks';
911

1012
jest.mock('hooks', () => ({
1113
reduxHooks: { useHasCourses: jest.fn() },
1214
}));
1315

14-
jest.mock('./hooks', () => jest.fn().mockName('useCourseFilterControlsData'));
16+
jest.mock('./hooks', () => jest.fn());
1517

16-
jest.mock('./components/FilterForm', () => 'FilterForm');
17-
jest.mock('./components/SortForm', () => 'SortForm');
18+
jest.unmock('@edx/frontend-platform/i18n');
19+
jest.unmock('@openedx/paragon');
20+
jest.unmock('react');
21+
22+
jest.mock('@openedx/paragon', () => ({
23+
...jest.requireActual('@openedx/paragon'),
24+
useWindowSize: jest.fn(),
25+
}));
1826

19-
reduxHooks.useHasCourses.mockReturnValue(true);
27+
const filters = Object.values(FilterKeys);
28+
29+
const mockControlsData = {
30+
isOpen: false,
31+
open: jest.fn().mockName('open'),
32+
close: jest.fn().mockName('close'),
33+
target: 'target-test',
34+
setTarget: jest.fn(),
35+
handleFilterChange: jest.fn().mockName('handleFilterChange'),
36+
handleSortChange: jest.fn().mockName('handleSortChange'),
37+
};
2038

2139
describe('CourseFilterControls', () => {
2240
const props = {
23-
sortBy: 'test-sort-by',
41+
sortBy: SortKeys.enrolled,
2442
setSortBy: jest.fn().mockName('setSortBy'),
25-
filters: ['test-filter'],
43+
filters,
2644
};
2745

28-
useCourseFilterControlsData.mockReturnValue({
29-
isOpen: false,
30-
open: jest.fn().mockName('open'),
31-
close: jest.fn().mockName('close'),
32-
target: 'test-target',
33-
setTarget: jest.fn().mockName('setTarget'),
34-
handleFilterChange: jest.fn().mockName('handleFilterChange'),
35-
handleSortChange: jest.fn().mockName('handleSortChange'),
36-
});
37-
38-
describe('no courses', () => {
39-
test('snapshot', () => {
40-
reduxHooks.useHasCourses.mockReturnValueOnce(false);
41-
useWindowSize.mockReturnValueOnce({ width: breakpoints.small.minWidth });
42-
const wrapper = shallow(<CourseFilterControls {...props} />);
43-
expect(wrapper.snapshot).toMatchSnapshot();
44-
});
45-
});
46-
describe('mobile', () => {
47-
test('snapshot', () => {
46+
describe('mobile and open', () => {
47+
it('should render sheet', () => {
48+
reduxHooks.useHasCourses.mockReturnValue(true);
49+
useCourseFilterControlsData.mockReturnValue({ ...mockControlsData, isOpen: true });
4850
useWindowSize.mockReturnValueOnce({ width: breakpoints.small.minWidth - 1 });
49-
const wrapper = shallow(<CourseFilterControls {...props} />);
50-
expect(wrapper.snapshot).toMatchSnapshot();
51+
render(<IntlProvider locale="en"><CourseFilterControls {...props} /></IntlProvider>);
52+
const sheet = screen.getByRole('presentation', { hidden: true });
53+
expect(sheet).toBeInTheDocument();
54+
expect(sheet.parentElement).toHaveClass('sheet-container');
5155
});
5256
});
5357
describe('is not mobile', () => {
54-
test('snapshot', () => {
58+
it('should have button disabled', () => {
59+
reduxHooks.useHasCourses.mockReturnValue(true);
60+
useCourseFilterControlsData.mockReturnValue({ ...mockControlsData, isOpen: true });
5561
useWindowSize.mockReturnValueOnce({ width: breakpoints.small.minWidth });
56-
const wrapper = shallow(<CourseFilterControls {...props} />);
57-
expect(wrapper.snapshot).toMatchSnapshot();
62+
render(<IntlProvider locale="en"><CourseFilterControls {...props} /></IntlProvider>);
63+
const filterForm = screen.getByText(messages.courseStatus.defaultMessage);
64+
const modal = filterForm.closest('div.pgn__modal-popup__tooltip');
65+
expect(modal).toBeInTheDocument();
66+
});
67+
});
68+
describe('no courses', () => {
69+
it('should have button disabled', () => {
70+
reduxHooks.useHasCourses.mockReturnValue(false);
71+
useCourseFilterControlsData.mockReturnValue(mockControlsData);
72+
useWindowSize.mockReturnValue({ width: breakpoints.small.minWidth });
73+
render(<IntlProvider locale="en"><CourseFilterControls {...props} /></IntlProvider>);
74+
const button = screen.getByRole('button', { name: formatMessage(messages.refine) });
75+
expect(button).toBeInTheDocument();
76+
expect(button).toBeDisabled();
5877
});
5978
});
6079
});

src/containers/CourseFilterControls/__snapshots__/ActiveCourseFilters.test.jsx.snap

Lines changed: 0 additions & 39 deletions
This file was deleted.

src/containers/CourseFilterControls/__snapshots__/CourseFilterControls.test.jsx.snap

Lines changed: 0 additions & 169 deletions
This file was deleted.

0 commit comments

Comments
 (0)