@@ -9,11 +9,14 @@ import { sendTrackEvent } from '@edx/frontend-platform/analytics';
9
9
import { fetchCourse } from '@src/courseware/data' ;
10
10
import { processEvent } from '@src/course-home/data/thunks' ;
11
11
import { useEventListener } from '@src/generic/hooks' ;
12
+ import { useSequenceNavigationMetadata } from '@src/courseware/course/sequence/sequence-navigation/hooks' ;
12
13
13
14
import { messageTypes } from '../constants' ;
14
15
15
16
import useIFrameBehavior , { stateKeys } from './useIFrameBehavior' ;
16
17
18
+ const mockNavigate = jest . fn ( ) ;
19
+
17
20
jest . mock ( '@edx/frontend-platform' , ( ) => ( {
18
21
getConfig : jest . fn ( ) ,
19
22
} ) ) ;
@@ -28,6 +31,7 @@ jest.mock('react', () => ({
28
31
29
32
jest . mock ( 'react-redux' , ( ) => ( {
30
33
useDispatch : jest . fn ( ) ,
34
+ useSelector : jest . fn ( ) ,
31
35
} ) ) ;
32
36
33
37
jest . mock ( 'lodash' , ( ) => ( {
@@ -50,6 +54,16 @@ jest.mock('@src/course-home/data/thunks', () => ({
50
54
jest . mock ( '@src/generic/hooks' , ( ) => ( {
51
55
useEventListener : jest . fn ( ) ,
52
56
} ) ) ;
57
+ jest . mock ( '@src/generic/model-store' , ( ) => ( {
58
+ useModel : ( ) => ( { unitIds : [ 'unit1' , 'unit2' ] , entranceExamData : { entranceExamPassed : null } } ) ,
59
+ } ) ) ;
60
+ jest . mock ( 'react-router-dom' , ( ) => ( {
61
+ ...jest . requireActual ( 'react-router-dom' ) ,
62
+ useNavigate : ( ) => mockNavigate ,
63
+ } ) ) ;
64
+
65
+ jest . mock ( '@src/courseware/course/sequence/sequence-navigation/hooks' ) ;
66
+ useSequenceNavigationMetadata . mockReturnValue ( { isLastUnit : false , nextLink : '/next-unit-link' } ) ;
53
67
54
68
const state = mockUseKeyedState ( stateKeys ) ;
55
69
@@ -373,4 +387,26 @@ describe('useIFrameBehavior hook', () => {
373
387
expect ( hook . hasLoaded ) . toEqual ( stateVals . hasLoaded ) ;
374
388
} ) ;
375
389
} ) ;
390
+ describe ( 'navigate link for the next unit on auto advance' , ( ) => {
391
+ it ( 'test for link when it is not last unit' , ( ) => {
392
+ hook = useIFrameBehavior ( props ) ;
393
+ const { cb } = useEventListener . mock . calls [ 0 ] [ 1 ] ;
394
+ const autoAdvanceMessage = ( ) => ( {
395
+ data : { type : messageTypes . autoAdvance } ,
396
+ } ) ;
397
+ cb ( autoAdvanceMessage ( ) ) ;
398
+ expect ( mockNavigate ) . toHaveBeenCalledWith ( '/next-unit-link' ) ;
399
+ } ) ;
400
+ it ( 'test for link when it is last unit' , ( ) => {
401
+ useSequenceNavigationMetadata . mockReset ( ) ;
402
+ useSequenceNavigationMetadata . mockReturnValue ( { isLastUnit : true , nextLink : '/next-unit-link' } ) ;
403
+ hook = useIFrameBehavior ( props ) ;
404
+ const { cb } = useEventListener . mock . calls [ 0 ] [ 1 ] ;
405
+ const autoAdvanceMessage = ( ) => ( {
406
+ data : { type : messageTypes . autoAdvance } ,
407
+ } ) ;
408
+ cb ( autoAdvanceMessage ( ) ) ;
409
+ expect ( mockNavigate ) . not . toHaveBeenCalled ( ) ;
410
+ } ) ;
411
+ } ) ;
376
412
} ) ;
0 commit comments