55from django .contrib .auth .models import User
66from django .urls import reverse
77from playwright .sync_api import Page
8+ from playwright .sync_api import expect
89from pytest_django .fixtures import SettingsWrapper
910from pytest_django .live_server_helper import LiveServer
1011
1112if "RUN_INTEGRATION_TESTS" not in os .environ :
1213 pytest .skip ("Skipping integration tests" , allow_module_level = True )
1314
1415
16+ def open_user_menu (page : Page ) -> None :
17+ user_menu = page .locator ("li.user.dropdown" )
18+ expect (user_menu ).to_be_visible ()
19+ user_menu .evaluate ("node => node.classList.add('open')" )
20+
21+
22+ def click_profile_from_user_menu (page : Page ) -> None :
23+ open_user_menu (page )
24+ page .get_by_role ("link" , name = "Your profile" ).click ()
25+
26+
27+ def click_logout_from_user_menu (page : Page ) -> None :
28+ open_user_menu (page )
29+ page .get_by_role ("button" , name = "Log out" ).click ()
30+
31+
1532@pytest .mark .django_db
1633def test_oidc_backend_creates_local_user (
1734 page : Page ,
@@ -27,8 +44,7 @@ def test_oidc_backend_creates_local_user(
2744 page .get_by_role ("button" , name = "Sign In" ).click ()
2845
2946 assert page .url == f"{ live_server .url } /transfer/"
30- page .get_by_text ("demo@example.com" ).click ()
31- page .get_by_role ("link" , name = "Your profile" ).click ()
47+ click_profile_from_user_menu (page )
3248
3349 assert page .url == f"{ live_server .url } { reverse ('accounts:profile' )} "
3450 assert [
@@ -66,8 +82,7 @@ def test_local_authentication_backend_authenticates_existing_user(
6682
6783 assert page .url == f"{ live_server .url } /transfer/"
6884
69- page .get_by_text ("foobar" ).click ()
70- page .get_by_role ("link" , name = "Your profile" ).click ()
85+ click_profile_from_user_menu (page )
7186
7287 assert page .url == f"{ live_server .url } { reverse ('accounts:profile' )} "
7388 assert [
@@ -147,8 +162,7 @@ def test_setting_request_parameter_in_local_login_url_redirects_to_secondary_pro
147162 page .get_by_role ("button" , name = "Sign In" ).click ()
148163
149164 assert page .url == f"{ live_server .url } /transfer/"
150- page .get_by_text ("supportadmin@example.com" ).click ()
151- page .get_by_role ("link" , name = "Your profile" ).click ()
165+ click_profile_from_user_menu (page )
152166
153167 assert page .url == f"{ live_server .url } { reverse ('accounts:profile' )} "
154168
@@ -172,8 +186,7 @@ def test_setting_request_parameter_in_local_login_url_redirects_to_secondary_pro
172186
173187 assert page .url == f"{ live_server .url } /transfer/"
174188
175- page .get_by_text ("supportdefault@example.com" ).click ()
176- page .get_by_role ("link" , name = "Your profile" ).click ()
189+ click_profile_from_user_menu (page )
177190
178191 assert page .url == f"{ live_server .url } { reverse ('accounts:profile' )} "
179192 assert [
@@ -211,8 +224,7 @@ def test_logging_out_logs_out_user_from_secondary_provider_admin_role(
211224 assert page .url == f"{ live_server .url } /transfer/"
212225
213226 # Logging out redirects the user to the login url.
214- page .get_by_text ("supportadmin@example.com" ).click ()
215- page .get_by_role ("button" , name = "Log out" ).click ()
227+ click_logout_from_user_menu (page )
216228 assert page .url == f"{ live_server .url } { reverse ('accounts:login' )} "
217229
218230 # Logging in through the OIDC provider requires to authenticate again.
@@ -244,8 +256,7 @@ def test_logging_out_logs_out_user_from_secondary_provider_default_role(
244256 assert page .url == f"{ live_server .url } /transfer/"
245257
246258 # Logging out redirects the user to the login url.
247- page .get_by_text ("supportdefault@example.com" ).click ()
248- page .get_by_role ("button" , name = "Log out" ).click ()
259+ click_logout_from_user_menu (page )
249260 assert page .url == f"{ live_server .url } { reverse ('accounts:login' )} "
250261
251262 # Logging in through the OIDC provider requires to authenticate again.
0 commit comments