@@ -102,6 +102,7 @@ jest.mock('../../lib/storage-utils', () => ({
102102} ) ) ;
103103
104104const mockSetData = jest . fn ( ) ;
105+ const mockSendVerificationCode = jest . fn ( ) ;
105106jest . mock ( '../../models' , ( ) => {
106107 return {
107108 ...jest . requireActual ( '../../models' ) ,
@@ -110,6 +111,9 @@ jest.mock('../../models', () => {
110111 setDataType : mockSetData ,
111112 } ;
112113 } ,
114+ useSession : ( ) => ( {
115+ sendVerificationCode : mockSendVerificationCode ,
116+ } ) ,
113117 } ;
114118} ) ;
115119
@@ -446,6 +450,39 @@ describe('Signin component', () => {
446450 } ) ;
447451 } ) ;
448452
453+ it ( 'calls sendVerificationCode with successful signin, but unverified session' , async ( ) => {
454+ const beginSigninHandler = jest . fn ( ) . mockReturnValueOnce (
455+ createBeginSigninResponse ( {
456+ verified : false ,
457+ verificationReason : undefined ,
458+ } )
459+ ) ;
460+
461+ render ( { beginSigninHandler } ) ;
462+
463+ await enterPasswordAndSubmit ( ) ;
464+ await waitFor ( ( ) => {
465+ expect ( mockSendVerificationCode ) . toHaveBeenCalledTimes ( 1 ) ;
466+ } ) ;
467+ } ) ;
468+
469+ it ( 'does not call sendVerificationCode when reason is signup, on successful signin unverified session' , async ( ) => {
470+ const beginSigninHandler = jest . fn ( ) . mockReturnValueOnce (
471+ createBeginSigninResponse ( {
472+ verified : false ,
473+ verificationReason : VerificationReasons . SIGN_UP ,
474+ } )
475+ ) ;
476+
477+ render ( { beginSigninHandler } ) ;
478+
479+ await enterPasswordAndSubmit ( ) ;
480+ await waitFor ( ( ) => {
481+ expect ( navigate ) . toHaveBeenCalled ( ) ;
482+ } ) ;
483+ expect ( mockSendVerificationCode ) . not . toHaveBeenCalled ( ) ;
484+ } ) ;
485+
449486 it ( 'OAuth forced 2FA without TOTP navigates to /signin_token_code (email OTP first)' , async ( ) => {
450487 const beginSigninHandler = jest . fn ( ) . mockReturnValueOnce (
451488 createBeginSigninResponse ( {
0 commit comments