@@ -1425,6 +1425,16 @@ def test_password_reset_no_settings(self, user_mgt_app):
14251425 assert request ['requestType' ] == 'PASSWORD_RESET'
14261426 self ._validate_request (request )
14271427
1428+ def test_verify_and_change_email_no_settings (self , user_mgt_app ):
1429+ _ , recorder = _instrument_user_manager (user_mgt_app , 200 , '{"oobLink":"https://testlink"}' )
1430+ link = auth ._get_client (user_mgt_app )._user_manager .generate_email_action_link (
1431+ 'VERIFY_AND_CHANGE_EMAIL' , 'test@test.com' , new_email = 'new@test.com' )
1432+ request = json .loads (recorder [0 ].body .decode ())
1433+
1434+ assert link == 'https://testlink'
1435+ assert request ['requestType' ] == 'VERIFY_AND_CHANGE_EMAIL'
1436+ self ._validate_request (request , new_email = 'new@test.com' )
1437+
14281438 def test_email_signin_with_settings (self , user_mgt_app ):
14291439 _ , recorder = _instrument_user_manager (user_mgt_app , 200 , '{"oobLink":"https://testlink"}' )
14301440 link = auth .generate_sign_in_with_email_link ('test@test.com' ,
@@ -1458,6 +1468,20 @@ def test_password_reset_with_settings(self, user_mgt_app):
14581468 assert request ['requestType' ] == 'PASSWORD_RESET'
14591469 self ._validate_request (request , MOCK_ACTION_CODE_SETTINGS )
14601470
1471+ def test_verify_and_change_email_with_settings (self , user_mgt_app ):
1472+ _ , recorder = _instrument_user_manager (user_mgt_app , 200 , '{"oobLink":"https://testlink"}' )
1473+ link = auth ._get_client (user_mgt_app )._user_manager .generate_email_action_link (
1474+ "VERIFY_AND_CHANGE_EMAIL" ,
1475+ "test@test.com" ,
1476+ action_code_settings = MOCK_ACTION_CODE_SETTINGS ,
1477+ new_email = "new@test.com" ,
1478+ )
1479+ request = json .loads (recorder [0 ].body .decode ())
1480+
1481+ assert link == 'https://testlink'
1482+ assert request ['requestType' ] == 'VERIFY_AND_CHANGE_EMAIL'
1483+ self ._validate_request (request , MOCK_ACTION_CODE_SETTINGS , new_email = 'new@test.com' )
1484+
14611485 @pytest .mark .parametrize ('func' , [
14621486 auth .generate_sign_in_with_email_link ,
14631487 auth .generate_email_verification_link ,
@@ -1547,9 +1571,20 @@ def test_bad_action_type(self, user_mgt_app):
15471571 .generate_email_action_link ('BAD_TYPE' , 'test@test.com' ,
15481572 action_code_settings = MOCK_ACTION_CODE_SETTINGS )
15491573
1550- def _validate_request (self , request , settings = None ):
1574+ def test_verify_and_change_email_missing_new_email (self , user_mgt_app ):
1575+ with pytest .raises (ValueError ) as excinfo :
1576+ auth ._get_client (user_mgt_app )._user_manager .generate_email_action_link (
1577+ 'VERIFY_AND_CHANGE_EMAIL' , 'test@test.com' )
1578+ assert (
1579+ str (excinfo .value )
1580+ == "new_email must be provided when action_type is VERIFY_AND_CHANGE_EMAIL."
1581+ )
1582+
1583+ def _validate_request (self , request , settings = None , new_email = None ):
15511584 assert request ['email' ] == 'test@test.com'
15521585 assert request ['returnOobLink' ]
1586+ if new_email :
1587+ assert request ['newEmail' ] == new_email
15531588 if settings :
15541589 assert request ['continueUrl' ] == settings .url
15551590 assert request ['canHandleCodeInApp' ] == settings .handle_code_in_app
0 commit comments