From cca04b63303447b09401683dbe2ba7636706c4a5 Mon Sep 17 00:00:00 2001 From: Robert Sparks <rjsparks@nostrum.com> Date: Tue, 22 Oct 2019 18:24:57 +0000 Subject: [PATCH] Correct construction for a reverse URL in an edge case. Fixes #2815. Commit ready for merge. - Legacy-Id: 16907 --- ietf/nomcom/forms.py | 2 +- ietf/nomcom/tests.py | 61 ++++++++++++++++++++++++++------------------ 2 files changed, 37 insertions(+), 26 deletions(-) diff --git a/ietf/nomcom/forms.py b/ietf/nomcom/forms.py index b4d3c3287..30ef70176 100644 --- a/ietf/nomcom/forms.py +++ b/ietf/nomcom/forms.py @@ -382,7 +382,7 @@ class NominateNewPersonForm(forms.ModelForm): def clean_candidate_email(self): candidate_email = self.cleaned_data['candidate_email'] if Email.objects.filter(address=candidate_email).exists(): - normal_url_name = 'ietf.nomcom.views.%s_nominate' % 'public' if self.public else 'private' + normal_url_name = 'ietf.nomcom.views.%s_nominate' % ('public' if self.public else 'private') msg = (('%s is already in the datatracker. ' 'Use the <a href="%s">normal nomination form</a> to nominate the person ' 'with this address. ') % diff --git a/ietf/nomcom/tests.py b/ietf/nomcom/tests.py index 7b13ee897..be45c0d94 100644 --- a/ietf/nomcom/tests.py +++ b/ietf/nomcom/tests.py @@ -584,6 +584,11 @@ class NomcomViewsTest(TestCase): return self.nominate_newperson_view(public=False) self.client.logout() + def test_private_nominate_newperson_who_already_exists(self): + EmailFactory(address='nominee@example.com') + self.access_member_url(self.private_nominate_newperson_url) + return self.nominate_newperson_view(public=False) + def test_public_nominate_with_automatic_questionnaire(self): nomcom = get_nomcom_by_year(self.year) nomcom.send_questionnaire = True @@ -715,34 +720,40 @@ class NomcomViewsTest(TestCase): if not public: test_data['nominator_email'] = nominator_email - response = self.client.post(nominate_url, test_data,follow=True) - self.assertTrue(response.redirect_chain) - self.assertEqual(response.status_code, 200) - q = PyQuery(response.content) - self.assertContains(response, "alert-success") + if Email.objects.filter(address=nominee_email).exists(): + response = self.client.post(nominate_url, test_data,follow=True) + self.assertFalse(response.redirect_chain) + self.assertEqual(response.status_code, 200) + self.assertIn('already in the datatracker',unicontent(response)) + else: + response = self.client.post(nominate_url, test_data,follow=True) + self.assertTrue(response.redirect_chain) + self.assertEqual(response.status_code, 200) + q = PyQuery(response.content) + self.assertContains(response, "alert-success") - # check objects - email = Email.objects.get(address=candidate_email) - Person.objects.get(name=candidate_name) - nominee = Nominee.objects.get(email=email) - NomineePosition.objects.get(position=position, nominee=nominee) - feedback = Feedback.objects.filter(positions__in=[position], - nominees__in=[nominee], - type=FeedbackTypeName.objects.get(slug='nomina')).latest('id') - if public: - self.assertEqual(feedback.author, nominator_email) + # check objects + email = Email.objects.get(address=candidate_email) + Person.objects.get(name=candidate_name) + nominee = Nominee.objects.get(email=email) + NomineePosition.objects.get(position=position, nominee=nominee) + feedback = Feedback.objects.filter(positions__in=[position], + nominees__in=[nominee], + type=FeedbackTypeName.objects.get(slug='nomina')).latest('id') + if public: + self.assertEqual(feedback.author, nominator_email) - # to check feedback comments are saved like enrypted data - self.assertNotEqual(feedback.comments, comment_text) + # to check feedback comments are saved like enrypted data + self.assertNotEqual(feedback.comments, comment_text) - self.assertEqual(check_comments(feedback.comments, comment_text, self.privatekey_file), True) - Nomination.objects.get(position=position, - candidate_name=candidate_name, - candidate_email=candidate_email, - candidate_phone=candidate_phone, - nominee=nominee, - comments=feedback, - nominator_email="%s%s" % (COMMUNITY_USER, EMAIL_DOMAIN)) + self.assertEqual(check_comments(feedback.comments, comment_text, self.privatekey_file), True) + Nomination.objects.get(position=position, + candidate_name=candidate_name, + candidate_email=candidate_email, + candidate_phone=candidate_phone, + nominee=nominee, + comments=feedback, + nominator_email="%s%s" % (COMMUNITY_USER, EMAIL_DOMAIN)) def test_add_questionnaire(self): self.access_chair_url(self.add_questionnaire_url)