sync-tabellio: do not crash if a user to desactivate has multiple accounts (#57393)

This commit is contained in:
Emmanuel Cazenave 2021-09-29 13:03:14 +02:00
parent aa2b3dcaf6
commit 0eb7acf9a5
2 changed files with 40 additions and 17 deletions

View File

@ -110,26 +110,24 @@ class Command(BaseCommand):
username = get_username(last_name, first_name)
try:
user = User.objects.get(first_name=first_name, last_name=last_name, is_active=True)
except User.DoesNotExist:
to_disable_users = User.objects.filter(first_name=first_name, last_name=last_name, is_active=True)
if not to_disable_users.count():
# a user didn't exist for that person, fine.
continue
for user in to_disable_users:
if verbose:
print('disabling', username)
# disable the user
user.is_active = False
user.save()
if verbose:
print('disabling', username)
# disable the user
user.is_active = False
user.save()
# remove the user from lists
if user in parl_list.members.all():
parl_list.members.remove(user)
parl_list.save()
if user in ministres_list.members.all():
ministres_list.members.remove(user)
ministres_list.save()
# remove the user from lists
if user in parl_list.members.all():
parl_list.members.remove(user)
parl_list.save()
if user in ministres_list.members.all():
ministres_list.members.remove(user)
ministres_list.save()
# get current deputies
deputies = {}

View File

@ -188,6 +188,31 @@ def test_remove_deputy_because_no_fonction(session, db, ministres_list, parl_lis
session.bind.engine.dispose()
def test_remove_user_does_not_crash_if_multiple_active_user_found(session, db, ministres_list, parl_list):
user = User.objects.create(first_name='John', last_name='Doe', email='john@doe.be')
assert user.is_active
parl_list.members.add(user)
assert parl_list.members.count() == 1
user_bis = User.objects.create(
first_name='John', last_name='Doe', email='john+bis@doe.be', username='johndoebis'
)
assert user_bis.is_active
deputy = create_deputy(session, 'John', 'Doe', 'john@doe.be', compol_name='foo')
# make him not deputy anymore
histo = deputy.tperhistolines[0]
histo.fin = datetime.now()
session.add(histo)
session.commit()
management.call_command('sync-tabellio', '--verbosity', '2')
user = User.objects.get(first_name='John', last_name='Doe', email='john@doe.be')
assert not user.is_active
user_bis = User.objects.get(first_name='John', last_name='Doe', email='john+bis@doe.be')
assert not user_bis.is_active
assert parl_list.members.count() == 0
def test_remove_deputy_because_become_ministre(session, db, ministres_list, parl_list):
user = User.objects.create(first_name='John', last_name='Doe', email='john@doe.be')
assert user.is_active