From 29705873d50cf05f0442fde461023d5640355c8a Mon Sep 17 00:00:00 2001 From: Valentin Deniaud Date: Thu, 28 May 2020 14:24:06 +0200 Subject: [PATCH 1/2] tests: add select2 test helper (#41939) --- tests/test_a2_rbac.py | 20 +++++++------------- tests/test_manager.py | 26 +++++++++++--------------- tests/utils.py | 7 +++++++ 3 files changed, 25 insertions(+), 28 deletions(-) diff --git a/tests/test_a2_rbac.py b/tests/test_a2_rbac.py index 85b22a84..a52a27ee 100644 --- a/tests/test_a2_rbac.py +++ b/tests/test_a2_rbac.py @@ -37,7 +37,7 @@ from authentic2.a2_rbac.models import ( from authentic2.utils import get_hex_uuid -from .utils import login +from .utils import login, request_select2 def test_update_rbac(db): @@ -409,12 +409,9 @@ def test_admin_role_user_view(settings, app, admin, simple_user, ou1, user_ou1, # Default: all users are visible response = login(app, simple_user, '/manage/roles/') response = response.click('role_ou1') - select2_url = response.pyquery('select#id_user')[0].attrib['data-ajax--url'] - select2_field_id = response.pyquery('select#id_user')[0].attrib['data-field_id'] - - select2_response = app.get(select2_url, params={'field_id': select2_field_id, 'term': ''}) - assert select2_response.json['more'] is False - assert (set(result['id'] for result in select2_response.json['results']) + select2_json = request_select2(app, response) + assert select2_json['more'] is False + assert (set(result['id'] for result in select2_json['results']) == set([simple_user.id, user_ou1.id, admin.id])) # with A2_RBAC_ROLE_ADMIN_RESTRICT_TO_OU_USERS after a reload of the admin @@ -423,12 +420,9 @@ def test_admin_role_user_view(settings, app, admin, simple_user, ou1, user_ou1, role_ou1.get_admin_role() response = app.get('/manage/roles/') response = response.click('role_ou1') - select2_url = response.pyquery('select#id_user')[0].attrib['data-ajax--url'] - select2_field_id = response.pyquery('select#id_user')[0].attrib['data-field_id'] - select2_response = app.get(select2_url, params={'field_id': select2_field_id, 'term': ''}) - assert select2_response.json['more'] is False - assert (set(result['id'] for result in select2_response.json['results']) - == set([user_ou1.id])) + select2_json = request_select2(app, response) + assert select2_json['more'] is False + assert (set(result['id'] for result in select2_json['results']) == set([user_ou1.id])) def test_no_managed_ct(transactional_db, settings): diff --git a/tests/test_manager.py b/tests/test_manager.py index d89c167b..40c2406e 100644 --- a/tests/test_manager.py +++ b/tests/test_manager.py @@ -37,7 +37,7 @@ from django.contrib.auth import get_user_model from django.contrib.contenttypes.models import ContentType from django.utils.encoding import force_bytes from django.utils.six.moves.urllib.parse import urlparse -from .utils import login, get_link_from_mail +from .utils import login, get_link_from_mail, request_select2 pytestmark = pytest.mark.django_db @@ -1115,11 +1115,9 @@ def test_manager_widget_fields_validation(app, simple_user, simple_role): def test_manager_role_widgets_choices(app, simple_user, simple_role): def get_choices(response): - select2_url = response.pyquery('select')[0].attrib['data-ajax--url'] - select2_field_id = response.pyquery('select')[0].attrib['data-field_id'] - select2_response = app.get(select2_url, params={'field_id': select2_field_id, 'term': ''}) - assert select2_response.json['more'] is False - return set(result['id'] for result in select2_response.json['results']) + select2_json = request_select2(app, response) + assert select2_json['more'] is False + 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) @@ -1152,17 +1150,15 @@ def test_manager_widgets_field_id_other_user(app, admin, simple_user, simple_rol simple_role.get_admin_role().members.add(simple_user) response = login(app, admin, '/manage/roles/%s/add-child/' % simple_role.pk) - select2_url = response.pyquery('select')[0].attrib['data-ajax--url'] - select2_field_id = response.pyquery('select')[0].attrib['data-field_id'] - select2_response = app.get(select2_url, params={'field_id': select2_field_id, 'term': ''}) - assert select2_response.json['more'] is False + select2_json = request_select2(app, response) + assert select2_json['more'] is False # admin can see every roles assert set([simple_role.pk, other_role.pk]) == \ - set(result['id'] for result in select2_response.json['results']) + set(result['id'] for result in select2_json['results']) - response = login(app, simple_user) - # with the same field_id - select2_response = app.get(select2_url, params={'field_id': select2_field_id, 'term': ''}) + login(app, simple_user) + # same request from the page served for admin + select2_json = request_select2(app, response) # simple_user doesn't see all roles - assert simple_role.pk == select2_response.json['results'][0]['id'] + assert simple_role.pk == select2_json['results'][0]['id'] diff --git a/tests/utils.py b/tests/utils.py index 821820ef..2c0ccc12 100644 --- a/tests/utils.py +++ b/tests/utils.py @@ -208,3 +208,10 @@ def find_free_tcp_port(): s.bind(('', 0)) s.setsockopt(socket.SOL_SOCKET, socket.SO_REUSEADDR, 1) return s.getsockname()[1] + + +def request_select2(app, response, term=''): + select2_url = response.pyquery('select')[0].attrib['data-ajax--url'] + select2_field_id = response.pyquery('select')[0].attrib['data-field_id'] + select2_response = app.get(select2_url, params={'field_id': select2_field_id, 'term': term}) + return select2_response.json -- 2.20.1