4
4
ComponentDidAppearEvent ,
5
5
ComponentDidDisappearEvent ,
6
6
CommandCompletedEvent ,
7
+ ModalAttemptedToDismissEvent ,
7
8
ScreenPoppedEvent ,
8
9
ModalDismissedEvent ,
9
10
BottomTabSelectedEvent ,
@@ -19,6 +20,7 @@ import {
19
20
useNavigationComponentDidDisappear ,
20
21
useNavigationCommand ,
21
22
useNavigationCommandComplete ,
23
+ useNavigationModalAttemptedToDismiss ,
22
24
useNavigationModalDismiss ,
23
25
useNavigationScreenPop ,
24
26
useNavigationBottomTabSelect ,
@@ -431,6 +433,97 @@ describe('useNavigationCommandComplete', () => {
431
433
} )
432
434
} )
433
435
436
+ describe ( 'useNavigationModalAttemptedToDismiss' , ( ) => {
437
+ let triggerEvent : ( event : ModalAttemptedToDismissEvent ) => void
438
+ let mockRemoveSubscription : ( ) => void
439
+ let mockHandler : ( ) => void
440
+
441
+ beforeEach ( ( ) => {
442
+ mockHandler = jest . fn ( ( ) => { } )
443
+ mockRemoveSubscription = jest . fn ( )
444
+
445
+ Navigation . events = jest . fn ( ) . mockReturnValue ( {
446
+ registerModalAttemptedToDismissListener : jest . fn ( callback => {
447
+ triggerEvent = callback
448
+
449
+ return { remove : mockRemoveSubscription }
450
+ } ) ,
451
+ } )
452
+ } )
453
+
454
+ it ( 'should remove the event listener on unmount' , ( ) => {
455
+ const { result, unmount } = renderHook ( ( ) => {
456
+ useNavigationModalAttemptedToDismiss ( ( ) => { } )
457
+ } )
458
+
459
+ unmount ( )
460
+
461
+ expect ( mockRemoveSubscription ) . toBeCalledTimes ( 1 )
462
+
463
+ expect ( result . current ) . toBeUndefined ( )
464
+ expect ( result . error ) . toBeUndefined ( )
465
+ } )
466
+
467
+ it ( 'should never call the handler if no event was triggered' , ( ) => {
468
+ const { result } = renderHook ( ( ) => {
469
+ useNavigationModalAttemptedToDismiss ( ( ) => { } )
470
+ } )
471
+
472
+ expect ( mockHandler ) . toBeCalledTimes ( 0 )
473
+
474
+ expect ( result . current ) . toBeUndefined ( )
475
+ expect ( result . error ) . toBeUndefined ( )
476
+ } )
477
+
478
+ it ( 'should call handler twice when componentId is not provided' , ( ) => {
479
+ const { result } = renderHook ( ( ) => {
480
+ useNavigationModalAttemptedToDismiss ( mockHandler )
481
+ } )
482
+
483
+ const event1 = { componentId : 'COMPONENT_ID_1' }
484
+ triggerEvent ( event1 )
485
+
486
+ const event2 = { componentId : 'COMPONENT_ID_2' }
487
+ triggerEvent ( event2 )
488
+
489
+ expect ( mockHandler ) . toBeCalledTimes ( 2 )
490
+ expect ( mockHandler ) . toHaveBeenNthCalledWith ( 1 , event1 )
491
+ expect ( mockHandler ) . toHaveBeenNthCalledWith ( 2 , event2 )
492
+
493
+ expect ( result . current ) . toBeUndefined ( )
494
+ expect ( result . error ) . toBeUndefined ( )
495
+ } )
496
+
497
+ it ( 'should call handler once if componentId provided' , ( ) => {
498
+ const { result } = renderHook ( ( ) => {
499
+ useNavigationModalAttemptedToDismiss ( mockHandler , 'COMPONENT_ID_1' )
500
+ } )
501
+
502
+ const event = { componentId : 'COMPONENT_ID_1' }
503
+ triggerEvent ( event )
504
+
505
+ expect ( mockHandler ) . toBeCalledTimes ( 1 )
506
+ expect ( mockHandler ) . toBeCalledWith ( event )
507
+
508
+ expect ( result . current ) . toBeUndefined ( )
509
+ expect ( result . error ) . toBeUndefined ( )
510
+ } )
511
+
512
+ it ( 'should never call the handler if componentId does not match' , ( ) => {
513
+ const { result } = renderHook ( ( ) => {
514
+ useNavigationModalAttemptedToDismiss ( mockHandler , 'COMPONENT_ID_1' )
515
+ } )
516
+
517
+ const event = { componentId : 'COMPONENT_ID_2' }
518
+ triggerEvent ( event )
519
+
520
+ expect ( mockHandler ) . toBeCalledTimes ( 0 )
521
+
522
+ expect ( result . current ) . toBeUndefined ( )
523
+ expect ( result . error ) . toBeUndefined ( )
524
+ } )
525
+ } )
526
+
434
527
describe ( 'useNavigationScreenPop' , ( ) => {
435
528
let triggerEvent : ( event : ScreenPoppedEvent ) => void
436
529
let mockRemoveSubscription : ( ) => void
0 commit comments