From 69c704de2dd10cb8904f526cd9cb699d0d764fce Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Jim=C3=A9nez?= Date: Mon, 25 Mar 2013 18:02:00 +0000 Subject: [PATCH] better errors control in feedback form. See #970 - Legacy-Id: 5593 --- ietf/nomcom/forms.py | 7 +++++++ ietf/nomcom/tests.py | 22 ++++++++++++++++++---- ietf/nomcom/views.py | 4 ++-- 3 files changed, 27 insertions(+), 6 deletions(-) diff --git a/ietf/nomcom/forms.py b/ietf/nomcom/forms.py index 11363354e..5c72455a3 100644 --- a/ietf/nomcom/forms.py +++ b/ietf/nomcom/forms.py @@ -536,6 +536,13 @@ class FeedbackForm(BaseNomcomForm, forms.ModelForm): self.fieldsets = [('Provide comments', fieldset)] + def clean(self): + if not NomineePosition.objects.accepted().filter(nominee=self.nominee, + position=self.position): + msg = "There isn't a accepted nomination for %s on the %s position" % (self.nominee, self.position) + self._errors["nominee_email"] = self.error_class([msg]) + return self.cleaned_data + def save(self, commit=True): feedback = super(FeedbackForm, self).save(commit=False) confirmation = self.cleaned_data['confirmation'] diff --git a/ietf/nomcom/tests.py b/ietf/nomcom/tests.py index c34d1f5b3..8994f03fe 100644 --- a/ietf/nomcom/tests.py +++ b/ietf/nomcom/tests.py @@ -154,7 +154,6 @@ class NomcomViewsTest(TestCase): ## Add feedbacks (internally the function does new nominations) self.access_member_url(self.private_feedback_url) - self.feedback_view(public=False, nominee_email=nominees[0], position='IAOC') @@ -251,9 +250,9 @@ class NomcomViewsTest(TestCase): # Check nominations state self.assertEqual(NomineePosition.objects.get(position__name='TSV', - nominee=nominee).state.slug, u'accepted') + nominee=nominee).state.slug, u'accepted') self.assertEqual(NomineePosition.objects.get(position__name='IAOC', - nominee=nominee).state.slug, u'declined') + nominee=nominee).state.slug, u'declined') self.client.logout() @@ -542,8 +541,18 @@ class NomcomViewsTest(TestCase): feedback_url += "?nominee=%d&position=%d" % (nominee.id, position.id) - response = self.client.post(feedback_url, test_data) + nominee_position = NomineePosition.objects.get(nominee=nominee, + position=position) + state = nominee_position.state + if not state.slug == 'accepted': + response = self.client.post(feedback_url, test_data) + self.assertEqual(response.status_code, 200) + self.assertContains(response, "info-message-error") + # accept nomination + nominee_position.state = NomineePositionState.objects.get(slug='accepted') + nominee_position.save() + response = self.client.post(feedback_url, test_data) self.assertEqual(response.status_code, 200) self.assertContains(response, "info-message-success") @@ -559,6 +568,11 @@ class NomcomViewsTest(TestCase): self.assertEqual(check_comments(feedback.comments, comments, self.privatekey_file), True) + # recovery state + if state != nominee_position.state: + nominee_position.state = state + nominee_position.save() + class NomineePositionStateSaveTest(TestCase): """Tests for the NomineePosition save override method""" diff --git a/ietf/nomcom/views.py b/ietf/nomcom/views.py index b0a181675..6491fae3c 100644 --- a/ietf/nomcom/views.py +++ b/ietf/nomcom/views.py @@ -265,8 +265,8 @@ def feedback(request, year, public): selected_nominee = request.GET.get('nominee') selected_position = request.GET.get('position') if selected_nominee and selected_position: - nominee = Nominee.objects.get(id=selected_nominee) - position = Position.objects.get(id=selected_position) + nominee = get_object_or_404(Nominee, id=selected_nominee) + position = get_object_or_404(Position, id=selected_position) submit_disabled = False positions = Position.objects.get_by_nomcom(nomcom=nomcom).opened()