Added more test objects in test_merge_users(), and fixed an issue with merge_users() uncovered by the added testing.

- Legacy-Id: 13730
This commit is contained in:
Henrik Levkowetz 2017-06-29 14:53:00 +00:00
parent 22a9a46608
commit c4954e13b1
5 changed files with 41 additions and 10 deletions

View file

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

View file

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

View file

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

View file

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

View file

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