0001-csv_import-ignore-deleted-users-for-unicity-checks-4.patch
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 |
- |