mirror of
https://github.com/jupyterhub/jupyterhub.git
synced 2025-10-07 10:04:07 +00:00
Merge pull request #5120 from minrk/test_singleuser_xsrf
use browser.wait_for_url instead of expect(browser).to_have_url
This commit is contained in:
@@ -62,7 +62,7 @@ async def test_submit_login_form(app, browser, user_special_chars):
|
|||||||
await browser.goto(login_url)
|
await browser.goto(login_url)
|
||||||
await login(browser, user.name, password=user.name)
|
await login(browser, user.name, password=user.name)
|
||||||
expected_url = public_url(app, user)
|
expected_url = public_url(app, user)
|
||||||
await expect(browser).to_have_url(expected_url)
|
await browser.wait_for_url(expected_url)
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.parametrize(
|
@pytest.mark.parametrize(
|
||||||
@@ -143,7 +143,7 @@ async def test_open_url_login(
|
|||||||
await expect(browser).to_have_url(re.compile(pattern))
|
await expect(browser).to_have_url(re.compile(pattern))
|
||||||
await expect(browser).not_to_have_url(re.compile(".*/user/.*"))
|
await expect(browser).not_to_have_url(re.compile(".*/user/.*"))
|
||||||
else:
|
else:
|
||||||
await expect(browser).to_have_url(
|
await browser.wait_for_url(
|
||||||
re.compile(".*/user/" + f"{user_special_chars.urlname}/")
|
re.compile(".*/user/" + f"{user_special_chars.urlname}/")
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -883,17 +883,15 @@ async def test_menu_bar(app, browser, page, logged_in, user_special_chars):
|
|||||||
expected_url = f"hub/login?next={url_escape(app.base_url)}"
|
expected_url = f"hub/login?next={url_escape(app.base_url)}"
|
||||||
assert expected_url in browser.url
|
assert expected_url in browser.url
|
||||||
else:
|
else:
|
||||||
await expect(browser).to_have_url(
|
await browser.wait_for_url(
|
||||||
re.compile(f".*/user/{user_special_chars.urlname}/")
|
re.compile(f".*/user/{user_special_chars.urlname}/")
|
||||||
)
|
)
|
||||||
await browser.go_back()
|
await browser.go_back()
|
||||||
await expect(browser).to_have_url(re.compile(".*" + page))
|
await browser.wait_for_url(re.compile(".*" + page))
|
||||||
elif index == 3:
|
elif index == 3:
|
||||||
await expect(browser).to_have_url(re.compile(".*/login"))
|
await browser.wait_for_url(re.compile(".*/login"))
|
||||||
else:
|
else:
|
||||||
await expect(browser).to_have_url(
|
await browser.wait_for_url(re.compile(".*" + expected_link_bar_url[index]))
|
||||||
re.compile(".*" + expected_link_bar_url[index])
|
|
||||||
)
|
|
||||||
|
|
||||||
|
|
||||||
# LOGOUT
|
# LOGOUT
|
||||||
@@ -924,8 +922,8 @@ async def test_user_logout(app, browser, url, user_special_chars):
|
|||||||
|
|
||||||
# verify that user can login after logout
|
# verify that user can login after logout
|
||||||
await login(browser, user.name, password=user.name)
|
await login(browser, user.name, password=user.name)
|
||||||
await expect(browser).to_have_url(
|
await browser.wait_for_url(
|
||||||
re.compile(".*/user/" + f"{user_special_chars.urlname}/")
|
re.compile(".*/user/" + f"{user_special_chars.urlname}/"),
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
@@ -1016,7 +1014,7 @@ async def test_oauth_page(
|
|||||||
await expect(scopes_element).not_to_be_visible()
|
await expect(scopes_element).not_to_be_visible()
|
||||||
for scopes_element in scopes_elements
|
for scopes_element in scopes_elements
|
||||||
]
|
]
|
||||||
# checking that all scopes granded to user are presented in POST form (scope_list)
|
# checking that all scopes granted to user are presented in POST form (scope_list)
|
||||||
scope_list_oauth_page = [
|
scope_list_oauth_page = [
|
||||||
await scopes_element.get_attribute("value")
|
await scopes_element.get_attribute("value")
|
||||||
for scopes_element in scopes_elements
|
for scopes_element in scopes_elements
|
||||||
@@ -1288,8 +1286,8 @@ async def test_start_stop_server_on_admin_page(
|
|||||||
spawn_btn_xpath = f'//a[contains(@href, "spawn/{username}")]/button[contains(@class, "btn-light")]'
|
spawn_btn_xpath = f'//a[contains(@href, "spawn/{username}")]/button[contains(@class, "btn-light")]'
|
||||||
spawn_btn = browser.locator(spawn_btn_xpath)
|
spawn_btn = browser.locator(spawn_btn_xpath)
|
||||||
await expect(spawn_btn).to_be_enabled()
|
await expect(spawn_btn).to_be_enabled()
|
||||||
async with browser.expect_navigation(url=f"**/user/{username}/"):
|
|
||||||
await spawn_btn.click()
|
await spawn_btn.click()
|
||||||
|
await browser.wait_for_url(url=f"**/user/{username}/")
|
||||||
|
|
||||||
async def click_access_server(browser, username):
|
async def click_access_server(browser, username):
|
||||||
"""access to the server for users via the Access Server button"""
|
"""access to the server for users via the Access Server button"""
|
||||||
@@ -1337,7 +1335,7 @@ async def test_start_stop_server_on_admin_page(
|
|||||||
|
|
||||||
# click on Spawn page button
|
# click on Spawn page button
|
||||||
await click_spawn_page(browser, user2.name)
|
await click_spawn_page(browser, user2.name)
|
||||||
await expect(browser).to_have_url(re.compile(".*" + f"/user/{user2.name}/"))
|
await browser.wait_for_url(re.compile(".*" + f"/user/{user2.name}/"))
|
||||||
|
|
||||||
# open/return to the Admin page
|
# open/return to the Admin page
|
||||||
admin_page = url_path_join(public_host(app), app.hub.base_url, "admin")
|
admin_page = url_path_join(public_host(app), app.hub.base_url, "admin")
|
||||||
@@ -1491,18 +1489,18 @@ async def test_singleuser_xsrf(
|
|||||||
await browser.goto(login_url)
|
await browser.goto(login_url)
|
||||||
await login(browser, browser_user.name, browser_user.name)
|
await login(browser, browser_user.name, browser_user.name)
|
||||||
# end up at single-user
|
# end up at single-user
|
||||||
await expect(browser).to_have_url(re.compile(rf".*/user/{browser_user.name}/.*"))
|
await browser.wait_for_url(re.compile(rf".*/user/{browser_user.name}/.*"))
|
||||||
# wait for target user to start, too
|
# wait for target user to start, too
|
||||||
await target_start
|
await target_start
|
||||||
await app.proxy.add_user(target_user)
|
await app.proxy.add_user(target_user)
|
||||||
|
|
||||||
# visit target user, sets credentials for second server
|
# visit target user, sets credentials for second server
|
||||||
await browser.goto(public_url(app, target_user))
|
await browser.goto(public_url(app, target_user))
|
||||||
await expect(browser).to_have_url(re.compile(r".*/oauth2/authorize"))
|
await browser.wait_for_url(re.compile(r".*/oauth2/authorize"))
|
||||||
auth_button = browser.locator('//button[@type="submit"]')
|
auth_button = browser.locator('//button[@type="submit"]')
|
||||||
await expect(auth_button).to_be_enabled()
|
await expect(auth_button).to_be_enabled()
|
||||||
await auth_button.click()
|
await auth_button.click()
|
||||||
await expect(browser).to_have_url(re.compile(rf".*/user/{target_user.name}/.*"))
|
await browser.wait_for_url(re.compile(rf".*/user/{target_user.name}/.*"))
|
||||||
|
|
||||||
# at this point, we are on a page served by target_user,
|
# at this point, we are on a page served by target_user,
|
||||||
# logged in as browser_user
|
# logged in as browser_user
|
||||||
@@ -1644,8 +1642,8 @@ async def test_singleuser_xsrf(
|
|||||||
url_path_join(app.base_url, f"hub/spawn/{browser_user.name}/{server_name}"),
|
url_path_join(app.base_url, f"hub/spawn/{browser_user.name}/{server_name}"),
|
||||||
)
|
)
|
||||||
await browser.goto(url)
|
await browser.goto(url)
|
||||||
await expect(browser).to_have_url(
|
await browser.wait_for_url(
|
||||||
re.compile(rf".*/user/{browser_user.name}/{server_name}/.*")
|
re.compile(rf".*/user/{browser_user.name}/{server_name}/.*"),
|
||||||
)
|
)
|
||||||
# from named server URL, make sure we can talk to a kernel
|
# from named server URL, make sure we can talk to a kernel
|
||||||
token = browser_user.new_api_token(scopes=["access:servers!user"])
|
token = browser_user.new_api_token(scopes=["access:servers!user"])
|
||||||
|
Reference in New Issue
Block a user