better errors control in feedback form.

See #970
 - Legacy-Id: 5593
This commit is contained in:
Emilio Jiménez 2013-03-25 18:02:00 +00:00
parent da52637e9b
commit 69c704de2d
3 changed files with 27 additions and 6 deletions

View file

@ -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']

View file

@ -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"""

View file

@ -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()