Refactor nominee merge and more test

See #930
 - Legacy-Id: 5588
This commit is contained in:
Emilio Jiménez 2013-03-22 12:34:19 +00:00
parent 34af67420c
commit c5c33c29bc
3 changed files with 140 additions and 37 deletions

View file

@ -267,10 +267,6 @@ class MergeForm(BaseNomcomForm, forms.Form):
if nominee_position.time > primary_nominee_position.time:
primary_nominee_position.state = nominee_position.state
primary_nominee_position.save()
questionnaires = nominee_position.questionnaires.all()
if questionnaires:
primary_nominee_position.questionnaires.add(*questionnaires)
else:
# It is not allowed two or more nomineeposition objects with same position and nominee
# move nominee_position object to primary nominee

View file

@ -117,9 +117,8 @@ class NomineePosition(models.Model):
@property
def questionnaires(self):
return Feedback.objects.filter(type='questio',
positions=self.position,
nominee=self.nominee)
return Feedback.objects.questionnaires().filter(positions__in=[self.position],
nominee=self.nominee)
class Position(models.Model):

View file

@ -80,73 +80,181 @@ class NomcomViewsTest(TestCase):
def test_private_merge_view(self):
"""Verify private merge view"""
nominees = [u'nominee0@example.com',
u'nominee1@example.com',
u'nominee2@example.com',
u'nominee3@example.com']
# do nominations
login_testing_unauthorized(self, COMMUNITY_USER, self.public_nominate_url)
self.nominate_view(public=True, nominee_email=u'nominee@example.com',
self.nominate_view(public=True,
nominee_email=nominees[0],
position='IAOC')
self.nominate_view(public=True, nominee_email=u'nominee2@example.com',
self.nominate_view(public=True,
nominee_email=nominees[0],
position='IAOC')
self.nominate_view(public=True, nominee_email=u'nominee3@example.com',
self.nominate_view(public=True,
nominee_email=nominees[1],
position='IAOC')
self.nominate_view(public=True,
nominee_email=nominees[1],
position='IAOC')
self.nominate_view(public=True,
nominee_email=nominees[2],
position='IAB')
self.nominate_view(public=True, nominee_email=u'nominee4@example.com',
self.nominate_view(public=True,
nominee_email=nominees[2],
position='IAB')
self.nominate_view(public=True,
nominee_email=nominees[3],
position='TSV')
self.nominate_view(public=True,
nominee_email=nominees[3],
position='TSV')
# Check nominee positions
self.assertEqual(NomineePosition.objects.count(), 4)
self.assertEqual(Feedback.objects.nominations().count(), 8)
# 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')
nominee_position.save()
nominee_position = NomineePosition.objects.get(position__name='IAOC',
nominee__email__address=nominees[1])
nominee_position.state = NomineePositionState.objects.get(slug='declined')
nominee_position.save()
self.client.logout()
# merge nominations
# fill questionnaires (internally the function does new nominations)
self.access_chair_url(self.add_questionnaire_url)
self.add_questionnaire(public=False,
nominee_email=nominees[0],
position='IAOC')
self.add_questionnaire(public=False,
nominee_email=nominees[1],
position='IAOC')
self.add_questionnaire(public=False,
nominee_email=nominees[2],
position='IAB')
self.add_questionnaire(public=False,
nominee_email=nominees[3],
position='TSV')
self.assertEqual(Feedback.objects.questionnaires().count(), 4)
self.client.logout()
## 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')
self.feedback_view(public=False,
nominee_email=nominees[1],
position='IAOC')
self.feedback_view(public=False,
nominee_email=nominees[2],
position='IAB')
self.feedback_view(public=False,
nominee_email=nominees[03],
position='TSV')
self.assertEqual(Feedback.objects.comments().count(), 4)
self.assertEqual(Feedback.objects.nominations().count(), 16)
for nominee in nominees:
self.assertEqual(Feedback.objects.nominations().filter(nominee__email__address=nominee).count(),
4)
self.assertEqual(Feedback.objects.comments().filter(nominee__email__address=nominee).count(),
1)
self.assertEqual(Feedback.objects.questionnaires().filter(nominee__email__address=nominee).count(),
1)
self.client.logout()
## merge nominations
self.access_chair_url(self.private_merge_url)
test_data = {"secondary_emails": "nominee@example.com, nominee2@example.com",
"primary_email": "nominee@example.com"}
test_data = {"secondary_emails": "%s, %s" % (nominees[0], nominees[1]),
"primary_email": nominees[0]}
response = self.client.post(self.private_merge_url, test_data)
self.assertEqual(response.status_code, 200)
self.assertContains(response, "info-message-error")
test_data = {"primary_email": "nominee@example.com",
test_data = {"primary_email": nominees[0],
"secondary_emails": ""}
response = self.client.post(self.private_merge_url, test_data)
self.assertEqual(response.status_code, 200)
self.assertContains(response, "info-message-error")
test_data = {"primary_email": "",
"secondary_emails": "nominee@example.com"}
"secondary_emails": nominees[0]}
response = self.client.post(self.private_merge_url, test_data)
self.assertEqual(response.status_code, 200)
self.assertContains(response, "info-message-error")
test_data = {"primary_email": "unknown@example.com",
"secondary_emails": "nominee@example.com"}
"secondary_emails": nominees[0]}
response = self.client.post(self.private_merge_url, test_data)
self.assertEqual(response.status_code, 200)
self.assertContains(response, "info-message-error")
test_data = {"primary_email": "nominee@example.com",
test_data = {"primary_email": nominees[0],
"secondary_emails": "unknown@example.com"}
response = self.client.post(self.private_merge_url, test_data)
self.assertEqual(response.status_code, 200)
self.assertContains(response, "info-message-error")
test_data = {"secondary_emails": """nominee2@example.com,
nominee3@example.com,
nominee4@example.com""",
"primary_email": "nominee@example.com"}
test_data = {"secondary_emails": """%s,
%s,
%s""" % (nominees[1], nominees[2], nominees[3]),
"primary_email": nominees[0]}
response = self.client.post(self.private_merge_url, test_data)
self.assertEqual(response.status_code, 200)
self.assertContains(response, "info-message-success")
self.assertEqual(Nominee.objects.filter(email__address='nominee2@example.com',
self.assertEqual(Nominee.objects.filter(email__address=nominees[1],
duplicated__isnull=False).count(), 1)
self.assertEqual(Nominee.objects.filter(email__address='nominee3@example.com',
self.assertEqual(Nominee.objects.filter(email__address=nominees[2],
duplicated__isnull=False).count(), 1)
self.assertEqual(Nominee.objects.filter(email__address='nominee4@example.com',
self.assertEqual(Nominee.objects.filter(email__address=nominees[3],
duplicated__isnull=False).count(), 1)
nominee = Nominee.objects.get(email__address='nominee@example.com')
self.assertEqual(Nomination.objects.filter(nominee=nominee).count(), 4)
self.assertEqual(Feedback.objects.filter(nominee=nominee).count(), 4)
nominee = Nominee.objects.get(email__address=nominees[0])
self.assertEqual(Nomination.objects.filter(nominee=nominee).count(), 16)
self.assertEqual(Feedback.objects.nominations().filter(nominee=nominee).count(),
16)
self.assertEqual(Feedback.objects.comments().filter(nominee=nominee).count(),
4)
self.assertEqual(Feedback.objects.questionnaires().filter(nominee=nominee).count(),
4)
for nominee_email in nominees[1:]:
self.assertEqual(Feedback.objects.nominations().filter(nominee__email__address=nominee_email).count(),
0)
self.assertEqual(Feedback.objects.comments().filter(nominee__email__address=nominee_email).count(),
0)
self.assertEqual(Feedback.objects.questionnaires().filter(nominee__email__address=nominee_email).count(),
0)
self.assertEqual(NomineePosition.objects.filter(nominee=nominee).count(), 3)
# Check nominations state
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'declined')
self.client.logout()
def change_members(self, members):
@ -305,9 +413,9 @@ class NomcomViewsTest(TestCase):
Person.objects.get(name=candidate_name, address=candidate_email)
nominee = Nominee.objects.get(email=email)
NomineePosition.objects.get(position=position, nominee=nominee)
feedback = Feedback.objects.get(positions__in=[position],
nominee=nominee,
type=FeedbackType.objects.get(slug='nomina'))
feedback = Feedback.objects.filter(positions__in=[position],
nominee=nominee,
type=FeedbackType.objects.get(slug='nomina')).latest('id')
if public:
self.assertEqual(feedback.author, nominator_email)
@ -369,9 +477,9 @@ class NomcomViewsTest(TestCase):
self.assertContains(response, "info-message-success")
## check objects
feedback = Feedback.objects.get(positions__in=[position],
nominee=nominee,
type=FeedbackType.objects.get(slug='questio'))
feedback = Feedback.objects.filter(positions__in=[position],
nominee=nominee,
type=FeedbackType.objects.get(slug='questio')).latest('id')
## to check feedback comments are saved like enrypted data
self.assertNotEqual(feedback.comments, comments)
@ -440,9 +548,9 @@ class NomcomViewsTest(TestCase):
self.assertContains(response, "info-message-success")
## check objects
feedback = Feedback.objects.get(positions__in=[position],
nominee=nominee,
type=FeedbackType.objects.get(slug='comment'))
feedback = Feedback.objects.filter(positions__in=[position],
nominee=nominee,
type=FeedbackType.objects.get(slug='comment')).latest('id')
if public:
self.assertEqual(feedback.author, nominator_email)