Merge lp:~nataliabidart/ubuntu-sso-client/better-errors into lp:ubuntu-sso-client

Proposed by Natalia Bidart
Status: Merged
Approved by: Natalia Bidart
Approved revision: 603
Merged at revision: 600
Proposed branch: lp:~nataliabidart/ubuntu-sso-client/better-errors
Merge into: lp:ubuntu-sso-client
Diff against target: 488 lines (+173/-45)
4 files modified
ubuntu_sso/gui.py (+40/-13)
ubuntu_sso/main.py (+8/-5)
ubuntu_sso/tests/test_gui.py (+96/-24)
ubuntu_sso/tests/test_main.py (+29/-3)
To merge this branch: bzr merge lp:~nataliabidart/ubuntu-sso-client/better-errors
Reviewer Review Type Date Requested Status
John Lenton (community) Approve
Vincenzo Di Somma (community) Approve
Review via email: mp+33846@code.launchpad.net

Commit message

Errors from SSO servers are being shown now to users, matching error-specific to fields (LP: #616101).
Also, be robust when SSO server answer with a string where it's supposed to be a list (LP: #623447).

Description of the change

Errors from SSO servers are being shown now to users, matching error-specific to fields.

To post a comment you must log in.
Revision history for this message
Natalia Bidart (nataliabidart) wrote :

To test this, you should try both registration and login using email address like '@' (that will make the GUI accept the address as valid but SSO will reject it).

You can also try registering with an already registered email address, etc.

Also, you can try logging with non existing accounts, and resetting passwords for non-existing accounts, and resetting password for a valid account but using a bad token.

603. By Natalia Bidart

Merged trunk in.

Revision history for this message
Vincenzo Di Somma (vds) :
review: Approve
Revision history for this message
John Lenton (chipaca) :
review: Approve

Preview Diff

[H/L] Next/Prev Comment, [J/K] Next/Prev File, [N/P] Next/Prev Hunk
=== modified file 'ubuntu_sso/gui.py'
--- ubuntu_sso/gui.py 2010-08-26 18:44:24 +0000
+++ ubuntu_sso/gui.py 2010-08-26 22:54:41 +0000
@@ -547,7 +547,6 @@
547547
548 def _build_success_page(self):548 def _build_success_page(self):
549 """Build the success page."""549 """Build the success page."""
550 #self.success_vbox.help_text = ''
551 self.success_label.set_markup('<span size="x-large">%s</span>' %550 self.success_label.set_markup('<span size="x-large">%s</span>' %
552 self.SUCCESS)551 self.SUCCESS)
553 return self.success_vbox552 return self.success_vbox
@@ -846,6 +845,17 @@
846845
847 # backend callbacks846 # backend callbacks
848847
848 def _build_general_error_message(self, errordict):
849 """Concatenate __all__ and message from the errordict."""
850 result = None
851 msg1 = errordict.get('__all__')
852 msg2 = errordict.get('message')
853 if msg1 is not None and msg2 is not None:
854 result = '\n'.join((msg1, msg2))
855 else:
856 result = msg1 if msg1 is not None else msg2
857 return result
858
849 @log_call859 @log_call
850 def on_captcha_generated(self, app_name, captcha_id, *args, **kwargs):860 def on_captcha_generated(self, app_name, captcha_id, *args, **kwargs):
851 """Captcha image has been generated and is available to be shown."""861 """Captcha image has been generated and is available to be shown."""
@@ -868,10 +878,21 @@
868 @log_call878 @log_call
869 def on_user_registration_error(self, app_name, error, *args, **kwargs):879 def on_user_registration_error(self, app_name, error, *args, **kwargs):
870 """Captcha image generation failed."""880 """Captcha image generation failed."""
871 self._set_current_page(self.enter_details_vbox,881 msg = error.get('email')
872 warning_text=self.UNKNOWN_ERROR)882 if msg is not None:
883 self.email1_entry.set_warning(msg)
884 self.email2_entry.set_warning(msg)
885
886 msg = error.get('password')
887 if msg is not None:
888 self.password1_entry.set_warning(msg)
889 self.password2_entry.set_warning(msg)
890
891 msg = self._build_general_error_message(error)
892 self._set_current_page(self.enter_details_vbox, warning_text=msg)
893
873 self._gtk_signal_log.append((SIG_REGISTRATION_FAILED, self.app_name,894 self._gtk_signal_log.append((SIG_REGISTRATION_FAILED, self.app_name,
874 error))895 msg))
875896
876 @log_call897 @log_call
877 def on_email_validated(self, app_name, email, *args, **kwargs):898 def on_email_validated(self, app_name, email, *args, **kwargs):
@@ -883,10 +904,15 @@
883 @log_call904 @log_call
884 def on_email_validation_error(self, app_name, error, *args, **kwargs):905 def on_email_validation_error(self, app_name, error, *args, **kwargs):
885 """User email validation failed."""906 """User email validation failed."""
886 self._set_current_page(self.verify_email_vbox,907 msg = error.get('email_token')
887 warning_text=self.UNKNOWN_ERROR)908 if msg is not None:
909 self.email_token_entry.set_warning(msg)
910
911 msg = self._build_general_error_message(error)
912 self._set_current_page(self.verify_email_vbox, warning_text=msg)
913
888 self._gtk_signal_log.append((SIG_REGISTRATION_FAILED, self.app_name,914 self._gtk_signal_log.append((SIG_REGISTRATION_FAILED, self.app_name,
889 error))915 msg))
890916
891 @log_call917 @log_call
892 def on_logged_in(self, app_name, email, *args, **kwargs):918 def on_logged_in(self, app_name, email, *args, **kwargs):
@@ -898,10 +924,10 @@
898 @log_call924 @log_call
899 def on_login_error(self, app_name, error, *args, **kwargs):925 def on_login_error(self, app_name, error, *args, **kwargs):
900 """User was not successfully logged in."""926 """User was not successfully logged in."""
901 self._set_current_page(self.login_vbox,927 msg = self._build_general_error_message(error)
902 warning_text=self.UNKNOWN_ERROR)928 self._set_current_page(self.login_vbox, warning_text=msg)
903 self._gtk_signal_log.append((SIG_LOGIN_FAILED, self.app_name,929 self._gtk_signal_log.append((SIG_LOGIN_FAILED, self.app_name,
904 error))930 msg))
905931
906 @log_call932 @log_call
907 def on_password_reset_token_sent(self, app_name, email, *args, **kwargs):933 def on_password_reset_token_sent(self, app_name, email, *args, **kwargs):
@@ -913,8 +939,8 @@
913 @log_call939 @log_call
914 def on_password_reset_error(self, app_name, error, *args, **kwargs):940 def on_password_reset_error(self, app_name, error, *args, **kwargs):
915 """Password reset failed."""941 """Password reset failed."""
916 self._set_current_page(self.login_vbox,942 msg = self._build_general_error_message(error)
917 warning_text=self.UNKNOWN_ERROR)943 self._set_current_page(self.login_vbox, warning_text=msg)
918944
919 @log_call945 @log_call
920 def on_password_changed(self, app_name, email, *args, **kwargs):946 def on_password_changed(self, app_name, email, *args, **kwargs):
@@ -925,5 +951,6 @@
925 @log_call951 @log_call
926 def on_password_change_error(self, app_name, error, *args, **kwargs):952 def on_password_change_error(self, app_name, error, *args, **kwargs):
927 """Password reset failed."""953 """Password reset failed."""
954 msg = self._build_general_error_message(error)
928 self._set_current_page(self.request_password_token_vbox,955 self._set_current_page(self.request_password_token_vbox,
929 warning_text=self.UNKNOWN_ERROR)956 warning_text=msg)
930957
=== modified file 'ubuntu_sso/main.py'
--- ubuntu_sso/main.py 2010-08-26 21:06:36 +0000
+++ ubuntu_sso/main.py 2010-08-26 22:54:41 +0000
@@ -139,8 +139,12 @@
139 def _format_webservice_errors(self, errdict):139 def _format_webservice_errors(self, errdict):
140 """Turn each list of strings in the errdict into a LF separated str."""140 """Turn each list of strings in the errdict into a LF separated str."""
141 result = {}141 result = {}
142 for k in errdict:142 for k, v in errdict.iteritems():
143 result[k] = "\n".join(errdict[k])143 # workaround until bug #624955 is solved
144 if isinstance(v, basestring):
145 result[k] = v
146 else:
147 result[k] = "\n".join(v)
144 return result148 return result
145149
146 def generate_captcha(self, filename):150 def generate_captcha(self, filename):
@@ -239,7 +243,7 @@
239 result = service(email=email)243 result = service(email=email)
240 except HTTPError, e:244 except HTTPError, e:
241 logger.exception('request_password_reset_token failed with:')245 logger.exception('request_password_reset_token failed with:')
242 raise ResetPasswordTokenError(e.content)246 raise ResetPasswordTokenError(e.content.split('\n')[0])
243247
244 if result['status'] == 'ok':248 if result['status'] == 'ok':
245 return email249 return email
@@ -261,7 +265,7 @@
261 new_password=new_password)265 new_password=new_password)
262 except HTTPError, e:266 except HTTPError, e:
263 logger.exception('set_new_password failed with:')267 logger.exception('set_new_password failed with:')
264 raise NewPasswordError(e.content)268 raise NewPasswordError(e.content.split('\n')[0])
265269
266 if result['status'] == 'ok':270 if result['status'] == 'ok':
267 return email271 return email
@@ -273,7 +277,6 @@
273 """Turn an exception into a dictionary to return thru DBus."""277 """Turn an exception into a dictionary to return thru DBus."""
274 result = {278 result = {
275 "errtype": e.__class__.__name__,279 "errtype": e.__class__.__name__,
276 "errargs": repr(e.args),
277 }280 }
278 if len(e.args) == 0:281 if len(e.args) == 0:
279 result["message"] = e.__class__.__doc__282 result["message"] = e.__class__.__doc__
280283
=== modified file 'ubuntu_sso/tests/test_gui.py'
--- ubuntu_sso/tests/test_gui.py 2010-08-26 18:44:24 +0000
+++ ubuntu_sso/tests/test_gui.py 2010-08-26 22:54:41 +0000
@@ -44,7 +44,6 @@
44CAPTCHA_SOLUTION = 'william Byrd'44CAPTCHA_SOLUTION = 'william Byrd'
45EMAIL = 'test@example.com'45EMAIL = 'test@example.com'
46EMAIL_TOKEN = 'B2Pgtf'46EMAIL_TOKEN = 'B2Pgtf'
47ERROR = 'Something bad happened!'
48NAME = 'Juanito Pérez'47NAME = 'Juanito Pérez'
49PASSWORD = 'h3lloWorld'48PASSWORD = 'h3lloWorld'
50RESET_PASSWORD_TOKEN = '8G5Wtq'49RESET_PASSWORD_TOKEN = '8G5Wtq'
@@ -344,6 +343,7 @@
344 'tc_browser', 'login', 'request_password_token',343 'tc_browser', 'login', 'request_password_token',
345 'set_new_password')344 'set_new_password')
346 self.ui = self.gui_class(**self.kwargs)345 self.ui = self.gui_class(**self.kwargs)
346 self.ERROR = {'message': self.ui.UNKNOWN_ERROR}
347347
348 def tearDown(self):348 def tearDown(self):
349 """Clean up."""349 """Clean up."""
@@ -866,17 +866,39 @@
866 """Init."""866 """Init."""
867 super(UserRegistrationErrorTestCase, self).setUp()867 super(UserRegistrationErrorTestCase, self).setUp()
868 self.click_join_with_valid_data()868 self.click_join_with_valid_data()
869 self.ui.on_user_registration_error(app_name=APP_NAME, error=ERROR)
870869
871 def test_previous_page_is_shown(self):870 def test_previous_page_is_shown(self):
872 """On UserRegistrationError the previous page is shown."""871 """On UserRegistrationError the previous page is shown."""
872 self.ui.on_user_registration_error(app_name=APP_NAME, error=self.ERROR)
873 self.assert_pages_visibility(enter_details=True)873 self.assert_pages_visibility(enter_details=True)
874874
875 def test_warning_label_is_shown(self):875 def test_warning_label_is_shown(self):
876 """On UserRegistrationError the warning label is shown."""876 """On UserRegistrationError the warning label is shown."""
877 self.ui.on_user_registration_error(app_name=APP_NAME, error=self.ERROR)
877 self.assert_correct_label_warning(self.ui.warning_label,878 self.assert_correct_label_warning(self.ui.warning_label,
878 self.ui.UNKNOWN_ERROR)879 self.ui.UNKNOWN_ERROR)
879880
881 def test_specific_errors_from_backend_are_shown(self):
882 """Specific errors from backend are used."""
883 error = {'errtype': 'RegistrationError',
884 'message': 'We\'re so doomed.',
885 'email': 'Enter a valid e-mail address.',
886 'password': 'I don\'t like your password.',
887 '__all__': 'Wrong captcha solution.'}
888
889 self.ui.on_user_registration_error(app_name=APP_NAME, error=error)
890
891 expected = '\n'.join((error['__all__'], error['message']))
892 self.assert_correct_label_warning(self.ui.warning_label, expected)
893 self.assert_correct_entry_warning(self.ui.email1_entry,
894 error['email'])
895 self.assert_correct_entry_warning(self.ui.email2_entry,
896 error['email'])
897 self.assert_correct_entry_warning(self.ui.password1_entry,
898 error['password'])
899 self.assert_correct_entry_warning(self.ui.password2_entry,
900 error['password'])
901
880902
881class VerifyEmailTestCase(UbuntuSSOClientTestCase):903class VerifyEmailTestCase(UbuntuSSOClientTestCase):
882 """Test suite for the user registration (verify email page)."""904 """Test suite for the user registration (verify email page)."""
@@ -926,19 +948,33 @@
926 self.ui.on_email_validated(app_name=APP_NAME, email=EMAIL)948 self.ui.on_email_validated(app_name=APP_NAME, email=EMAIL)
927 self.assert_pages_visibility(success=True)949 self.assert_pages_visibility(success=True)
928950
929 def test_on_email_validated_clears_the_help_text(self):951 def test_on_email_validated_does_not_clear_the_help_text(self):
930 """On email validated the help text is removed."""952 """On email validated the help text is not removed."""
931 self.ui.on_email_validated(app_name=APP_NAME, email=EMAIL)953 self.ui.on_email_validated(app_name=APP_NAME, email=EMAIL)
932 self.assertEqual('', self.ui.help_label.get_text())954 self.assertEqual(self.ui.verify_email_vbox.help_text,
933 test_on_email_validated_clears_the_help_text.skip = 'Maybe this is wrong.'955 self.ui.help_label.get_label())
934956
935 def test_on_email_validation_error_verify_email_is_shown(self):957 def test_on_email_validation_error_verify_email_is_shown(self):
936 """On email validation error, the verify_email page is shown."""958 """On email validation error, the verify_email page is shown."""
937 self.ui.on_email_validation_error(app_name=APP_NAME, error=ERROR)959 self.ui.on_email_validation_error(app_name=APP_NAME, error=self.ERROR)
938 self.assert_pages_visibility(verify_email=True)960 self.assert_pages_visibility(verify_email=True)
939 self.assert_correct_label_warning(self.ui.warning_label,961 self.assert_correct_label_warning(self.ui.warning_label,
940 self.ui.UNKNOWN_ERROR)962 self.ui.UNKNOWN_ERROR)
941963
964 def test_specific_errors_from_backend_are_shown(self):
965 """Specific errors from backend are used."""
966 error = {'errtype': 'EmailValidationError',
967 'message': 'We\'re so doomed.',
968 'email_token': 'Enter a valid e-mail address.',
969 '__all__': 'We all are gonna die.'}
970
971 self.ui.on_email_validation_error(app_name=APP_NAME, error=error)
972
973 expected = '\n'.join((error['__all__'], error['message']))
974 self.assert_correct_label_warning(self.ui.warning_label, expected)
975 self.assert_correct_entry_warning(self.ui.email_token_entry,
976 error['email_token'])
977
942 def test_success_label_is_correct(self):978 def test_success_label_is_correct(self):
943 """The success message is correct."""979 """The success message is correct."""
944 self.assertEqual(self.ui.SUCCESS, self.ui.success_label.get_text())980 self.assertEqual(self.ui.SUCCESS, self.ui.success_label.get_text())
@@ -1152,20 +1188,31 @@
1152 def test_on_login_error_morphs_to_login_page(self):1188 def test_on_login_error_morphs_to_login_page(self):
1153 """On user login error, the previous page is shown."""1189 """On user login error, the previous page is shown."""
1154 self.click_connect_with_valid_data()1190 self.click_connect_with_valid_data()
1155 self.ui.on_login_error(app_name=APP_NAME, error=ERROR)1191 self.ui.on_login_error(app_name=APP_NAME, error=self.ERROR)
1156 self.assert_pages_visibility(login=True)1192 self.assert_pages_visibility(login=True)
11571193
1158 def test_on_login_error_a_warning_is_shown(self):1194 def test_on_login_error_a_warning_is_shown(self):
1159 """On user login error, a warning is shown with proper wording."""1195 """On user login error, a warning is shown with proper wording."""
1160 self.click_connect_with_valid_data()1196 self.click_connect_with_valid_data()
1161 self.ui.on_login_error(app_name=APP_NAME, error=ERROR)1197 self.ui.on_login_error(app_name=APP_NAME, error=self.ERROR)
1162 self.assert_correct_label_warning(self.ui.warning_label,1198 self.assert_correct_label_warning(self.ui.warning_label,
1163 self.ui.UNKNOWN_ERROR)1199 self.ui.UNKNOWN_ERROR)
11641200
1201 def test_specific_errors_from_backend_are_shown(self):
1202 """Specific errors from backend are used."""
1203 error = {'errtype': 'AuthenticationError',
1204 'message': 'We\'re so doomed.',
1205 '__all__': 'We all are gonna die.'}
1206
1207 self.ui.on_login_error(app_name=APP_NAME, error=error)
1208
1209 expected = '\n'.join((error['__all__'], error['message']))
1210 self.assert_correct_label_warning(self.ui.warning_label, expected)
1211
1165 def test_back_to_registration_hides_warning(self):1212 def test_back_to_registration_hides_warning(self):
1166 """After user login error, warning is hidden when clicking 'Back'."""1213 """After user login error, warning is hidden when clicking 'Back'."""
1167 self.click_connect_with_valid_data()1214 self.click_connect_with_valid_data()
1168 self.ui.on_login_error(app_name=APP_NAME, error=ERROR)1215 self.ui.on_login_error(app_name=APP_NAME, error=self.ERROR)
1169 self.ui.login_back_button.clicked()1216 self.ui.login_back_button.clicked()
1170 self.assertFalse(self.ui.warning_label.get_property('visible'))1217 self.assertFalse(self.ui.warning_label.get_property('visible'))
11711218
@@ -1317,11 +1364,22 @@
13171364
1318 def test_on_password_reset_error_shows_login_page(self):1365 def test_on_password_reset_error_shows_login_page(self):
1319 """When reset token wasn't successfuly sent the login page is shown."""1366 """When reset token wasn't successfuly sent the login page is shown."""
1320 self.ui.on_password_reset_error(app_name=APP_NAME, error=ERROR)1367 self.ui.on_password_reset_error(app_name=APP_NAME, error=self.ERROR)
1321 self.assert_correct_label_warning(self.ui.warning_label,1368 self.assert_correct_label_warning(self.ui.warning_label,
1322 self.ui.UNKNOWN_ERROR)1369 self.ui.UNKNOWN_ERROR)
1323 self.assert_pages_visibility(login=True)1370 self.assert_pages_visibility(login=True)
13241371
1372 def test_specific_errors_from_backend_are_shown(self):
1373 """Specific errors from backend are used."""
1374 error = {'errtype': 'ResetPasswordTokenError',
1375 'message': 'We\'re so doomed.',
1376 '__all__': 'We all are gonna die.'}
1377
1378 self.ui.on_password_reset_error(app_name=APP_NAME, error=error)
1379
1380 expected = '\n'.join((error['__all__'], error['message']))
1381 self.assert_correct_label_warning(self.ui.warning_label, expected)
1382
13251383
1326class SetNewPasswordTestCase(UbuntuSSOClientTestCase):1384class SetNewPasswordTestCase(UbuntuSSOClientTestCase):
1327 """Test suite for setting a new password functionality."""1385 """Test suite for setting a new password functionality."""
@@ -1374,11 +1432,22 @@
13741432
1375 def test_on_password_change_error_shows_login_page(self):1433 def test_on_password_change_error_shows_login_page(self):
1376 """When password wasn't changed the reset password page is shown."""1434 """When password wasn't changed the reset password page is shown."""
1377 self.ui.on_password_change_error(app_name=APP_NAME, error=ERROR)1435 self.ui.on_password_change_error(app_name=APP_NAME, error=self.ERROR)
1378 self.assert_correct_label_warning(self.ui.warning_label,1436 self.assert_correct_label_warning(self.ui.warning_label,
1379 self.ui.UNKNOWN_ERROR)1437 self.ui.UNKNOWN_ERROR)
1380 self.assert_pages_visibility(request_password_token=True)1438 self.assert_pages_visibility(request_password_token=True)
13811439
1440 def test_specific_errors_from_backend_are_shown(self):
1441 """Specific errors from backend are used."""
1442 error = {'errtype': 'NewPasswordError',
1443 'message': 'We\'re so doomed.',
1444 '__all__': 'We all are gonna die.'}
1445
1446 self.ui.on_password_change_error(app_name=APP_NAME, error=error)
1447
1448 expected = '\n'.join((error['__all__'], error['message']))
1449 self.assert_correct_label_warning(self.ui.warning_label, expected)
1450
13821451
1383class DbusTestCase(UbuntuSSOClientTestCase):1452class DbusTestCase(UbuntuSSOClientTestCase):
1384 """Test suite for the dbus calls."""1453 """Test suite for the dbus calls."""
@@ -1458,9 +1527,10 @@
14581527
1459 def test_on_user_registration_error_proper_signal_is_emitted(self):1528 def test_on_user_registration_error_proper_signal_is_emitted(self):
1460 """On UserRegistrationError, 'registration-failed' signal is sent."""1529 """On UserRegistrationError, 'registration-failed' signal is sent."""
1461 self.ui.on_user_registration_error(app_name=APP_NAME, error=ERROR)1530 self.ui.on_user_registration_error(app_name=APP_NAME, error=self.ERROR)
1462 self.ui.on_close_clicked()1531 self.ui.on_close_clicked()
1463 self.assertEqual((self.ui.window, (APP_NAME, ERROR), {}),1532 expected = (self.ui.window, (APP_NAME, self.ui.UNKNOWN_ERROR), {})
1533 self.assertEqual(expected,
1464 self._called[gui.SIG_REGISTRATION_FAILED])1534 self._called[gui.SIG_REGISTRATION_FAILED])
14651535
1466 def test_on_email_validated_proper_signals_is_emitted(self):1536 def test_on_email_validated_proper_signals_is_emitted(self):
@@ -1472,10 +1542,11 @@
14721542
1473 def test_on_email_validation_error_proper_signals_is_emitted(self):1543 def test_on_email_validation_error_proper_signals_is_emitted(self):
1474 """On EmailValidationError, 'registration-failed' signal is sent."""1544 """On EmailValidationError, 'registration-failed' signal is sent."""
1475 self.ui.on_email_validation_error(app_name=APP_NAME, error=ERROR)1545 self.ui.on_email_validation_error(app_name=APP_NAME, error=self.ERROR)
1476 self.ui.on_close_clicked()1546 self.ui.on_close_clicked()
1477 self.assertEqual((self.ui.window, (APP_NAME, ERROR), {}),1547 expected = (self.ui.window, (APP_NAME, self.ui.UNKNOWN_ERROR), {})
1478 self._called[gui.SIG_REGISTRATION_FAILED])1548 self.assertEqual(expected,
1549 self._called[gui.SIG_REGISTRATION_FAILED])
14791550
1480 def test_on_logged_in_proper_signals_is_emitted(self):1551 def test_on_logged_in_proper_signals_is_emitted(self):
1481 """On LoggedIn, 'login-succeeded' signal is sent."""1552 """On LoggedIn, 'login-succeeded' signal is sent."""
@@ -1487,15 +1558,16 @@
1487 def test_on_login_error_proper_signals_is_emitted(self):1558 def test_on_login_error_proper_signals_is_emitted(self):
1488 """On LoginError, 'login-failed' signal is sent."""1559 """On LoginError, 'login-failed' signal is sent."""
1489 self.click_connect_with_valid_data()1560 self.click_connect_with_valid_data()
1490 self.ui.on_login_error(app_name=APP_NAME, error=ERROR)1561 self.ui.on_login_error(app_name=APP_NAME, error=self.ERROR)
1491 self.ui.on_close_clicked()1562 self.ui.on_close_clicked()
1492 self.assertEqual((self.ui.window, (APP_NAME, ERROR), {}),1563 expected = (self.ui.window, (APP_NAME, self.ui.UNKNOWN_ERROR), {})
1493 self._called[gui.SIG_LOGIN_FAILED])1564 self.assertEqual(expected,
1565 self._called[gui.SIG_LOGIN_FAILED])
14941566
1495 def test_registration_successfull_even_if_prior_registration_error(self):1567 def test_registration_successfull_even_if_prior_registration_error(self):
1496 """Only one signal is sent with the final outcome."""1568 """Only one signal is sent with the final outcome."""
1497 self.click_join_with_valid_data()1569 self.click_join_with_valid_data()
1498 self.ui.on_user_registration_error(app_name=APP_NAME, error=ERROR)1570 self.ui.on_user_registration_error(app_name=APP_NAME, error=self.ERROR)
1499 self.click_join_with_valid_data()1571 self.click_join_with_valid_data()
1500 self.ui.on_email_validated(app_name=APP_NAME, email=EMAIL)1572 self.ui.on_email_validated(app_name=APP_NAME, email=EMAIL)
1501 self.ui.on_close_clicked()1573 self.ui.on_close_clicked()
@@ -1506,7 +1578,7 @@
1506 def test_login_successfull_even_if_prior_login_error(self):1578 def test_login_successfull_even_if_prior_login_error(self):
1507 """Only one signal is sent with the final outcome."""1579 """Only one signal is sent with the final outcome."""
1508 self.click_connect_with_valid_data()1580 self.click_connect_with_valid_data()
1509 self.ui.on_login_error(app_name=APP_NAME, error=ERROR)1581 self.ui.on_login_error(app_name=APP_NAME, error=self.ERROR)
1510 self.click_connect_with_valid_data()1582 self.click_connect_with_valid_data()
1511 self.ui.on_logged_in(app_name=APP_NAME, email=EMAIL)1583 self.ui.on_logged_in(app_name=APP_NAME, email=EMAIL)
1512 self.ui.on_close_clicked()1584 self.ui.on_close_clicked()
@@ -1517,7 +1589,7 @@
1517 def test_user_cancelation_even_if_prior_registration_error(self):1589 def test_user_cancelation_even_if_prior_registration_error(self):
1518 """Only one signal is sent with the final outcome."""1590 """Only one signal is sent with the final outcome."""
1519 self.click_join_with_valid_data()1591 self.click_join_with_valid_data()
1520 self.ui.on_user_registration_error(app_name=APP_NAME, error=ERROR)1592 self.ui.on_user_registration_error(app_name=APP_NAME, error=self.ERROR)
1521 self.ui.join_cancel_button.clicked()1593 self.ui.join_cancel_button.clicked()
15221594
1523 self.assertEqual(len(self._called), 1)1595 self.assertEqual(len(self._called), 1)
@@ -1526,7 +1598,7 @@
1526 def test_user_cancelation_even_if_prior_login_error(self):1598 def test_user_cancelation_even_if_prior_login_error(self):
1527 """Only one signal is sent with the final outcome."""1599 """Only one signal is sent with the final outcome."""
1528 self.click_connect_with_valid_data()1600 self.click_connect_with_valid_data()
1529 self.ui.on_login_error(app_name=APP_NAME, error=ERROR)1601 self.ui.on_login_error(app_name=APP_NAME, error=self.ERROR)
1530 self.ui.login_cancel_button.clicked()1602 self.ui.login_cancel_button.clicked()
15311603
1532 self.assertEqual(len(self._called), 1)1604 self.assertEqual(len(self._called), 1)
15331605
=== modified file 'ubuntu_sso/tests/test_main.py'
--- ubuntu_sso/tests/test_main.py 2010-08-26 21:04:47 +0000
+++ ubuntu_sso/tests/test_main.py 2010-08-26 22:54:41 +0000
@@ -54,6 +54,7 @@
54 "Can't reset password for this account"54 "Can't reset password for this account"
55RESET_TOKEN_INVALID_CONTENT = "AuthToken matching query does not exist."55RESET_TOKEN_INVALID_CONTENT = "AuthToken matching query does not exist."
56EMAIL = 'test@example.com'56EMAIL = 'test@example.com'
57EMAIL_ALREADY_REGISTERED = 'a@example.com'
57EMAIL_TOKEN = 'B2Pgtf'58EMAIL_TOKEN = 'B2Pgtf'
58HELP = 'help text'59HELP = 'help text'
59PASSWORD = 'be4tiFul'60PASSWORD = 'be4tiFul'
@@ -102,7 +103,10 @@
102103
103 def register(self, email, password, captcha_id, captcha_solution):104 def register(self, email, password, captcha_id, captcha_solution):
104 """Fake registration. Return a fix result."""105 """Fake registration. Return a fix result."""
105 if captcha_id is None and captcha_solution is None:106 if email == EMAIL_ALREADY_REGISTERED:
107 return {'status': 'error',
108 'errors': {'email': 'Email already registered'}}
109 elif captcha_id is None and captcha_solution is None:
106 return STATUS_UNKNOWN110 return STATUS_UNKNOWN
107 elif captcha_id != CAPTCHA_ID or captcha_solution != CAPTCHA_SOLUTION:111 elif captcha_id != CAPTCHA_ID or captcha_solution != CAPTCHA_SOLUTION:
108 return STATUS_ERROR112 return STATUS_ERROR
@@ -146,7 +150,10 @@
146 """Fake the email validation. Return a fix result."""150 """Fake the email validation. Return a fix result."""
147 if email_token is None:151 if email_token is None:
148 return STATUS_EMAIL_UNKNOWN152 return STATUS_EMAIL_UNKNOWN
149 if email_token != EMAIL_TOKEN:153 elif email_token == EMAIL_ALREADY_REGISTERED:
154 return {'status': 'error',
155 'errors': {'email': 'Email already registered'}}
156 elif email_token != EMAIL_TOKEN:
150 return STATUS_EMAIL_ERROR157 return STATUS_EMAIL_ERROR
151 else:158 else:
152 return STATUS_EMAIL_OK159 return STATUS_EMAIL_OK
@@ -234,6 +241,16 @@
234 self.assertIn(k, STATUS_ERROR['errors'])241 self.assertIn(k, STATUS_ERROR['errors'])
235 self.assertEqual(v, "\n".join(STATUS_ERROR['errors'][k]))242 self.assertEqual(v, "\n".join(STATUS_ERROR['errors'][k]))
236243
244 def test_register_user_if_status_error_with_string_message(self):
245 """Proper error is raised if register fails."""
246 self.register_kwargs['email'] = EMAIL_ALREADY_REGISTERED
247 failure = self.assertRaises(RegistrationError,
248 self.processor.register_user,
249 **self.register_kwargs)
250 for k, v in failure.args[0].items():
251 self.assertIn(k, {'email': 'Email already registered'})
252 self.assertEqual(v, 'Email already registered')
253
237 def test_register_user_if_status_unknown(self):254 def test_register_user_if_status_unknown(self):
238 """Proper error is raised if register returns an unknown status."""255 """Proper error is raised if register returns an unknown status."""
239 self.register_kwargs['captcha_id'] = None256 self.register_kwargs['captcha_id'] = None
@@ -274,6 +291,16 @@
274 self.assertIn(k, STATUS_EMAIL_ERROR['errors'])291 self.assertIn(k, STATUS_EMAIL_ERROR['errors'])
275 self.assertEqual(v, "\n".join(STATUS_EMAIL_ERROR['errors'][k]))292 self.assertEqual(v, "\n".join(STATUS_EMAIL_ERROR['errors'][k]))
276293
294 def test_validate_email_if_status_error_with_string_message(self):
295 """Proper error is raised if register fails."""
296 self.login_kwargs['email_token'] = EMAIL_ALREADY_REGISTERED
297 failure = self.assertRaises(EmailTokenError,
298 self.processor.validate_email,
299 **self.login_kwargs)
300 for k, v in failure.args[0].items():
301 self.assertIn(k, {'email': 'Email already registered'})
302 self.assertEqual(v, 'Email already registered')
303
277 def test_validate_email_if_status_unknown(self):304 def test_validate_email_if_status_unknown(self):
278 """Proper error is raised if email validation returns unknown."""305 """Proper error is raised if email validation returns unknown."""
279 self.login_kwargs['email_token'] = None306 self.login_kwargs['email_token'] = None
@@ -797,7 +824,6 @@
797 e = TestExceptToErrdictException(*sample_args)824 e = TestExceptToErrdictException(*sample_args)
798 result = except_to_errdict(e)825 result = except_to_errdict(e)
799 self.assertEqual(result["errtype"], e.__class__.__name__)826 self.assertEqual(result["errtype"], e.__class__.__name__)
800 self.assertEqual(result["errargs"], repr(sample_args))
801827
802828
803class KeyringCredentialsTestCase(MockerTestCase):829class KeyringCredentialsTestCase(MockerTestCase):

Subscribers

People subscribed via source and target branches