@@ -37,6 +37,24 @@ const OptimizerPage = () => (
3737 </ AppProvider >
3838) ;
3939
40+ const setupOptimizerPage = async ( ) => {
41+ axiosMock . onGet ( getLinkCheckStatusApiUrl ( courseId ) ) . reply ( 200 , mockApiResponse ) ;
42+ const optimizerPage = render ( < OptimizerPage /> ) ;
43+
44+ // Click the scan button
45+ fireEvent . click ( optimizerPage . getByText ( messages . buttonTitle . defaultMessage ) ) ;
46+
47+ // Wait for the scan results to load
48+ await waitFor ( ( ) => {
49+ expect ( optimizerPage . getByText ( 'Introduction to Programming' ) ) . toBeInTheDocument ( ) ;
50+ } ) ;
51+
52+ // Click on filters button
53+ fireEvent . click ( optimizerPage . getByText ( scanResultsMessages . filterButtonLabel . defaultMessage ) ) ;
54+
55+ return optimizerPage ;
56+ } ;
57+
4058describe ( 'CourseOptimizerPage' , ( ) => {
4159 describe ( 'pollLinkCheckDuringScan' , ( ) => {
4260 let mockFetchLinkCheckStatus ;
@@ -71,6 +89,7 @@ describe('CourseOptimizerPage', () => {
7189 pollLinkCheckDuringScan ( linkCheckInProgress , interval , dispatch , courseId ) ;
7290 expect ( interval . current ) . toBeTruthy ( ) ;
7391 } ) ;
92+
7493 it ( 'should not start polling if link check is not in progress' , ( ) => {
7594 const linkCheckInProgress = false ;
7695 const interval = { current : null } ;
@@ -79,6 +98,7 @@ describe('CourseOptimizerPage', () => {
7998 pollLinkCheckDuringScan ( linkCheckInProgress , interval , dispatch , courseId ) ;
8099 expect ( interval . current ) . toBeFalsy ( ) ;
81100 } ) ;
101+
82102 it ( 'should clear the interval if link check is finished' , ( ) => {
83103 const linkCheckInProgress = false ;
84104 const interval = { current : 1 } ;
@@ -127,74 +147,124 @@ describe('CourseOptimizerPage', () => {
127147 } ) ;
128148 } ) ;
129149
130- it ( 'should list broken links results' , async ( ) => {
131- const {
132- getByText, queryAllByText, getAllByText, container,
133- } = render ( < OptimizerPage /> ) ;
150+ it ( 'should show no broken links found message' , async ( ) => {
151+ axiosMock
152+ . onGet ( getLinkCheckStatusApiUrl ( courseId ) )
153+ . reply ( 200 , { LinkCheckStatus : 'Succeeded' } ) ;
154+ const { getByText } = render ( < OptimizerPage /> ) ;
134155 expect ( getByText ( messages . headingTitle . defaultMessage ) ) . toBeInTheDocument ( ) ;
135156 fireEvent . click ( getByText ( messages . buttonTitle . defaultMessage ) ) ;
136157 await waitFor ( ( ) => {
137- expect ( getByText ( '5 broken links' ) ) . toBeInTheDocument ( ) ;
138- expect ( getByText ( '5 locked links' ) ) . toBeInTheDocument ( ) ;
158+ expect ( getByText ( scanResultsMessages . noBrokenLinksCard . defaultMessage ) ) . toBeInTheDocument ( ) ;
139159 } ) ;
160+ } ) ;
161+
162+ it ( 'should show error message if request does not go through' , async ( ) => {
163+ axiosMock
164+ . onPost ( postLinkCheckCourseApiUrl ( courseId ) )
165+ . reply ( 500 ) ;
166+ render ( < OptimizerPage /> ) ;
167+ expect ( screen . getByText ( messages . headingTitle . defaultMessage ) ) . toBeInTheDocument ( ) ;
168+ fireEvent . click ( screen . getByText ( messages . buttonTitle . defaultMessage ) ) ;
169+ await waitFor ( ( ) => {
170+ expect ( screen . getByText ( generalMessages . supportText . defaultMessage ) ) . toBeInTheDocument ( ) ;
171+ } ) ;
172+ } ) ;
173+
174+ it ( 'should show only broken links when brokenLinks filter is selected' , async ( ) => {
175+ const {
176+ getByText,
177+ getByLabelText,
178+ queryByText,
179+ container,
180+ } = await setupOptimizerPage ( ) ;
181+ // Check if the modal is opened
182+ expect ( getByText ( 'Broken' ) ) . toBeInTheDocument ( ) ;
183+ // Select the broken links checkbox
184+ fireEvent . click ( getByLabelText ( scanResultsMessages . brokenLabel . defaultMessage ) ) ;
185+
140186 const collapsibleTrigger = container . querySelector ( '.collapsible-trigger' ) ;
141187 expect ( collapsibleTrigger ) . toBeInTheDocument ( ) ;
142188 fireEvent . click ( collapsibleTrigger ) ;
189+
143190 await waitFor ( ( ) => {
144- expect ( getAllByText ( scanResultsMessages . brokenLinkStatus . defaultMessage ) [ 0 ] ) . toBeInTheDocument ( ) ;
145- expect ( queryAllByText ( scanResultsMessages . lockedLinkStatus . defaultMessage ) [ 0 ] ) . toBeInTheDocument ( ) ;
146- expect ( queryAllByText ( scanResultsMessages . recommendedManualCheckText . defaultMessage ) [ 0 ] ) . toBeInTheDocument ( ) ;
147- const brokenLinks = getAllByText ( 'https://example.com/broken-link-algo' ) ;
148- expect ( brokenLinks . length ) . toBeGreaterThan ( 0 ) ;
149- fireEvent . click ( brokenLinks [ 0 ] ) ;
150- const lockedLinks = getAllByText ( 'https://example.com/locked-link-algo' ) ;
151- expect ( lockedLinks . length ) . toBeGreaterThan ( 0 ) ;
152- fireEvent . click ( lockedLinks [ 0 ] ) ;
153- fireEvent . click ( ( getAllByText ( 'Go to Block' ) ) [ 0 ] ) ;
191+ expect ( getByText ( 'Test Broken Links' ) ) . toBeInTheDocument ( ) ;
192+ expect ( queryByText ( 'Test Locked Links' ) ) . not . toBeInTheDocument ( ) ;
193+ expect ( queryByText ( 'Test Manual Links' ) ) . not . toBeInTheDocument ( ) ;
154194 } ) ;
155195 } ) ;
156196
157- it ( 'should not list locked links results when show locked links is unchecked ' , async ( ) => {
197+ it ( 'should show only manual links when manualLinks filter is selected ' , async ( ) => {
158198 const {
159- getByText, getAllByText, getByLabelText, queryAllByText, queryByText, container,
160- } = render ( < OptimizerPage /> ) ;
161- expect ( getByText ( messages . headingTitle . defaultMessage ) ) . toBeInTheDocument ( ) ;
162- fireEvent . click ( getByText ( messages . buttonTitle . defaultMessage ) ) ;
163- await waitFor ( ( ) => {
164- expect ( getByText ( '5 broken links' ) ) . toBeInTheDocument ( ) ;
165- } ) ;
166- fireEvent . click ( getByLabelText ( scanResultsMessages . lockedCheckboxLabel . defaultMessage ) ) ;
199+ getByText,
200+ getByLabelText,
201+ queryByText,
202+ container,
203+ } = await setupOptimizerPage ( ) ;
204+ // Check if the modal is opened
205+ expect ( getByText ( 'Manual' ) ) . toBeInTheDocument ( ) ;
206+ // Select the manual links checkbox
207+ fireEvent . click ( getByLabelText ( scanResultsMessages . manualLabel . defaultMessage ) ) ;
208+
167209 const collapsibleTrigger = container . querySelector ( '.collapsible-trigger' ) ;
168210 expect ( collapsibleTrigger ) . toBeInTheDocument ( ) ;
169211 fireEvent . click ( collapsibleTrigger ) ;
212+
170213 await waitFor ( ( ) => {
171- expect ( queryByText ( '5 locked links ') ) . not . toBeInTheDocument ( ) ;
172- expect ( getAllByText ( scanResultsMessages . brokenLinkStatus . defaultMessage ) [ 0 ] ) . toBeInTheDocument ( ) ;
173- expect ( queryAllByText ( scanResultsMessages . lockedLinkStatus . defaultMessage ) ?. [ 0 ] ) . toBeUndefined ( ) ;
214+ expect ( getByText ( 'Test Manual Links ') ) . toBeInTheDocument ( ) ;
215+ expect ( queryByText ( 'Test Broken Links' ) ) . not . toBeInTheDocument ( ) ;
216+ expect ( queryByText ( 'Test Locked Links' ) ) . not . toBeInTheDocument ( ) ;
174217 } ) ;
175218 } ) ;
176219
177- it ( 'should show no broken links found message' , async ( ) => {
178- axiosMock
179- . onGet ( getLinkCheckStatusApiUrl ( courseId ) )
180- . reply ( 200 , { LinkCheckStatus : 'Succeeded' } ) ;
181- const { getByText } = render ( < OptimizerPage /> ) ;
182- expect ( getByText ( messages . headingTitle . defaultMessage ) ) . toBeInTheDocument ( ) ;
183- fireEvent . click ( getByText ( messages . buttonTitle . defaultMessage ) ) ;
220+ it ( 'should show only manual & locked links when manual & locked Links filters are selected, ignore broken links' , async ( ) => {
221+ const {
222+ getByText,
223+ getByLabelText,
224+ queryByText,
225+ container,
226+ } = await setupOptimizerPage ( ) ;
227+ // Check if the modal is opened
228+ expect ( getByText ( 'Manual' ) ) . toBeInTheDocument ( ) ;
229+ expect ( getByText ( 'Locked' ) ) . toBeInTheDocument ( ) ;
230+ // Select the manual & locked links checkbox
231+ fireEvent . click ( getByLabelText ( scanResultsMessages . manualLabel . defaultMessage ) ) ;
232+ fireEvent . click ( getByLabelText ( scanResultsMessages . lockedLabel . defaultMessage ) ) ;
233+
234+ const collapsibleTrigger = container . querySelector ( '.collapsible-trigger' ) ;
235+ expect ( collapsibleTrigger ) . toBeInTheDocument ( ) ;
236+ fireEvent . click ( collapsibleTrigger ) ;
237+
184238 await waitFor ( ( ) => {
185- expect ( getByText ( scanResultsMessages . noBrokenLinksCard . defaultMessage ) ) . toBeInTheDocument ( ) ;
239+ expect ( getByText ( 'Test Manual Links' ) ) . toBeInTheDocument ( ) ;
240+ expect ( getByText ( 'Test Locked Links' ) ) . toBeInTheDocument ( ) ;
241+ expect ( queryByText ( 'Test Broken Links' ) ) . not . toBeInTheDocument ( ) ;
186242 } ) ;
187243 } ) ;
188244
189- it ( 'should show error message if request does not go through' , async ( ) => {
190- axiosMock
191- . onPost ( postLinkCheckCourseApiUrl ( courseId ) )
192- . reply ( 500 ) ;
193- render ( < OptimizerPage /> ) ;
194- expect ( screen . getByText ( messages . headingTitle . defaultMessage ) ) . toBeInTheDocument ( ) ;
195- fireEvent . click ( screen . getByText ( messages . buttonTitle . defaultMessage ) ) ;
245+ it ( 'should show all links when all filters are selected' , async ( ) => {
246+ const {
247+ getByText,
248+ getByLabelText,
249+ container,
250+ } = await setupOptimizerPage ( ) ;
251+ // Check if the modal is opened
252+ expect ( getByText ( 'Broken' ) ) . toBeInTheDocument ( ) ;
253+ expect ( getByText ( 'Manual' ) ) . toBeInTheDocument ( ) ;
254+ expect ( getByText ( 'Locked' ) ) . toBeInTheDocument ( ) ;
255+ // Select the all checkboxes
256+ fireEvent . click ( getByLabelText ( scanResultsMessages . brokenLabel . defaultMessage ) ) ;
257+ fireEvent . click ( getByLabelText ( scanResultsMessages . lockedLabel . defaultMessage ) ) ;
258+ fireEvent . click ( getByLabelText ( scanResultsMessages . manualLabel . defaultMessage ) ) ;
259+
260+ const collapsibleTrigger = container . querySelector ( '.collapsible-trigger' ) ;
261+ expect ( collapsibleTrigger ) . toBeInTheDocument ( ) ;
262+ fireEvent . click ( collapsibleTrigger ) ;
263+
196264 await waitFor ( ( ) => {
197- expect ( screen . getByText ( generalMessages . supportText . defaultMessage ) ) . toBeInTheDocument ( ) ;
265+ expect ( getByText ( 'Test Broken Links' ) ) . toBeInTheDocument ( ) ;
266+ expect ( getByText ( 'Test Manual Links' ) ) . toBeInTheDocument ( ) ;
267+ expect ( getByText ( 'Test Locked Links' ) ) . toBeInTheDocument ( ) ;
198268 } ) ;
199269 } ) ;
200270 } ) ;
0 commit comments