Skip to content

Commit afb62a1

Browse files
committed
First draft for user permissions test
Updates to test scope based on Jenkins job. isort fixes. Broadening test scope. Adding settings, monitoring, policy_registry and partners. Replacing page.is_displayed with more general check. Removing APIDocsView based on Jenkins job Add tests for the bot protection of the admin portal
1 parent e20fdbe commit afb62a1

2 files changed

Lines changed: 78 additions & 53 deletions

File tree

Lines changed: 33 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,33 @@
1+
"""Conftest for user permissions tests"""
2+
3+
import pytest
4+
from selenium.common.exceptions import NoSuchElementException, WebDriverException
5+
from widgetastic.widget import GenericLocatorWidget
6+
7+
8+
@pytest.fixture
9+
def is_page_accessible():
10+
"""
11+
Helper function for permission tests to check if a page is accessible.
12+
13+
This checks for successful page access by verifying:
14+
1. Correct URL path is loaded
15+
2. The masthead header is present (exists on all allowed pages, not on access denied)
16+
"""
17+
18+
def _check(page):
19+
if page.path not in page.browser.url:
20+
return False
21+
22+
try:
23+
masthead = GenericLocatorWidget(
24+
page, locator="//header[contains(@class, 'pf-c-masthead') and contains(@class, 'pf-m-display-inline')]"
25+
)
26+
if not masthead.is_displayed:
27+
return False
28+
except (NoSuchElementException, WebDriverException):
29+
return False
30+
31+
return True
32+
33+
return _check

testsuite/tests/ui/users_and_roles/test_permissions.py

Lines changed: 45 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -2,76 +2,68 @@
22

33
import pytest
44

5-
from testsuite.ui.views.admin.audience.billing import BillingSettingsView, BillingView
5+
from testsuite.ui.views.admin.audience.account import AccountsView
6+
from testsuite.ui.views.admin.audience.billing import (
7+
BillingSettingsView,
8+
BillingView,
9+
)
610
from testsuite.ui.views.admin.audience.developer_portal import (
711
ActiveDocsView,
812
CMSNewPageView,
913
CMSNewSectionView,
1014
DeveloperPortalContentView,
1115
)
16+
from testsuite.ui.views.admin.backend.analytics import BackendTrafficView
1217
from testsuite.ui.views.admin.foundation import AccessDeniedView
1318

14-
PERMISSION_DICT = [
15-
pytest.param("portal", DeveloperPortalContentView),
16-
pytest.param("portal", DeveloperPortalContentView),
17-
pytest.param("portal", CMSNewPageView),
18-
pytest.param("portal", CMSNewSectionView),
19-
pytest.param("finance", BillingView),
20-
pytest.param(
21-
"finance",
22-
BillingSettingsView,
23-
marks=[pytest.mark.xfail, pytest.mark.issue("https://issues.redhat.com/browse/THREESCALE-10995")],
24-
),
25-
pytest.param("plans", ActiveDocsView),
26-
]
27-
28-
29-
@pytest.fixture()
30-
def all_page_objects():
31-
"""Returns all page objects from permissions tuple filtered of views with same permission"""
32-
33-
def _all_page_objects(except_permission, current_view):
19+
PERMISSIONS = ["portal", "finance", "settings", "partners", "monitoring", "plans", "policy_registry"]
3420

35-
all_views = [
36-
view
37-
for perm, view in [param.values for param in PERMISSION_DICT]
38-
if perm != except_permission or view == current_view
39-
]
40-
41-
return all_views
42-
43-
return _all_page_objects
21+
VIEWS = [
22+
("portal", DeveloperPortalContentView),
23+
("portal", CMSNewPageView),
24+
("portal", CMSNewSectionView),
25+
("finance", BillingView),
26+
("finance", BillingSettingsView),
27+
("plans", ActiveDocsView),
28+
("monitoring", BackendTrafficView),
29+
("partners", AccountsView),
30+
]
4431

4532

4633
# pylint: disable=too-many-arguments
47-
@pytest.mark.parametrize("permission, page_view", PERMISSION_DICT)
34+
@pytest.mark.parametrize("user_permission", PERMISSIONS)
35+
@pytest.mark.parametrize("required_permission, page_view", VIEWS)
4836
def test_member_user_permissions_per_section(
37+
account_password,
4938
custom_admin_login,
5039
navigator,
5140
provider_member_user,
52-
all_page_objects,
53-
permission,
41+
backend_default,
42+
user_permission,
43+
required_permission,
5444
page_view,
55-
allowed_services=False,
45+
is_page_accessible,
5646
):
57-
"""Tests user permissions permission per permission section"""
58-
member_user = provider_member_user(allowed_sections=permission, allowed_services=allowed_services)
59-
custom_admin_login(member_user.entity_name, "123456")
60-
61-
page_objects = all_page_objects(permission, page_view)
47+
"""
48+
Tests user permissions permission per permission section
49+
- Creates a member user with a specific permission
50+
- Logs in as that member user
51+
- Attempts to access a specific UI page
52+
- If users permission matches page's required permission -> allowed
53+
- Else, access denied
54+
"""
55+
member_user = provider_member_user(allowed_sections=[user_permission], allowed_services=None)
56+
custom_admin_login(member_user.entity_name, account_password)
6257

63-
for pg_obj in page_objects:
64-
# Dynamically import the view class
65-
view_module = __import__(pg_obj.__module__, fromlist=[pg_obj.__name__])
66-
page_class = getattr(view_module, pg_obj.__name__)
67-
page = navigator.open(page_class, wait_displayed=False)
58+
if page_view == BackendTrafficView:
59+
page = navigator.open(page_view, backend=backend_default, wait_displayed=False)
60+
else:
61+
page = navigator.open(page_view, wait_displayed=False)
6862

69-
if pg_obj == page_view:
70-
assert (
71-
page.is_displayed
72-
), f"{pg_obj.__name__} should be displayed for permissions {permission} and services {allowed_services}"
73-
else:
74-
assert AccessDeniedView(navigator.browser.root_browser).is_displayed, (
75-
f"{pg_obj.__name__}"
76-
f" should not be displayed for permissions {permission} and services {allowed_services}"
77-
)
63+
if user_permission == required_permission:
64+
assert is_page_accessible(page), f"A user with {user_permission} should be able to access {page_view}"
65+
else:
66+
access_denied_view = AccessDeniedView(navigator.browser.root_browser)
67+
assert (
68+
access_denied_view.is_displayed
69+
), f"A user with {user_permission} should not be able to access {page_view}"

0 commit comments

Comments
 (0)