|
1 | 1 | import { screen, render } from '@testing-library/react'; |
2 | 2 | import { useSelector } from 'react-redux'; |
| 3 | +import { useNavigate } from 'react-router-dom'; |
3 | 4 | import { IntlProvider } from '@edx/frontend-platform/i18n'; |
4 | 5 | import PageSettingButton from './PageSettingButton'; |
5 | 6 |
|
@@ -43,51 +44,62 @@ const renderComponent = (props = {}) => render( |
43 | 44 | ); |
44 | 45 |
|
45 | 46 | describe('PageSettingButton', () => { |
| 47 | + const navigate = jest.fn(); |
| 48 | + |
46 | 49 | beforeEach(() => { |
47 | 50 | useSelector.mockClear(); |
| 51 | + useNavigate.mockReturnValue(navigate); |
48 | 52 | }); |
49 | 53 |
|
50 | | - it('renders the settings button with the new textbooks page link when useNewTextbooksPage is true', () => { |
| 54 | + it('navigates to the new textbooks page link when useNewTextbooksPage is true', () => { |
51 | 55 | useSelector.mockReturnValue(mockWaffleFlags); |
52 | 56 |
|
53 | 57 | renderComponent({ legacyLink: 'http://legacylink.com/textbooks' }); |
54 | 58 |
|
55 | | - const linkElement = screen.getByRole('link'); |
56 | | - expect(linkElement).toHaveAttribute('href', `/course/${defaultProps.courseId}/page-id`); |
| 59 | + const buttonElement = screen.getByRole('button', { name: /settings/i }); |
| 60 | + buttonElement.click(); |
| 61 | + |
| 62 | + expect(navigate).toHaveBeenCalledWith(`/course/${defaultProps.courseId}/page-id`); |
57 | 63 | }); |
58 | 64 |
|
59 | | - it('does not render link when legacyLink prop value incorrect', () => { |
| 65 | + it('does not render button when legacyLink prop value incorrect', () => { |
60 | 66 | useSelector.mockReturnValue(mockWaffleFlags); |
61 | 67 |
|
62 | 68 | renderComponent({ legacyLink: 'http://legacylink.com/some-value' }); |
63 | 69 |
|
64 | | - expect(screen.queryByRole('link')).toBeNull(); |
| 70 | + expect(screen.queryByRole('IconButton', { name: /settings/i })).toBeNull(); |
65 | 71 | }); |
66 | 72 |
|
67 | | - it('renders the settings button with the legacy link when useNewTextbooksPage is false', () => { |
| 73 | + it('navigates to the legacy link when useNewTextbooksPage is false', () => { |
68 | 74 | useSelector.mockReturnValue({ ...mockWaffleFlags, useNewTextbooksPage: false }); |
69 | 75 |
|
70 | 76 | renderComponent({ legacyLink: 'http://legacylink.com/textbooks' }); |
71 | 77 |
|
72 | | - const linkElement = screen.getByRole('link'); |
73 | | - expect(linkElement).toHaveAttribute('href', 'http://legacylink.com/textbooks'); |
| 78 | + const buttonElement = screen.getByRole('button', { name: /settings/i }); |
| 79 | + buttonElement.click(); |
| 80 | + |
| 81 | + expect(navigate).toHaveBeenCalledWith('http://legacylink.com/textbooks'); |
74 | 82 | }); |
75 | 83 |
|
76 | | - it('renders the settings button with the new custom pages link when useNewCustomPages is true', () => { |
| 84 | + it('navigates to the new custom pages link when useNewCustomPages is true', () => { |
77 | 85 | useSelector.mockReturnValue(mockWaffleFlags); |
78 | 86 |
|
79 | 87 | renderComponent(); |
80 | 88 |
|
81 | | - const linkElement = screen.getByRole('link'); |
82 | | - expect(linkElement).toHaveAttribute('href', `/course/${defaultProps.courseId}/page-id`); |
| 89 | + const buttonElement = screen.getByRole('button', { name: /settings/i }); |
| 90 | + buttonElement.click(); |
| 91 | + |
| 92 | + expect(navigate).toHaveBeenCalledWith(`/course/${defaultProps.courseId}/page-id`); |
83 | 93 | }); |
84 | 94 |
|
85 | | - it('renders the settings button with the legacy link when useNewCustomPages is false', () => { |
| 95 | + it('navigates to the legacy link when useNewCustomPages is false', () => { |
86 | 96 | useSelector.mockReturnValue({ ...mockWaffleFlags, useNewCustomPages: false }); |
87 | 97 |
|
88 | 98 | renderComponent(); |
89 | 99 |
|
90 | | - const linkElement = screen.getByRole('link'); |
91 | | - expect(linkElement).toHaveAttribute('href', defaultProps.legacyLink); |
| 100 | + const buttonElement = screen.getByRole('button', { name: /settings/i }); |
| 101 | + buttonElement.click(); |
| 102 | + |
| 103 | + expect(navigate).toHaveBeenCalledWith(defaultProps.legacyLink); |
92 | 104 | }); |
93 | 105 | }); |
0 commit comments