Projet

Général

Profil

0001-csv_import-ignore-deleted-users-for-unicity-checks-4.patch

Valentin Deniaud, 24 février 2021 15:49

Télécharger (2,44 ko)

Voir les différences:

Subject: [PATCH] csv_import: ignore deleted users for unicity checks (#49449)

 src/authentic2/csv_import.py |  4 ++--
 tests/test_csv_import.py     | 21 +++++++++++++++++++++
 2 files changed, 23 insertions(+), 2 deletions(-)
src/authentic2/csv_import.py
584 584
        return ROLE_NAME in self.headers_by_name or ROLE_SLUG in self.headers_by_name
585 585

  
586 586
    def check_unique_constraints(self, row, unique_map, user=None):
587
        ou_users = User.objects.filter(ou=self.ou)
587
        ou_users = User.objects.filter(ou=self.ou, deleted__isnull=True)
588 588
        # ignore new users
589
        users = User.objects.exclude(id__gt=self.max_user_id)
589
        users = User.objects.filter(id__lte=self.max_user_id, deleted__isnull=True)
590 590
        if user:
591 591
            users = users.exclude(pk=user.pk)
592 592
            ou_users = ou_users.exclude(pk=user.pk)
tests/test_csv_import.py
24 24

  
25 25
from django.contrib.auth.hashers import make_password, check_password
26 26
from django.core import mail
27
from django.utils import timezone
27 28

  
28 29
from django_rbac.utils import get_role_model
29 30

  
......
625 626
    assert importer.run()
626 627
    assert importer.has_errors
627 628
    assert 'unknown hashing algorithm' in importer.rows[0].cells[-1].errors[0].description
629

  
630

  
631
def test_csv_import_deleted_user(profile, user_csv_importer_factory):
632
    content = '''email key,first_name,last_name,phone unique
633
tnoel@entrouvert.com,Thomas,Noël,1234'''
634
    importer = user_csv_importer_factory(content)
635

  
636
    user = User.objects.create(ou=get_default_ou())
637
    user.attributes.phone = '1234'
638

  
639
    assert importer.run()
640
    assert importer.has_errors
641
    assert importer.rows[0].errors == [Error('unique-constraint-failed')]
642

  
643
    user.deleted = timezone.now()
644
    user.save()
645
    importer = user_csv_importer_factory(content)
646
    assert importer.run()
647
    assert not importer.has_errors
648
    assert User.objects.filter(email='tnoel@entrouvert.com').exists()
628
-