Skip to content

Commit cae7b1b

Browse files
test: Deprecate react-unit-test-utils 9/15 (#668)
1 parent 6ae8180 commit cae7b1b

File tree

10 files changed

+193
-658
lines changed

10 files changed

+193
-658
lines changed

src/containers/LearnerDashboardHeader/ConfirmEmailBanner/__snapshots__/index.test.jsx.snap

Lines changed: 0 additions & 72 deletions
This file was deleted.
Lines changed: 43 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -1,14 +1,19 @@
1-
import React from 'react';
2-
import { shallow } from '@edx/react-unit-test-utils';
1+
import { render, screen } from '@testing-library/react';
2+
import { IntlProvider } from '@edx/frontend-platform/i18n';
33

44
import hooks from './hooks';
55
import ConfirmEmailBanner from '.';
6+
import messages from './messages';
67

78
jest.mock('./hooks', () => ({
89
__esModule: true,
910
default: jest.fn(),
1011
}));
1112

13+
jest.unmock('@openedx/paragon');
14+
jest.unmock('@edx/frontend-platform/i18n');
15+
jest.unmock('react');
16+
1217
const hookProps = {
1318
isNeeded: true,
1419
showPageBanner: jest.fn().mockName('showPageBanner'),
@@ -20,16 +25,44 @@ const hookProps = {
2025
};
2126

2227
describe('ConfirmEmailBanner', () => {
23-
describe('snapshot', () => {
24-
test('do not show on already verified', () => {
28+
describe('render', () => {
29+
it('do not show on already verified', () => {
2530
hooks.mockReturnValueOnce({ ...hookProps, isNeeded: false });
26-
const el = shallow(<ConfirmEmailBanner />);
27-
expect(el.snapshot).toMatchSnapshot();
31+
render(<IntlProvider locale="en"><ConfirmEmailBanner /></IntlProvider>);
32+
const banner = screen.queryByRole('alert');
33+
expect(banner).toBeNull();
2834
});
29-
test('Show on unverified', () => {
30-
hooks.mockReturnValueOnce({ ...hookProps });
31-
const el = shallow(<ConfirmEmailBanner />);
32-
expect(el.snapshot).toMatchSnapshot();
35+
describe('On unverified', () => {
36+
beforeEach(() => {
37+
hooks.mockReturnValueOnce({ ...hookProps });
38+
render(<IntlProvider locale="en"><ConfirmEmailBanner /></IntlProvider>);
39+
});
40+
it('show banner', () => {
41+
const banner = screen.getByRole('alert');
42+
expect(banner).toContainHTML('Remember to confirm');
43+
});
44+
it('show confirm now button', () => {
45+
const confirmButton = screen.getByRole('button', { name: messages.confirmNowButton.defaultMessage });
46+
expect(confirmButton).toBeInTheDocument();
47+
});
48+
it('show modal', () => {
49+
const modal = screen.getByRole('dialog');
50+
expect(modal).toBeInTheDocument();
51+
});
52+
it('show modal header and body', () => {
53+
const modalHeader = screen.getByText(messages.confirmEmailModalHeader.defaultMessage);
54+
expect(modalHeader).toBeInTheDocument();
55+
const modalBody = screen.getByText(messages.confirmEmailModalBody.defaultMessage);
56+
expect(modalBody).toBeInTheDocument();
57+
});
58+
it('show confirm image', () => {
59+
const confirmButton = screen.getByRole('img', { name: messages.confirmEmailImageAlt.defaultMessage });
60+
expect(confirmButton).toBeInTheDocument();
61+
});
62+
it('show confirm email button', () => {
63+
const confirmButton = screen.getByRole('button', { name: messages.verifiedConfirmEmailButton.defaultMessage });
64+
expect(confirmButton).toBeInTheDocument();
65+
});
3366
});
3467
});
3568
});

src/containers/LearnerDashboardHeader/__snapshots__/index.test.jsx.snap

Lines changed: 0 additions & 61 deletions
This file was deleted.
Lines changed: 44 additions & 24 deletions
Original file line numberDiff line numberDiff line change
@@ -1,52 +1,72 @@
11
import { mergeConfig } from '@edx/frontend-platform';
2-
import { shallow } from '@edx/react-unit-test-utils';
3-
import Header from '@edx/frontend-component-header';
2+
import { render, screen } from '@testing-library/react';
3+
import { IntlProvider } from '@edx/frontend-platform/i18n';
44

55
import urls from 'data/services/lms/urls';
66
import LearnerDashboardHeader from '.';
77
import { findCoursesNavClicked } from './hooks';
88

9+
const courseSearchUrl = '/course-search-url';
10+
911
jest.mock('hooks', () => ({
1012
reduxHooks: {
1113
usePlatformSettingsData: jest.fn(() => ({
12-
courseSearchUrl: '/course-search-url',
14+
courseSearchUrl,
1315
})),
1416
},
1517
}));
1618
jest.mock('./hooks', () => ({
1719
...jest.requireActual('./hooks'),
1820
findCoursesNavClicked: jest.fn(),
1921
}));
20-
jest.mock('containers/MasqueradeBar', () => 'MasqueradeBar');
21-
jest.mock('./ConfirmEmailBanner', () => 'ConfirmEmailBanner');
22-
jest.mock('@edx/frontend-component-header', () => 'Header');
22+
23+
jest.unmock('@openedx/paragon');
24+
jest.unmock('@edx/frontend-platform/i18n');
25+
jest.unmock('react');
26+
27+
const mockedHeaderProps = jest.fn();
28+
jest.mock('containers/MasqueradeBar', () => jest.fn(() => <div>MasqueradeBar</div>));
29+
jest.mock('./ConfirmEmailBanner', () => jest.fn(() => <div>ConfirmEmailBanner</div>));
30+
jest.mock('@edx/frontend-component-header', () => jest.fn((props) => {
31+
mockedHeaderProps(props);
32+
return <div>Header</div>;
33+
}));
2334

2435
describe('LearnerDashboardHeader', () => {
25-
test('render', () => {
36+
beforeEach(() => jest.clearAllMocks());
37+
it('renders and discover url is correct', () => {
2638
mergeConfig({ ORDER_HISTORY_URL: 'test-url' });
27-
const wrapper = shallow(<LearnerDashboardHeader />);
28-
expect(wrapper.snapshot).toMatchSnapshot();
29-
expect(wrapper.instance.findByType('ConfirmEmailBanner')).toHaveLength(1);
30-
expect(wrapper.instance.findByType('MasqueradeBar')).toHaveLength(1);
31-
expect(wrapper.instance.findByType(Header)).toHaveLength(1);
32-
wrapper.instance.findByType(Header)[0].props.mainMenuItems[1].onClick();
33-
expect(findCoursesNavClicked).toHaveBeenCalledWith(urls.baseAppUrl('/course-search-url'));
34-
expect(wrapper.instance.findByType(Header)[0].props.secondaryMenuItems.length).toBe(0);
39+
render(<IntlProvider locale="en"><LearnerDashboardHeader /></IntlProvider>);
40+
expect(screen.getByText('ConfirmEmailBanner')).toBeInTheDocument();
41+
expect(screen.getByText('MasqueradeBar')).toBeInTheDocument();
42+
expect(screen.getByText('Header')).toBeInTheDocument();
43+
const props = mockedHeaderProps.mock.calls[0][0];
44+
const { mainMenuItems } = props;
45+
const discoverUrl = mainMenuItems[1].href;
46+
mainMenuItems[1].onClick();
47+
expect(discoverUrl).toBe(urls.baseAppUrl(courseSearchUrl));
48+
expect(findCoursesNavClicked).toHaveBeenCalledWith(urls.baseAppUrl(courseSearchUrl));
3549
});
3650

37-
test('should display Help link if SUPPORT_URL is set', () => {
51+
it('should display Help link if SUPPORT_URL is set', () => {
3852
mergeConfig({ SUPPORT_URL: 'http://localhost:18000/support' });
39-
const wrapper = shallow(<LearnerDashboardHeader />);
40-
expect(wrapper.instance.findByType(Header)[0].props.secondaryMenuItems.length).toBe(1);
53+
render(<IntlProvider locale="en"><LearnerDashboardHeader /></IntlProvider>);
54+
const props = mockedHeaderProps.mock.calls[0][0];
55+
const { secondaryMenuItems } = props;
56+
expect(secondaryMenuItems.length).toBe(1);
4157
});
42-
test('should display Programs link if it is enabled by configuration', () => {
58+
it('should display Programs link if it is enabled by configuration', () => {
4359
mergeConfig({ ENABLE_PROGRAMS: true });
44-
const wrapper = shallow(<LearnerDashboardHeader />);
45-
expect(wrapper.instance.findByType(Header)[0].props.mainMenuItems.length).toBe(3);
60+
render(<IntlProvider locale="en"><LearnerDashboardHeader /></IntlProvider>);
61+
const props = mockedHeaderProps.mock.calls[0][0];
62+
const { mainMenuItems } = props;
63+
expect(mainMenuItems.length).toBe(3);
4664
});
47-
test('should not display Discover New tab if it is disabled by configuration', () => {
65+
it('should not display Discover New tab if it is disabled by configuration', () => {
4866
mergeConfig({ NON_BROWSABLE_COURSES: true });
49-
const wrapper = shallow(<LearnerDashboardHeader />);
50-
expect(wrapper.instance.findByType(Header)[0].props.mainMenuItems.length).toBe(2);
67+
render(<IntlProvider locale="en"><LearnerDashboardHeader /></IntlProvider>);
68+
const props = mockedHeaderProps.mock.calls[0][0];
69+
const { mainMenuItems } = props;
70+
expect(mainMenuItems.length).toBe(2);
5171
});
5272
});

0 commit comments

Comments
 (0)