@@ -183,7 +183,7 @@ describe('Clerk singleton', () => {
183183 await sut . setActive ( { session : null } ) ;
184184 await waitFor ( ( ) => {
185185 expect ( mockSession . touch ) . not . toHaveBeenCalled ( ) ;
186- expect ( evenBusSpy ) . toBeCalledWith ( 'token:update' , { token : null } ) ;
186+ expect ( evenBusSpy ) . toHaveBeenCalledWith ( 'token:update' , { token : null } ) ;
187187 } ) ;
188188 } ) ;
189189
@@ -207,7 +207,7 @@ describe('Clerk singleton', () => {
207207 await sut . setActive ( { session : mockSession as any as ActiveSessionResource } ) ;
208208 await waitFor ( ( ) => {
209209 expect ( mockSession . touch ) . not . toHaveBeenCalled ( ) ;
210- expect ( mockSession . getToken ) . toBeCalled ( ) ;
210+ expect ( mockSession . getToken ) . toHaveBeenCalled ( ) ;
211211 } ) ;
212212 } ) ;
213213
@@ -308,7 +308,7 @@ describe('Clerk singleton', () => {
308308 expect ( executionOrder ) . toEqual ( [ 'session.touch' , 'set cookie' , 'before emit' ] ) ;
309309 expect ( mockSession2 . touch ) . toHaveBeenCalled ( ) ;
310310 expect ( mockSession2 . getToken ) . toHaveBeenCalled ( ) ;
311- expect ( beforeEmitMock ) . toBeCalledWith ( mockSession2 ) ;
311+ expect ( beforeEmitMock ) . toHaveBeenCalledWith ( mockSession2 ) ;
312312 expect ( sut . session ) . toMatchObject ( mockSession2 ) ;
313313 } ) ;
314314 } ) ;
@@ -342,7 +342,7 @@ describe('Clerk singleton', () => {
342342 expect ( mockSession . touch ) . toHaveBeenCalled ( ) ;
343343 expect ( mockSession . getToken ) . toHaveBeenCalled ( ) ;
344344 expect ( ( mockSession as any as ActiveSessionResource ) ?. lastActiveOrganizationId ) . toEqual ( 'org_id' ) ;
345- expect ( beforeEmitMock ) . toBeCalledWith ( mockSession ) ;
345+ expect ( beforeEmitMock ) . toHaveBeenCalledWith ( mockSession ) ;
346346 expect ( sut . session ) . toMatchObject ( mockSession ) ;
347347 } ) ;
348348 } ) ;
@@ -408,8 +408,8 @@ describe('Clerk singleton', () => {
408408 expect ( executionOrder ) . toEqual ( [ 'session.touch' , 'before emit' ] ) ;
409409 expect ( mockSession . touch ) . toHaveBeenCalled ( ) ;
410410 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 ) ;
413413 expect ( sut . session ) . toMatchObject ( mockSession ) ;
414414 } ) ;
415415 } ) ;
@@ -619,15 +619,15 @@ describe('Clerk singleton', () => {
619619 const toUrl = 'http://test.host/' ;
620620 await sut . navigate ( toUrl ) ;
621621 expect ( mockHref ) . toHaveBeenCalledWith ( toUrl ) ;
622- expect ( logSpy ) . not . toBeCalled ( ) ;
622+ expect ( logSpy ) . not . toHaveBeenCalled ( ) ;
623623 } ) ;
624624
625625 it ( 'uses window location if a custom navigate is defined but destination has different origin' , async ( ) => {
626626 await sut . load ( mockedLoadOptions ) ;
627627 const toUrl = 'https://www.origindifferent.com/' ;
628628 await sut . navigate ( toUrl ) ;
629629 expect ( mockHref ) . toHaveBeenCalledWith ( toUrl ) ;
630- expect ( logSpy ) . not . toBeCalled ( ) ;
630+ expect ( logSpy ) . not . toHaveBeenCalled ( ) ;
631631 } ) ;
632632
633633 it ( 'wraps custom navigate method in a promise if provided and it sync' , async ( ) => {
@@ -637,7 +637,7 @@ describe('Clerk singleton', () => {
637637 expect ( res . then ) . toBeDefined ( ) ;
638638 expect ( mockHref ) . not . toHaveBeenCalled ( ) ;
639639 expect ( mockNavigate . mock . calls [ 0 ] [ 0 ] ) . toBe ( '/path#hash' ) ;
640- expect ( logSpy ) . not . toBeCalled ( ) ;
640+ expect ( logSpy ) . not . toHaveBeenCalled ( ) ;
641641 } ) ;
642642
643643 it ( 'logs navigation external navigation when routerDebug is enabled' , async ( ) => {
@@ -646,8 +646,8 @@ describe('Clerk singleton', () => {
646646 await sut . navigate ( toUrl ) ;
647647 expect ( mockHref ) . toHaveBeenCalledWith ( toUrl ) ;
648648
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 } ` ) ;
651651 } ) ;
652652
653653 it ( 'logs navigation custom navigation when routerDebug is enabled' , async ( ) => {
@@ -658,8 +658,8 @@ describe('Clerk singleton', () => {
658658 expect ( mockHref ) . not . toHaveBeenCalled ( ) ;
659659 expect ( mockNavigate . mock . calls [ 0 ] [ 0 ] ) . toBe ( '/path#hash' ) ;
660660
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 } ` ) ;
663663 } ) ;
664664 } ) ;
665665
@@ -728,6 +728,66 @@ describe('Clerk singleton', () => {
728728 } ) ;
729729 } ) ;
730730
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+
731791 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 ( ) => {
732792 mockEnvironmentFetch . mockReturnValue (
733793 Promise . resolve ( {
0 commit comments