|
1 | 1 | 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'; |
4 | 4 |
|
5 | 5 | import urls from 'data/services/lms/urls';
|
6 | 6 | import LearnerDashboardHeader from '.';
|
7 | 7 | import { findCoursesNavClicked } from './hooks';
|
8 | 8 |
|
| 9 | +const courseSearchUrl = '/course-search-url'; |
| 10 | + |
9 | 11 | jest.mock('hooks', () => ({
|
10 | 12 | reduxHooks: {
|
11 | 13 | usePlatformSettingsData: jest.fn(() => ({
|
12 |
| - courseSearchUrl: '/course-search-url', |
| 14 | + courseSearchUrl, |
13 | 15 | })),
|
14 | 16 | },
|
15 | 17 | }));
|
16 | 18 | jest.mock('./hooks', () => ({
|
17 | 19 | ...jest.requireActual('./hooks'),
|
18 | 20 | findCoursesNavClicked: jest.fn(),
|
19 | 21 | }));
|
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 | +})); |
23 | 34 |
|
24 | 35 | describe('LearnerDashboardHeader', () => {
|
25 |
| - test('render', () => { |
| 36 | + beforeEach(() => jest.clearAllMocks()); |
| 37 | + it('renders and discover url is correct', () => { |
26 | 38 | 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)); |
35 | 49 | });
|
36 | 50 |
|
37 |
| - test('should display Help link if SUPPORT_URL is set', () => { |
| 51 | + it('should display Help link if SUPPORT_URL is set', () => { |
38 | 52 | 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); |
41 | 57 | });
|
42 |
| - test('should display Programs link if it is enabled by configuration', () => { |
| 58 | + it('should display Programs link if it is enabled by configuration', () => { |
43 | 59 | 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); |
46 | 64 | });
|
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', () => { |
48 | 66 | 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); |
51 | 71 | });
|
52 | 72 | });
|
0 commit comments