Skip to content

Commit ade8973

Browse files
committed
Merged in [13726] from rcross@amsl.com:
Update secr.rolodex app to deactivate old Users when replaced on edit. Fixes ietf-tools#2001. - Legacy-Id: 13735 Note: SVN reference [13726] has been migrated to Git commit a251076
2 parents c4954e1 + a251076 commit ade8973

3 files changed

Lines changed: 46 additions & 6 deletions

File tree

ietf/person/utils.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -70,7 +70,7 @@ def get_extra_primary(source,target):
7070

7171
def handle_users(source,target,check_only=False):
7272
'''
73-
Deletes extra Users. Retains target user. If check_only == True, just return a string
73+
Deactivates extra Users. Retains target user. If check_only == True, just return a string
7474
describing action, otherwise perform user changes and return string.
7575
'''
7676
if not (source.user or target.user):
@@ -89,7 +89,7 @@ def handle_users(source,target,check_only=False):
8989
message = "DATATRACKER LOGIN ACTION: retaining login: {}, removing login: {}".format(target.user,source.user)
9090
if not check_only:
9191
merge_users(source.user, target.user)
92-
syslog.syslog('merge-person-records: deleting user {}'.format(source.user.username))
92+
syslog.syslog('merge-person-records: deactivating user {}'.format(source.user.username))
9393
user = source.user
9494
source.user = None
9595
source.save()

ietf/secr/rolodex/tests.py

Lines changed: 34 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,8 @@
11
from django.urls import reverse
22

33
from ietf.utils.test_utils import TestCase
4-
from ietf.person.models import Person
4+
from ietf.person.factories import PersonFactory, UserFactory
5+
from ietf.person.models import Person, User
56
from ietf.utils.test_data import make_test_data
67

78

@@ -46,4 +47,35 @@ def test_add(self):
4647
person = Person.objects.get(name='Joe Smith')
4748
view_url = reverse('ietf.secr.rolodex.views.view', kwargs={'id':person.pk})
4849
self.assertRedirects(response, view_url)
49-
50+
51+
def test_edit_replace_user(self):
52+
person = PersonFactory()
53+
user = UserFactory()
54+
url = reverse('ietf.secr.rolodex.views.edit', kwargs={'id':person.id})
55+
redirect_url = reverse('ietf.secr.rolodex.views.view', kwargs={'id':person.id})
56+
self.client.login(username="secretary", password="secretary+password")
57+
response = self.client.get(url)
58+
self.assertEqual(response.status_code, 200)
59+
post_data = {
60+
'name': person.name,
61+
'ascii': person.ascii,
62+
'ascii_short': person.ascii_short,
63+
'affiliation': person.affiliation,
64+
'address': person.address,
65+
'user': user.username,
66+
'email-0-person':person.pk,
67+
'email-0-address': person.email_address,
68+
'email-TOTAL_FORMS':1,
69+
'email-INITIAL_FORMS':1,
70+
'email-MIN_NUM_FORMS':0,
71+
'email-MAX_NUM_FORMS':1000,
72+
'submit': 'Submit',
73+
}
74+
original_user = person.user
75+
person_id = person.pk
76+
response = self.client.post(url, post_data, follow=True)
77+
person = Person.objects.get(id=person_id)
78+
original_user = User.objects.get(id=original_user.id)
79+
self.assertRedirects(response, redirect_url)
80+
self.assertEqual(person.user, user)
81+
self.assertTrue(not original_user.is_active)

ietf/secr/rolodex/views.py

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88

99
from ietf.ietfauth.utils import role_required
1010
from ietf.person.models import Person, Email, Alias
11+
from ietf.person.utils import merge_users
1112
from ietf.secr.rolodex.forms import EditPersonForm, EmailForm, NameForm, NewPersonForm, SearchForm
1213

1314

@@ -174,8 +175,15 @@ def edit(request, id):
174175
person_form.save()
175176
email_formset.save()
176177

177-
# add new names to alias
178-
178+
if 'user' in person_form.changed_data and person_form.initial['user']:
179+
try:
180+
source = User.objects.get(username=person_form.initial['user'])
181+
merge_users(source, person_form.cleaned_data['user'])
182+
source.is_active = False
183+
source.save()
184+
except User.DoesNotExist:
185+
pass
186+
179187
messages.success(request, 'The Rolodex entry was changed successfully')
180188
return redirect('ietf.secr.rolodex.views.view', id=id)
181189

0 commit comments

Comments
 (0)