Update secr.rolodex app to deactivate old Users when replaced on edit. Fixes #2001. Commit ready for merge.

- Legacy-Id: 13726
This commit is contained in:
Ryan Cross 2017-06-28 20:43:28 +00:00
parent 7768e7c6b3
commit a251076903
3 changed files with 48 additions and 6 deletions

View file

@ -67,7 +67,7 @@ def get_extra_primary(source,target):
def handle_users(source,target,check_only=False):
'''
Deletes extra Users. Retains target user. If check_only == True, just return a string
Deactivates extra Users. Retains target user. If check_only == True, just return a string
describing action, otherwise perform user changes and return string.
'''
if not (source.user or target.user):
@ -86,7 +86,7 @@ def handle_users(source,target,check_only=False):
message = "DATATRACKER LOGIN ACTION: retaining login: {}, removing login: {}".format(target.user,source.user)
if not check_only:
merge_users(source.user, target.user)
syslog.syslog('merge-person-records: deleting user {}'.format(source.user.username))
syslog.syslog('merge-person-records: deactivating user {}'.format(source.user.username))
user = source.user
source.user = None
source.save()

View file

@ -1,7 +1,8 @@
from django.urls import reverse
from ietf.utils.test_utils import TestCase
from ietf.person.models import Person
from ietf.person.factories import PersonFactory, UserFactory
from ietf.person.models import Person, User
from ietf.utils.test_data import make_test_data
@ -24,4 +25,37 @@ class RolodexTestCase(TestCase):
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
def test_edit_replace_user(self):
person = PersonFactory()
user = UserFactory()
url = reverse('ietf.secr.rolodex.views.edit', kwargs={'id':person.id})
redirect_url = reverse('ietf.secr.rolodex.views.view', kwargs={'id':person.id})
self.client.login(username="secretary", password="secretary+password")
response = self.client.get(url)
self.assertEqual(response.status_code, 200)
post_data = {
'name': person.name,
'ascii': person.ascii,
'ascii_short': person.ascii_short,
'affiliation': person.affiliation,
'address': person.address,
'user': user.username,
'email-0-person':person.pk,
'email-0-address': person.email_address,
'email-TOTAL_FORMS':1,
'email-INITIAL_FORMS':1,
'email-MIN_NUM_FORMS':0,
'email-MAX_NUM_FORMS':1000,
'submit': 'Submit',
}
#print person.user
#self.assertTrue(False)
original_user = person.user
person_id = person.pk
response = self.client.post(url, post_data, follow=True)
print response.content
person = Person.objects.get(id=person_id)
original_user = User.objects.get(id=original_user.id)
self.assertRedirects(response, redirect_url)
self.assertEqual(person.user, user)
self.assertTrue(not original_user.is_active)

View file

@ -7,6 +7,7 @@ from django.shortcuts import render, get_object_or_404, redirect
from ietf.ietfauth.utils import role_required
from ietf.person.models import Person, Email, Alias
from ietf.person.utils import merge_users
from ietf.secr.rolodex.forms import EditPersonForm, EmailForm, NameForm, NewPersonForm, SearchForm
@ -174,8 +175,15 @@ def edit(request, id):
person_form.save()
email_formset.save()
# add new names to alias
if 'user' in person_form.changed_data and person_form.initial['user']:
try:
source = User.objects.get(username=person_form.initial['user'])
merge_users(source, person_form.cleaned_data['user'])
source.is_active = False
source.save()
except User.DoesNotExist:
pass
messages.success(request, 'The Rolodex entry was changed successfully')
return redirect('ietf.secr.rolodex.views.view', id=id)