@@ -183,7 +183,7 @@ describe('Clerk singleton', () => {
183
183
await sut . setActive ( { session : null } ) ;
184
184
await waitFor ( ( ) => {
185
185
expect ( mockSession . touch ) . not . toHaveBeenCalled ( ) ;
186
- expect ( evenBusSpy ) . toBeCalledWith ( 'token:update' , { token : null } ) ;
186
+ expect ( evenBusSpy ) . toHaveBeenCalledWith ( 'token:update' , { token : null } ) ;
187
187
} ) ;
188
188
} ) ;
189
189
@@ -207,7 +207,7 @@ describe('Clerk singleton', () => {
207
207
await sut . setActive ( { session : mockSession as any as ActiveSessionResource } ) ;
208
208
await waitFor ( ( ) => {
209
209
expect ( mockSession . touch ) . not . toHaveBeenCalled ( ) ;
210
- expect ( mockSession . getToken ) . toBeCalled ( ) ;
210
+ expect ( mockSession . getToken ) . toHaveBeenCalled ( ) ;
211
211
} ) ;
212
212
} ) ;
213
213
@@ -308,7 +308,7 @@ describe('Clerk singleton', () => {
308
308
expect ( executionOrder ) . toEqual ( [ 'session.touch' , 'set cookie' , 'before emit' ] ) ;
309
309
expect ( mockSession2 . touch ) . toHaveBeenCalled ( ) ;
310
310
expect ( mockSession2 . getToken ) . toHaveBeenCalled ( ) ;
311
- expect ( beforeEmitMock ) . toBeCalledWith ( mockSession2 ) ;
311
+ expect ( beforeEmitMock ) . toHaveBeenCalledWith ( mockSession2 ) ;
312
312
expect ( sut . session ) . toMatchObject ( mockSession2 ) ;
313
313
} ) ;
314
314
} ) ;
@@ -342,7 +342,7 @@ describe('Clerk singleton', () => {
342
342
expect ( mockSession . touch ) . toHaveBeenCalled ( ) ;
343
343
expect ( mockSession . getToken ) . toHaveBeenCalled ( ) ;
344
344
expect ( ( mockSession as any as ActiveSessionResource ) ?. lastActiveOrganizationId ) . toEqual ( 'org_id' ) ;
345
- expect ( beforeEmitMock ) . toBeCalledWith ( mockSession ) ;
345
+ expect ( beforeEmitMock ) . toHaveBeenCalledWith ( mockSession ) ;
346
346
expect ( sut . session ) . toMatchObject ( mockSession ) ;
347
347
} ) ;
348
348
} ) ;
@@ -408,8 +408,8 @@ describe('Clerk singleton', () => {
408
408
expect ( executionOrder ) . toEqual ( [ 'session.touch' , 'before emit' ] ) ;
409
409
expect ( mockSession . touch ) . toHaveBeenCalled ( ) ;
410
410
expect ( ( mockSession as any as ActiveSessionResource ) ?. lastActiveOrganizationId ) . toEqual ( 'org_id' ) ;
411
- expect ( mockSession . getToken ) . toBeCalled ( ) ;
412
- expect ( beforeEmitMock ) . toBeCalledWith ( mockSession ) ;
411
+ expect ( mockSession . getToken ) . toHaveBeenCalled ( ) ;
412
+ expect ( beforeEmitMock ) . toHaveBeenCalledWith ( mockSession ) ;
413
413
expect ( sut . session ) . toMatchObject ( mockSession ) ;
414
414
} ) ;
415
415
} ) ;
@@ -619,15 +619,15 @@ describe('Clerk singleton', () => {
619
619
const toUrl = 'http://test.host/' ;
620
620
await sut . navigate ( toUrl ) ;
621
621
expect ( mockHref ) . toHaveBeenCalledWith ( toUrl ) ;
622
- expect ( logSpy ) . not . toBeCalled ( ) ;
622
+ expect ( logSpy ) . not . toHaveBeenCalled ( ) ;
623
623
} ) ;
624
624
625
625
it ( 'uses window location if a custom navigate is defined but destination has different origin' , async ( ) => {
626
626
await sut . load ( mockedLoadOptions ) ;
627
627
const toUrl = 'https://www.origindifferent.com/' ;
628
628
await sut . navigate ( toUrl ) ;
629
629
expect ( mockHref ) . toHaveBeenCalledWith ( toUrl ) ;
630
- expect ( logSpy ) . not . toBeCalled ( ) ;
630
+ expect ( logSpy ) . not . toHaveBeenCalled ( ) ;
631
631
} ) ;
632
632
633
633
it ( 'wraps custom navigate method in a promise if provided and it sync' , async ( ) => {
@@ -637,7 +637,7 @@ describe('Clerk singleton', () => {
637
637
expect ( res . then ) . toBeDefined ( ) ;
638
638
expect ( mockHref ) . not . toHaveBeenCalled ( ) ;
639
639
expect ( mockNavigate . mock . calls [ 0 ] [ 0 ] ) . toBe ( '/path#hash' ) ;
640
- expect ( logSpy ) . not . toBeCalled ( ) ;
640
+ expect ( logSpy ) . not . toHaveBeenCalled ( ) ;
641
641
} ) ;
642
642
643
643
it ( 'logs navigation external navigation when routerDebug is enabled' , async ( ) => {
@@ -646,8 +646,8 @@ describe('Clerk singleton', () => {
646
646
await sut . navigate ( toUrl ) ;
647
647
expect ( mockHref ) . toHaveBeenCalledWith ( toUrl ) ;
648
648
649
- expect ( logSpy ) . toBeCalledTimes ( 1 ) ;
650
- expect ( logSpy ) . toBeCalledWith ( `Clerk is navigating to: ${ toUrl } ` ) ;
649
+ expect ( logSpy ) . toHaveBeenCalledTimes ( 1 ) ;
650
+ expect ( logSpy ) . toHaveBeenCalledWith ( `Clerk is navigating to: ${ toUrl } ` ) ;
651
651
} ) ;
652
652
653
653
it ( 'logs navigation custom navigation when routerDebug is enabled' , async ( ) => {
@@ -658,8 +658,8 @@ describe('Clerk singleton', () => {
658
658
expect ( mockHref ) . not . toHaveBeenCalled ( ) ;
659
659
expect ( mockNavigate . mock . calls [ 0 ] [ 0 ] ) . toBe ( '/path#hash' ) ;
660
660
661
- expect ( logSpy ) . toBeCalledTimes ( 1 ) ;
662
- expect ( logSpy ) . toBeCalledWith ( `Clerk is navigating to: ${ toUrl } ` ) ;
661
+ expect ( logSpy ) . toHaveBeenCalledTimes ( 1 ) ;
662
+ expect ( logSpy ) . toHaveBeenCalledWith ( `Clerk is navigating to: ${ toUrl } ` ) ;
663
663
} ) ;
664
664
} ) ;
665
665
@@ -728,6 +728,66 @@ describe('Clerk singleton', () => {
728
728
} ) ;
729
729
} ) ;
730
730
731
+ it ( 'does not initiate the transfer flow when transferable: false is passed' , async ( ) => {
732
+ mockEnvironmentFetch . mockReturnValue (
733
+ Promise . resolve ( {
734
+ authConfig : { } ,
735
+ userSettings : mockUserSettings ,
736
+ displayConfig : mockDisplayConfig ,
737
+ isSingleSession : ( ) => false ,
738
+ isProduction : ( ) => false ,
739
+ isDevelopmentOrStaging : ( ) => true ,
740
+ onWindowLocationHost : ( ) => false ,
741
+ } ) ,
742
+ ) ;
743
+
744
+ mockClientFetch . mockReturnValue (
745
+ Promise . resolve ( {
746
+ activeSessions : [ ] ,
747
+ signIn : new SignIn ( {
748
+ status : 'needs_identifier' ,
749
+ first_factor_verification : {
750
+ status : 'transferable' ,
751
+ strategy : 'oauth_google' ,
752
+ external_verification_redirect_url : '' ,
753
+ error : {
754
+ code : 'external_account_not_found' ,
755
+ long_message : 'The External Account was not found.' ,
756
+ message : 'Invalid external account' ,
757
+ } ,
758
+ } ,
759
+ second_factor_verification : null ,
760
+ identifier : '' ,
761
+ user_data : null ,
762
+ created_session_id : null ,
763
+ created_user_id : null ,
764
+ } as any as SignInJSON ) ,
765
+ signUp : new SignUp ( null ) ,
766
+ } ) ,
767
+ ) ;
768
+
769
+ const mockSetActive = jest . fn ( ) ;
770
+ const mockSignUpCreate = jest
771
+ . fn ( )
772
+ . mockReturnValue ( Promise . resolve ( { status : 'complete' , createdSessionId : '123' } ) ) ;
773
+
774
+ const sut = new Clerk ( productionPublishableKey ) ;
775
+ await sut . load ( mockedLoadOptions ) ;
776
+ if ( ! sut . client ) {
777
+ fail ( 'we should always have a client' ) ;
778
+ }
779
+ sut . client . signUp . create = mockSignUpCreate ;
780
+ sut . setActive = mockSetActive ;
781
+
782
+ await sut . handleRedirectCallback ( { transferable : false } ) ;
783
+
784
+ await waitFor ( ( ) => {
785
+ expect ( mockSignUpCreate ) . not . toHaveBeenCalledWith ( { transfer : true } ) ;
786
+ expect ( mockSetActive ) . not . toHaveBeenCalled ( ) ;
787
+ expect ( mockNavigate ) . toHaveBeenCalledWith ( '/sign-in' , undefined ) ;
788
+ } ) ;
789
+ } ) ;
790
+
731
791
it ( 'creates a new sign up and navigates to the continue sign-up path if the user was not found during sso signup and there are missing requirements' , async ( ) => {
732
792
mockEnvironmentFetch . mockReturnValue (
733
793
Promise . resolve ( {
0 commit comments