diff --git a/src/authentic2/manager/user_views.py b/src/authentic2/manager/user_views.py index 3e223f54a..fdaaf98f2 100644 --- a/src/authentic2/manager/user_views.py +++ b/src/authentic2/manager/user_views.py @@ -842,6 +842,9 @@ class UserImportView(MediaMixin, PermissionMixin, TemplateView): self.user_import = UserImport(uuid) if not self.user_import.exists(): raise Http404 + if self.user_import.encoding == 'utf-8': + with self.user_import.meta_update as meta: + meta['encoding'] = 'utf-8-sig' return super(UserImportView, self).dispatch(request, uuid, **kwargs) def get(self, request, uuid, filename=None): diff --git a/tests/test_user_manager.py b/tests/test_user_manager.py index 8d259c24d..09372bb4c 100644 --- a/tests/test_user_manager.py +++ b/tests/test_user_manager.py @@ -584,6 +584,37 @@ x,x,x,x'''.encode( app.get('/manage/users/import/%s/%s/' % (_import.uuid, execute.uuid), status=403) +def test_user_import_legacy_encoding(transactional_db, app, admin, ou1, admin_ou1): + response = login(app, admin, '/manage/users/') + response = response.click('Import users') + response.form.set( + 'import_file', + Upload( + 'users.csv', + '''email key verified,first_name,last_name,phone +tnoel@entrouvert.com,Thomas,Noël,1234 +fpeters@entrouvert.com,Frédéric,Péters,5678 +john.doe@entrouvert.com,John,Doe,9101112 +x,x,x,x'''.encode( + 'utf-8' + ), + 'application/octet-stream', + ), + ) + response.form.set('encoding', 'utf-8-sig') + response.form.set('ou', str(get_default_ou().pk)) + response = response.form.submit() + + imports = [i for i in user_import.UserImport.all()] + # oops, utf-8 used to be supported. now it's utf-8-sig but imports may have + # been created with utf-8 encoding and not executed yet + with imports[0].meta_update as meta: + meta['encoding'] = 'utf-8' # not supported anymore + + response = response.follow() + response = response.forms['action-form'].submit(name='simulate') + + def test_su_permission(app, admin, simple_user): resp = login(app, admin, '/manage/users/%s/' % simple_user.pk) assert len(resp.pyquery('button[name="su"]')) == 0