From 54a5a379de6838f3a10125ac440602e0c884030b Mon Sep 17 00:00:00 2001 From: Benjamin Dauvergne Date: Fri, 10 Jul 2020 11:58:48 +0200 Subject: [PATCH 1/2] tests: move users manager tests (#45009) --- tests/test_manager.py | 136 +----------------------------------- tests/test_user_manager.py | 137 ++++++++++++++++++++++++++++++++++++- 2 files changed, 137 insertions(+), 136 deletions(-) diff --git a/tests/test_manager.py b/tests/test_manager.py index 12cb6759..8412614d 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -56,6 +56,7 @@ def test_manager_login(superuser_or_admin, app): path = reverse('a2-manager-%s' % section) assert manager_home_page.pyquery.remove_namespaces()('.apps a[href=\'%s\']' % path) + def test_manager_create_ou(superuser_or_admin, app): ou_add = login(app, superuser_or_admin, path=reverse('a2-manager-ou-add')) form = ou_add.form @@ -761,84 +762,6 @@ def test_return_on_logout(superuser, app): assert response.request.query_string == 'next=/manage/' -def test_manager_create_user_next(superuser_or_admin, app, ou1): - login(app, superuser_or_admin, '/manage/') - - next_url = u'/example.nowhere.null/' - url = u'/manage/users/%s/add/?next=%s' % (ou1.pk, next_url) - response = app.get(url) - - # cancel is not handled through form submission, it's a link - # next without cancel, no cancel button - assert response.pyquery.remove_namespaces()('a.cancel').attr('href') == '../..' - assert response.pyquery.remove_namespaces()('input[name="next"]').attr('value') == next_url - - next_url = u'/example.nowhere.null/$UUID/' - cancel_url = u'/example.nowhere.cancel/' - url = u'/manage/users/%s/add/?next=%s&cancel=%s' % (ou1.pk, next_url, cancel_url) - response = app.get(url) - - assert response.pyquery.remove_namespaces()('a.cancel').attr('href') == cancel_url - assert response.pyquery.remove_namespaces()('input[name="next"]').attr('value') == next_url - - form = response.form - form.set('first_name', 'John') - form.set('last_name', 'Doe') - form.set('email', 'john.doe@gmail.com') - form.set('password1', 'ABcd1234') - form.set('password2', 'ABcd1234') - response = form.submit() - user = User.objects.latest('id') - assert urlparse(response.location).path == next_url.replace('$UUID', str(user.uuid)) - - -def test_manager_create_user_next_form_error(superuser_or_admin, app, ou1): - next_url = u'/example.nowhere.null/' - url = u'/manage/users/%s/add/?next=%s' % (ou1.pk, next_url) - login(app, superuser_or_admin, '/manage/') - response = app.get(url) - form = response.form - form.set('first_name', 'John') - form.set('last_name', 'Doe') - form.set('email', 'jd') # erroneous - form.set('password1', 'notvalid') # erroneous - assert force_bytes('' % next_url) in form.submit().body - - -def test_manager_add_user_querystring(superuser_or_admin, app, ou1): - querystring = u'stay_here=true' - url = u'/manage/users/add/?%s' % querystring - login(app, superuser_or_admin, '/manage/') - response = app.get(url) - - assert querystring in response.location - - -def test_manager_edit_user_next(app, simple_user, superuser_or_admin): - next_url = u'/example.nowhere.null/' - url = u'/manage/users/%s/edit/?next=%s' % (simple_user.pk, next_url) - login(app, superuser_or_admin, '/manage/') - response = app.get(url) - - # cancel if not handled through form submission - assert response.pyquery.remove_namespaces()('a.cancel').attr('href') == next_url - - form = response.form - form.set('last_name', 'New name') - assert urlparse(form.submit().location).path == next_url - - -def test_manager_edit_user_next_form_error(superuser_or_admin, app, ou1, simple_user): - next_url = u'/example.nowhere.null/' - url = u'/manage/users/%s/edit/?next=%s' % (simple_user.pk, next_url) - login(app, superuser_or_admin, '/manage/') - response = app.get(url) - form = response.form - form.set('email', 'jd') # erroneous - resp = form.submit() - assert '' % next_url in resp.ubody - - def test_roles_widget(admin, app, db): from authentic2.manager.forms import ChooseRoleForm @@ -883,59 +806,6 @@ def test_roles_for_change_widget(admin, app, db): assert len(response.json['results']) == 1 -def test_user_add_settings(settings, admin, app, db): - passwd_options = ('generate_password', 'reset_password_at_next_login', - 'send_mail', 'send_password_reset') - for policy in [choice[0] for choice in OU.USER_ADD_PASSWD_POLICY_CHOICES]: - ou = get_default_ou() - ou.user_add_password_policy = policy - ou.save() - user_add = login(app, admin, '/manage/users/add/').follow() - for option, i in zip(passwd_options, range(4)): - assert (user_add.form.get(option).value - == {False: None, True: 'on'}.get(OU.USER_ADD_PASSWD_POLICY_VALUES[policy][i])) - app.get('/logout/').form.submit() - - -def test_ou_hide_username(admin, app, db): - some_ou = OU.objects.create(name=u'Some Ou', show_username=False) - - login(app, admin, '/manage/') - url = u'/manage/users/%s/add/' % some_ou.pk - response = app.get(url) - q = response.pyquery.remove_namespaces() - assert len(q('p[id="id_username_p"]')) == 0 - - form = response.form - form.set('first_name', 'John') - form.set('last_name', 'Doe') - form.set('email', 'john.doe@gmail.com') - form.set('password1', 'ABcd1234') - form.set('password2', 'ABcd1234') - form.submit() - - assert User.objects.get(email='john.doe@gmail.com') - - -def test_manager_edit_user_email_verified(app, simple_user, superuser_or_admin): - simple_user.email_verified = True - simple_user.save() - - url = u'/manage/users/%s/edit/' % simple_user.pk - login(app, superuser_or_admin, '/manage/') - - user = User.objects.get(id=simple_user.id) - assert user.email_verified - - response = app.get(url) - form = response.form - form.set('email', 'new.email@gmail.net') - response = form.submit().follow() - - user = User.objects.get(id=simple_user.id) - assert not user.email_verified - - def test_manager_ajax_form_view_mixin_response(superuser_or_admin, app): app.set_user(superuser_or_admin.username) resp = app.get('/manage/roles/add/', xhr=True, status=200) @@ -1004,7 +874,7 @@ def test_manager_role_admin_permissions(app, simple_user, admin, simple_role): url = '/manage/roles/%s/remove-parent/%s/' % (role.pk, simple_role.pk) token = str(response.context['csrf_token']) app.post(url, params={'csrfmiddlewaretoken': token}) - assert not simple_role in role.parents() + assert simple_role not in role.parents() # user roles view works response = app.get('/manage/users/%s/roles/' % admin.pk) @@ -1118,7 +988,7 @@ def test_manager_role_widgets_choices(app, simple_user, simple_role): return set(result['id'] for result in select2_json['results']) visible_role = Role.objects.create(name='visible_role', ou=simple_user.ou) - invisible_role = Role.objects.create(name='invisible_role', ou=simple_user.ou) + Role.objects.create(name='invisible_role', ou=simple_user.ou) admin_of_simple_role = simple_role.get_admin_role() admin_of_simple_role.members.add(simple_user) diff --git a/tests/test_user_manager.py b/tests/test_user_manager.py index 24f95d8d..cf9d5e20 100644 --- a/tests/test_user_manager.py +++ b/tests/test_user_manager.py @@ -20,6 +20,7 @@ from __future__ import unicode_literals import csv import re import time +from urllib.parse import urlparse import pytest from webtest import Upload @@ -263,7 +264,7 @@ def test_export_csv(settings, app, superuser, django_assert_num_queries): User.objects.bulk_create(users) users = list(User.objects.filter(username__startswith='user')) - user_ct = ContentType.objects.get_for_model(User) + ContentType.objects.get_for_model(User) atvs = [] for i in range(USER_COUNT): atvs.extend([AttributeValue( @@ -277,7 +278,7 @@ def test_export_csv(settings, app, superuser, django_assert_num_queries): # overspending memory for the queryset cache, 4 queries by batches num_queries = int(4 + 4 * (user_count / DEFAULT_BATCH_SIZE + bool(user_count % DEFAULT_BATCH_SIZE))) with django_assert_num_queries(num_queries): - response = response.click('CSV') + response = response.click('CSV') table = list(csv.reader(response.text.splitlines())) assert len(table) == (user_count + 1) assert len(table[0]) == (15 + AT_COUNT) @@ -512,7 +513,6 @@ def test_user_import_attributes(transactional_db, app, admin, media): user_count = User.objects.count() login(app, admin, '/manage/users/') - csv_lines = [ u"email key verified,first_name,last_name,more,title,bike,saintsday,birthdate,zip,phone", u"elliot@universalpictures.com,Elliott,Thomas,petit,Mr,True,2019-7-20,1972-05-26,75014,1234", @@ -573,3 +573,134 @@ Elliott,3''' response = import_csv(content, app) assert len(response.pyquery('table.main tbody tr.row-invalid')) == 1 + + +def test_manager_create_user_next(superuser_or_admin, app, ou1): + login(app, superuser_or_admin, '/manage/') + + next_url = u'/example.nowhere.null/' + url = u'/manage/users/%s/add/?next=%s' % (ou1.pk, next_url) + response = app.get(url) + + # cancel is not handled through form submission, it's a link + # next without cancel, no cancel button + assert response.pyquery.remove_namespaces()('a.cancel').attr('href') == '../..' + assert response.pyquery.remove_namespaces()('input[name="next"]').attr('value') == next_url + + next_url = u'/example.nowhere.null/$UUID/' + cancel_url = u'/example.nowhere.cancel/' + url = u'/manage/users/%s/add/?next=%s&cancel=%s' % (ou1.pk, next_url, cancel_url) + response = app.get(url) + + assert response.pyquery.remove_namespaces()('a.cancel').attr('href') == cancel_url + assert response.pyquery.remove_namespaces()('input[name="next"]').attr('value') == next_url + + form = response.form + form.set('first_name', 'John') + form.set('last_name', 'Doe') + form.set('email', 'john.doe@gmail.com') + form.set('password1', 'ABcd1234') + form.set('password2', 'ABcd1234') + response = form.submit() + user = User.objects.latest('id') + assert urlparse(response.location).path == next_url.replace('$UUID', str(user.uuid)) + + +def test_manager_create_user_next_form_error(superuser_or_admin, app, ou1): + next_url = u'/example.nowhere.null/' + url = u'/manage/users/%s/add/?next=%s' % (ou1.pk, next_url) + login(app, superuser_or_admin, '/manage/') + response = app.get(url) + form = response.form + form.set('first_name', 'John') + form.set('last_name', 'Doe') + form.set('email', 'jd') # erroneous + form.set('password1', 'notvalid') # erroneous + assert '' % next_url in form.submit().text + + +def test_manager_add_user_querystring(superuser_or_admin, app, ou1): + querystring = u'stay_here=true' + url = u'/manage/users/add/?%s' % querystring + login(app, superuser_or_admin, '/manage/') + response = app.get(url) + + assert querystring in response.location + + +def test_manager_edit_user_next(app, simple_user, superuser_or_admin): + next_url = u'/example.nowhere.null/' + url = u'/manage/users/%s/edit/?next=%s' % (simple_user.pk, next_url) + login(app, superuser_or_admin, '/manage/') + response = app.get(url) + + # cancel if not handled through form submission + assert response.pyquery.remove_namespaces()('a.cancel').attr('href') == next_url + + form = response.form + form.set('last_name', 'New name') + assert urlparse(form.submit().location).path == next_url + + +def test_manager_edit_user_next_form_error(superuser_or_admin, app, ou1, simple_user): + next_url = u'/example.nowhere.null/' + url = u'/manage/users/%s/edit/?next=%s' % (simple_user.pk, next_url) + login(app, superuser_or_admin, '/manage/') + response = app.get(url) + form = response.form + form.set('email', 'jd') # erroneous + resp = form.submit() + assert '' % next_url in resp.ubody + + +def test_user_add_settings(settings, admin, app, db): + passwd_options = ('generate_password', 'reset_password_at_next_login', + 'send_mail', 'send_password_reset') + for policy in [choice[0] for choice in OU.USER_ADD_PASSWD_POLICY_CHOICES]: + ou = get_default_ou() + ou.user_add_password_policy = policy + ou.save() + user_add = login(app, admin, '/manage/users/add/').follow() + for option, i in zip(passwd_options, range(4)): + assert (user_add.form.get(option).value + == {False: None, True: 'on'}.get(OU.USER_ADD_PASSWD_POLICY_VALUES[policy][i])) + app.get('/logout/').form.submit() + + +def test_ou_hide_username(admin, app, db): + some_ou = OU.objects.create(name=u'Some Ou', show_username=False) + + login(app, admin, '/manage/') + url = u'/manage/users/%s/add/' % some_ou.pk + response = app.get(url) + q = response.pyquery.remove_namespaces() + assert len(q('p[id="id_username_p"]')) == 0 + + form = response.form + form.set('first_name', 'John') + form.set('last_name', 'Doe') + form.set('email', 'john.doe@gmail.com') + form.set('password1', 'ABcd1234') + form.set('password2', 'ABcd1234') + form.submit() + + assert User.objects.get(email='john.doe@gmail.com') + + +def test_manager_edit_user_email_verified(app, simple_user, superuser_or_admin): + simple_user.email_verified = True + simple_user.save() + + url = u'/manage/users/%s/edit/' % simple_user.pk + login(app, superuser_or_admin, '/manage/') + + user = User.objects.get(id=simple_user.id) + assert user.email_verified + + response = app.get(url) + form = response.form + form.set('email', 'new.email@gmail.net') + response = form.submit().follow() + + user = User.objects.get(id=simple_user.id) + assert not user.email_verified -- 2.26.2