From c4954e13b1e2309d873ed6c09cbdc3a54dd56392 Mon Sep 17 00:00:00 2001 From: Henrik Levkowetz Date: Thu, 29 Jun 2017 14:53:00 +0000 Subject: [PATCH] Added more test objects in test_merge_users(), and fixed an issue with merge_users() uncovered by the added testing. - Legacy-Id: 13730 --- ietf/nomcom/factories.py | 20 +++++++++++++++++--- ietf/nomcom/models.py | 2 ++ ietf/person/factories.py | 2 +- ietf/person/tests.py | 16 ++++++++++++++-- ietf/person/utils.py | 11 +++++++---- 5 files changed, 41 insertions(+), 10 deletions(-) diff --git a/ietf/nomcom/factories.py b/ietf/nomcom/factories.py index 364d4f971..2509c1421 100644 --- a/ietf/nomcom/factories.py +++ b/ietf/nomcom/factories.py @@ -1,9 +1,9 @@ import factory import random -from ietf.nomcom.models import NomCom, Position, Feedback, Nominee, NomineePosition, Topic +from ietf.nomcom.models import NomCom, Position, Feedback, Nominee, NomineePosition, Nomination, Topic from ietf.group.factories import GroupFactory -from ietf.person.factories import PersonFactory +from ietf.person.factories import PersonFactory, UserFactory import debug # pyflakes:ignore @@ -147,7 +147,7 @@ class NomineeFactory(factory.DjangoModelFactory): model = Nominee nomcom = factory.SubFactory(NomComFactory) - person = factory.SubFactory(PersonFactory) + person = factory.SubFactory(PersonFactory) email = factory.LazyAttribute(lambda obj: obj.person.email()) class NomineePositionFactory(factory.DjangoModelFactory): @@ -176,3 +176,17 @@ class TopicFactory(factory.DjangoModelFactory): accepting_feedback = True audience_id = 'general' +class NominationFactory(factory.DjangoModelFactory): + class Meta: + model = Nomination + + nominee = factory.SubFactory(NomineeFactory) + position = factory.SubFactory(NomineePositionFactory) + candidate_name = factory.LazyAttribute(lambda obj: obj.nominee.person.name) + candidate_email = factory.LazyAttribute(lambda obj: obj.nominee.person.email()) + candidate_phone = factory.Faker('phone_number') + comments = factory.SubFactory(FeedbackFactory) + nominator_email = factory.LazyAttribute(lambda obj: obj.user.email) + user = factory.SubFactory(UserFactory) + share_nominator = False + diff --git a/ietf/nomcom/models.py b/ietf/nomcom/models.py index 18447f5d4..026f188af 100644 --- a/ietf/nomcom/models.py +++ b/ietf/nomcom/models.py @@ -8,6 +8,8 @@ from django.contrib.auth.models import User from django.template.loader import render_to_string from django.template.defaultfilters import linebreaks +import debug # pyflakes:ignore + from ietf.nomcom.fields import EncryptedTextField from ietf.person.models import Person,Email from ietf.group.models import Group diff --git a/ietf/person/factories.py b/ietf/person/factories.py index a22024070..946d35672 100644 --- a/ietf/person/factories.py +++ b/ietf/person/factories.py @@ -38,7 +38,7 @@ class PersonFactory(factory.DjangoModelFactory): model = Person user = factory.SubFactory(UserFactory) - name = factory.LazyAttribute(lambda p: '%s %s'%(p.user.first_name,p.user.last_name)) + name = factory.LazyAttribute(lambda p: u'%s %s'%(p.user.first_name,p.user.last_name)) ascii = factory.LazyAttribute(lambda p: unicode(unidecode(p.name).strip())) class Params: diff --git a/ietf/person/tests.py b/ietf/person/tests.py index ff32747fa..9c8d65909 100644 --- a/ietf/person/tests.py +++ b/ietf/person/tests.py @@ -13,6 +13,7 @@ from ietf.community.models import CommunityList from ietf.group.models import Group from ietf.nomcom.models import NomCom from ietf.nomcom.test_data import nomcom_test_data +from ietf.nomcom.factories import NomComFactory, NomineeFactory, NominationFactory, FeedbackFactory, PositionFactory from ietf.person.factories import EmailFactory, PersonFactory, UserFactory from ietf.person.models import Person, Alias from ietf.person.utils import (merge_persons, determine_merge_order, send_merge_notification, @@ -206,9 +207,20 @@ class PersonUtilsTests(TestCase): def test_merge_users(self): make_test_data() - source = UserFactory() + + person = PersonFactory() + source = person.user target = UserFactory() mars = Group.objects.get(acronym='mars') communitylist = CommunityList.objects.create(user=source, group=mars) + nomcom = NomComFactory() + position = PositionFactory(nomcom=nomcom) + nominee = NomineeFactory(nomcom=nomcom, person=mars.get_chair().person) + feedback = FeedbackFactory(user=source, author=person, nomcom=nomcom) + feedback.nominees.add(nominee) + nomination = NominationFactory(nominee=nominee, user=source, position=position, comments=feedback) + merge_users(source, target) - self.assertTrue(communitylist in target.communitylist_set.all()) + self.assertIn(communitylist, target.communitylist_set.all()) + self.assertIn(feedback, target.feedback_set.all()) + self.assertIn(nomination, target.nomination_set.all()) diff --git a/ietf/person/utils.py b/ietf/person/utils.py index a476ce06b..ef8911a1f 100755 --- a/ietf/person/utils.py +++ b/ietf/person/utils.py @@ -7,6 +7,9 @@ import syslog from django.contrib import admin from django.contrib.auth.models import User + +import debug # pyflakes:ignore + from ietf.nomcom.models import Nominee from ietf.person.models import Person from ietf.utils.mail import send_mail @@ -116,12 +119,12 @@ def merge_users(source, target): target.communitylist_set.add(communitylist) # handle feedback for feedback in source.feedback_set.all(): - source.feedback_set.remove(feedback) - target.feedback_set.add(feedback) + feedback.user = target + feedback.save() # handle nominations for nomination in source.nomination_set.all(): - source.nomination_set.remove(nomination) - target.nomination_set.add(nomination) + nomination.user = target + nomination.save() def dedupe_aliases(person): '''Check person for duplicate aliases and purge'''