@@ -60,17 +60,20 @@ class TestAssertionConsumerServiceView(TestSamlMixin, TestCase):
6060 def _get_relay_state (self , redirect_url , org_slug ):
6161 return f'{ redirect_url } ?org={ org_slug } '
6262
63- def _get_saml_response_for_acs_view (self , relay_state ):
63+ def _get_saml_response_for_acs_view (
self ,
relay_state , uid = '[email protected] ' ):
6464 response = self .client .get (self .login_url , {'RelayState' : relay_state })
6565 saml2_req = saml2_from_httpredirect_request (response .url )
6666 session_id = get_session_id_from_saml2 (saml2_req )
6767 self .add_outstanding_query (session_id , relay_state )
68- return auth_response (
session_id ,
'[email protected] ' ),
relay_state 68+ return auth_response (session_id , uid ), relay_state
6969
7070 def _post_successful_auth_assertions (self , query_params , org_slug ):
7171 self .assertEqual (User .objects .count (), 1 )
7272 user_id = self .client .session [SESSION_KEY ]
7373 user = User .objects .get (id = user_id )
74+ self .assertEqual (
75+ user .emailaddress_set .filter (verified = True , primary = True ).count (), 1
76+ )
7477 self .
assertEqual (
user .
username ,
'[email protected] ' )
7578 self .assertEqual (OrganizationUser .objects .count (), 1 )
7679 org_user = OrganizationUser .objects .get (user_id = user_id )
@@ -105,6 +108,28 @@ def test_organization_slug_present(self):
105108 query_params = parse_qs (urlparse (response .url ).query )
106109 self ._post_successful_auth_assertions (query_params , org_slug )
107110
111+ @capture_any_output ()
112+ def test_invalid_email_raise_validation_error (self ):
113+ invalid_email = 'invalid_email@example'
114+ relay_state = self ._get_relay_state (
115+ redirect_url = 'https://captive-portal.example.com' , org_slug = 'default'
116+ )
117+ saml_response , relay_state = self ._get_saml_response_for_acs_view (
118+ relay_state , uid = invalid_email
119+ )
120+ with patch ('logging.Logger.exception' ) as mocked_logger :
121+ self .client .post (
122+ reverse ('radius:saml2_acs' ),
123+ {
124+ 'SAMLResponse' : self .b64_for_post (saml_response ),
125+ 'RelayState' : relay_state ,
126+ },
127+ )
128+ mocked_logger .assert_called_once_with (
129+ 'Failed email validation for "invalid_email@example" during'
130+ ' SAML user creation'
131+ )
132+
108133 @capture_any_output ()
109134 def test_relay_state_relative_path (self ):
110135 expected_redirect_path = '/radius/saml2/additional-info/'
0 commit comments