From ddbfdf4b7bf5cc59fb725e0c7d57babd96da7a18 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Emilio=20Jim=C3=A9nez?= Date: Tue, 7 May 2013 11:50:13 +0000 Subject: [PATCH] change merge form, accepted vs any state: accepted, pending vs declined: declined Fixes #1016 - Legacy-Id: 5701 --- ietf/nomcom/forms.py | 12 ++++++++---- ietf/nomcom/tests.py | 41 ++++++++++++++++++++++++++++------------- 2 files changed, 36 insertions(+), 17 deletions(-) diff --git a/ietf/nomcom/forms.py b/ietf/nomcom/forms.py index 338f2be64..2614f31c7 100644 --- a/ietf/nomcom/forms.py +++ b/ietf/nomcom/forms.py @@ -18,7 +18,7 @@ from ietf.utils.mail import send_mail, send_mail_text from ietf.ietfauth.decorators import role_required from ietf.utils import fields as custom_fields from ietf.group.models import Group, Role -from ietf.name.models import RoleName, FeedbackType +from ietf.name.models import RoleName, FeedbackType, NomineePositionState from ietf.person.models import Email, Person from ietf.nomcom.models import NomCom, Nomination, Nominee, NomineePosition, \ Position, Feedback @@ -29,6 +29,7 @@ from ietf.nomcom.utils import QUESTIONNAIRE_TEMPLATE, NOMINATION_EMAIL_TEMPLATE, HEADER_QUESTIONNAIRE_TEMPLATE, validate_private_key from ietf.nomcom.decorators import member_required + ROLODEX_URL = getattr(settings, 'ROLODEX_URL', None) @@ -342,9 +343,12 @@ class MergeForm(BaseNomcomForm, forms.Form): if primary_nominee_position: # if already a nomineeposition object for a position and nominee, - # update the nomineepostion of primary nominee with the state and questionnaire - if nominee_position.time > primary_nominee_position.time: - primary_nominee_position.state = nominee_position.state + # update the nomineepostion of primary nominee with the state + if nominee_position.state.slug == 'accepted' or primary_nominee_position.state.slug == 'accepted': + primary_nominee_position.state = NomineePositionState.objects.get(slug='accepted') + primary_nominee_position.save() + if nominee_position.state.slug == 'declined' and primary_nominee_position.state.slug == 'pending': + primary_nominee_position.state = NomineePositionState.objects.get(slug='declined') primary_nominee_position.save() else: # It is not allowed two or more nomineeposition objects with same position and nominee diff --git a/ietf/nomcom/tests.py b/ietf/nomcom/tests.py index fe3c9ed31..7eae1dd25 100644 --- a/ietf/nomcom/tests.py +++ b/ietf/nomcom/tests.py @@ -94,6 +94,12 @@ class NomcomViewsTest(TestCase): self.nominate_view(public=True, nominee_email=nominees[0], position='IAOC') + self.nominate_view(public=True, + nominee_email=nominees[0], + position='IAB') + self.nominate_view(public=True, + nominee_email=nominees[0], + position='TSV') self.nominate_view(public=True, nominee_email=nominees[1], position='IAOC') @@ -113,15 +119,10 @@ class NomcomViewsTest(TestCase): nominee_email=nominees[3], position='TSV') # Check nominee positions - self.assertEqual(NomineePosition.objects.count(), 4) - self.assertEqual(Feedback.objects.nominations().count(), 8) + self.assertEqual(NomineePosition.objects.count(), 6) + self.assertEqual(Feedback.objects.nominations().count(), 10) # Accept and declined nominations - nominee_position = NomineePosition.objects.get(position__name='TSV', - nominee__email__address=nominees[3]) - nominee_position.state = NomineePositionState.objects.get(slug='accepted') - nominee_position.save() - nominee_position = NomineePosition.objects.get(position__name='IAOC', nominee__email__address=nominees[0]) nominee_position.state = NomineePositionState.objects.get(slug='accepted') @@ -132,6 +133,16 @@ class NomcomViewsTest(TestCase): nominee_position.state = NomineePositionState.objects.get(slug='declined') nominee_position.save() + nominee_position = NomineePosition.objects.get(position__name='IAB', + nominee__email__address=nominees[2]) + nominee_position.state = NomineePositionState.objects.get(slug='declined') + nominee_position.save() + + nominee_position = NomineePosition.objects.get(position__name='TSV', + nominee__email__address=nominees[3]) + nominee_position.state = NomineePositionState.objects.get(slug='accepted') + nominee_position.save() + self.client.logout() # fill questionnaires (internally the function does new nominations) @@ -165,14 +176,16 @@ class NomcomViewsTest(TestCase): nominee_email=nominees[2], position='IAB') self.feedback_view(public=False, - nominee_email=nominees[03], + nominee_email=nominees[3], position='TSV') self.assertEqual(Feedback.objects.comments().count(), 4) - self.assertEqual(Feedback.objects.nominations().count(), 16) + self.assertEqual(Feedback.objects.nominations().count(), 18) + self.assertEqual(Feedback.objects.nominations().filter(nominees__email__address=nominees[0]).count(), 6) + self.assertEqual(Feedback.objects.nominations().filter(nominees__email__address=nominees[1]).count(), 4) + self.assertEqual(Feedback.objects.nominations().filter(nominees__email__address=nominees[2]).count(), 4) + self.assertEqual(Feedback.objects.nominations().filter(nominees__email__address=nominees[3]).count(), 4) for nominee in nominees: - self.assertEqual(Feedback.objects.nominations().filter(nominees__email__address=nominee).count(), - 4) self.assertEqual(Feedback.objects.comments().filter(nominees__email__address=nominee).count(), 1) self.assertEqual(Feedback.objects.questionnaires().filter(nominees__email__address=nominee).count(), @@ -231,9 +244,9 @@ class NomcomViewsTest(TestCase): nominee = Nominee.objects.get(email__address=nominees[0]) - self.assertEqual(Nomination.objects.filter(nominee=nominee).count(), 16) + self.assertEqual(Nomination.objects.filter(nominee=nominee).count(), 18) self.assertEqual(Feedback.objects.nominations().filter(nominees__in=[nominee]).count(), - 16) + 18) self.assertEqual(Feedback.objects.comments().filter(nominees__in=[nominee]).count(), 4) self.assertEqual(Feedback.objects.questionnaires().filter(nominees__in=[nominee]).count(), @@ -253,6 +266,8 @@ class NomcomViewsTest(TestCase): self.assertEqual(NomineePosition.objects.get(position__name='TSV', nominee=nominee).state.slug, u'accepted') self.assertEqual(NomineePosition.objects.get(position__name='IAOC', + nominee=nominee).state.slug, u'accepted') + self.assertEqual(NomineePosition.objects.get(position__name='IAB', nominee=nominee).state.slug, u'declined') self.client.logout()