From 77e094d2e203f4468e3ec76371a751f97923b168 Mon Sep 17 00:00:00 2001 From: Valentin Deniaud Date: Tue, 23 Feb 2021 16:25:03 +0100 Subject: [PATCH] csv_import: add auto key column detection (#50157) --- src/authentic2/csv_import.py | 7 ++++++- tests/test_csv_import.py | 31 +++++++++++++++++++++++++++++-- 2 files changed, 35 insertions(+), 3 deletions(-) diff --git a/src/authentic2/csv_import.py b/src/authentic2/csv_import.py index 930ab029..d97e568d 100644 --- a/src/authentic2/csv_import.py +++ b/src/authentic2/csv_import.py @@ -440,7 +440,12 @@ class UserCsvImporter(object): key_counts = sum(1 for header in self.headers if header.key) if not key_counts: - self.add_error(Error('missing-key-column', _('Missing key column'))) + if self.email_is_unique and 'email' in self.headers_by_name: + self.headers_by_name['email'].key = True + elif self.username_is_unique and 'username' in self.headers_by_name: + self.headers_by_name['username'].key = True + else: + self.add_error(Error('missing-key-column', _('Missing key column'))) if key_counts > 1: self.add_error(Error('too-many-key-columns', _('Too many key columns'))) diff --git a/tests/test_csv_import.py b/tests/test_csv_import.py index c28dc505..ea85fcad 100644 --- a/tests/test_csv_import.py +++ b/tests/test_csv_import.py @@ -122,8 +122,35 @@ def test_unknown_flag_error(profile, user_csv_importer_factory): assert importer.errors == [LineError('unknown-flag', line=1, column=2)] -def test_missing_key_column_error(profile, user_csv_importer_factory): - importer = user_csv_importer_factory('email,first_name\n1,2') +def test_missing_key_column_error(profile, user_csv_importer_factory, settings): + content = 'email,first_name\ntnoel@entrouvert.com,Thomas' + importer = user_csv_importer_factory(content) + assert not importer.run() + assert importer.has_errors + assert importer.errors == [Error('missing-key-column')] + + ou = get_default_ou() + ou.email_is_unique = True + ou.save() + + importer = user_csv_importer_factory(content) + assert importer.run() + assert not importer.has_errors + + content = 'username,first_name\ntnoel,Thomas' + + importer = user_csv_importer_factory(content) + assert importer.run() + assert not importer.has_errors + + settings.A2_USERNAME_IS_UNIQUE = False + importer = user_csv_importer_factory(content) + assert not importer.run() + assert importer.has_errors + assert importer.errors == [Error('missing-key-column')] + + content = 'last_name,first_name\nNoel,Thomas' + importer = user_csv_importer_factory(content) assert not importer.run() assert importer.has_errors assert importer.errors == [Error('missing-key-column')] -- 2.20.1