From 2a3a0e52cab9f5b3356d0da76c6f43794565b20f Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Feb 22 2016 17:00:32 +0000 Subject: [PATCH 1/2] If the email is already pending, say so instead of trying to add it again --- diff --git a/pagure/lib/__init__.py b/pagure/lib/__init__.py index c291849..6e1ad39 100644 --- a/pagure/lib/__init__.py +++ b/pagure/lib/__init__.py @@ -2193,6 +2193,12 @@ def add_user_pending_email(session, userobj, email): 'Someone else has already registered this email' ) + pending_email = search_pending_email(session, email=email) + if pending_email: + raise pagure.exceptions.PagureException( + 'This email is already pending confirmation' + ) + tmpemail = pagure.lib.model.UserEmailPending( user_id=userobj.id, token=pagure.lib.login.id_generator(40), From 15ef6d7318c78165568d06620744e4215bddea1a Mon Sep 17 00:00:00 2001 From: Pierre-Yves Chibon Date: Feb 22 2016 17:00:32 +0000 Subject: [PATCH 2/2] Add unit-tests ensuring we can't submit an email already pending confirmation --- diff --git a/tests/test_pagure_flask_ui_app.py b/tests/test_pagure_flask_ui_app.py index 4715cf3..5ed275c 100644 --- a/tests/test_pagure_flask_ui_app.py +++ b/tests/test_pagure_flask_ui_app.py @@ -471,6 +471,17 @@ class PagureFlaskApptests(tests.Modeltests): self.assertEqual(output.data.count('bar@pingou.com'), 5) self.assertEqual(output.data.count('foobar@pingou.com'), 2) + # Email already pending + output = self.app.post( + '/settings/email/add', data=data, follow_redirects=True) + self.assertEqual(output.status_code, 200) + self.assertIn( + '
\n ' + 'Add new email', output.data) + self.assertIn( + '\n This email is already ' + 'pending confirmation', output.data) + # User already has this email data = { 'csrf_token': csrf_token, @@ -484,8 +495,8 @@ class PagureFlaskApptests(tests.Modeltests): self.assertIn( 'Invalid value, can't be any of: bar@pingou.com, ' 'foo@pingou.com. ', output.data) - self.assertEqual(output.data.count('foo@pingou.com'), 5) - self.assertEqual(output.data.count('bar@pingou.com'), 4) + self.assertEqual(output.data.count('foo@pingou.com'), 6) + self.assertEqual(output.data.count('bar@pingou.com'), 5) self.assertEqual(output.data.count('foobar@pingou.com'), 0) # Email registered by someone else