Update tests
This commit is contained in:
189
tests/frontend/test_secrets.py
Normal file
189
tests/frontend/test_secrets.py
Normal file
@ -0,0 +1,189 @@
|
||||
"""Tests for the secrets page."""
|
||||
|
||||
import allure
|
||||
import pytest
|
||||
from selenium.webdriver.common.by import By
|
||||
from selenium.webdriver.remote.webdriver import WebDriver
|
||||
from selenium.webdriver.support.select import Select
|
||||
from tests.integration.types import AdminServer
|
||||
|
||||
from .helpers.auth import login
|
||||
from .helpers.db import DatabasePreloader
|
||||
from .helpers.wait_helpers import (
|
||||
wait_for_alert,
|
||||
wait_for_element,
|
||||
wait_for_element_to_be_disabled,
|
||||
wait_for_element_to_be_visisble,
|
||||
wait_for_element_to_disappear,
|
||||
wait_for_element_with_text,
|
||||
)
|
||||
|
||||
|
||||
class TestSecretsPage:
|
||||
"""Test secrets page."""
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def login(self, ui_admin_server: AdminServer, driver: WebDriver) -> None:
|
||||
"""Log in and navigate to secrets page.."""
|
||||
admin_url = ui_admin_server[0]
|
||||
driver = login(ui_admin_server, driver)
|
||||
driver.get(admin_url + "/secrets")
|
||||
|
||||
@pytest.fixture(autouse=True)
|
||||
def create_testdata(self, ui_admin_server: AdminServer) -> None:
|
||||
"""Preload some test data."""
|
||||
test_clients = ["client1", "client2", "client3"]
|
||||
admin_url, (username, password) = ui_admin_server
|
||||
db = DatabasePreloader(admin_url, username, password)
|
||||
db.create_client(*test_clients)
|
||||
|
||||
@allure.title("Test secret creation")
|
||||
@allure.description("Verify that secrets can be created")
|
||||
def test_create_secret(self, driver: WebDriver) -> None:
|
||||
"""Test creation of secrets."""
|
||||
driver.refresh()
|
||||
create_secret_button = driver.find_element(By.ID, "createSecretButton")
|
||||
assert create_secret_button is not None
|
||||
create_secret_button.click()
|
||||
wait_for_element_to_be_visisble(driver, "drawer-create-secret-default")
|
||||
|
||||
drawer = driver.find_element(By.ID, "drawer-create-secret-default")
|
||||
assert drawer is not None
|
||||
name_input = drawer.find_element(By.NAME, "name")
|
||||
value_input = drawer.find_element(By.NAME, "value")
|
||||
client_select = drawer.find_element(By.NAME, "clients")
|
||||
client_select_node = Select(client_select)
|
||||
|
||||
name_input.send_keys("testsecret")
|
||||
value_input.send_keys("secret")
|
||||
client_select_node.select_by_visible_text("client1")
|
||||
|
||||
add_secret_button = drawer.find_element(By.XPATH, "//button[@type='submit']")
|
||||
add_secret_button.click()
|
||||
|
||||
client_appeared = wait_for_element_with_text(driver, "td", "testsecret")
|
||||
|
||||
assert client_appeared is not False
|
||||
|
||||
secret_name_field = driver.find_element(
|
||||
By.XPATH, "//tr/td[contains(text(), 'testsecret')]"
|
||||
)
|
||||
secret_row = secret_name_field.find_element(By.XPATH, "./..")
|
||||
client_field = secret_row.find_element(By.CLASS_NAME, "secret-client-list")
|
||||
secret_client = client_field.find_element(
|
||||
By.XPATH, "//span[contains(text(), 'client1')]"
|
||||
)
|
||||
assert secret_client is not None
|
||||
|
||||
@allure.title("Test auto-generating secrets")
|
||||
@allure.description("Test creation of a secret with automatic value")
|
||||
def test_auto_secret_creation(self, driver: WebDriver) -> None:
|
||||
"""Test creation of secret with automatic value."""
|
||||
driver.refresh()
|
||||
create_secret_button = driver.find_element(By.ID, "createSecretButton")
|
||||
assert create_secret_button is not None
|
||||
create_secret_button.click()
|
||||
wait_for_element_to_be_visisble(driver, "drawer-create-secret-default")
|
||||
|
||||
drawer = driver.find_element(By.ID, "drawer-create-secret-default")
|
||||
assert drawer is not None
|
||||
name_input = drawer.find_element(By.NAME, "name")
|
||||
value_input = drawer.find_element(By.NAME, "value")
|
||||
|
||||
# The auto generate checkbox is obscured by a dynamic div.
|
||||
# We find the label and its nested div
|
||||
|
||||
auto_generate_label = drawer.find_element(By.ID, "autoGenerateCheckboxLabel")
|
||||
# find the first div
|
||||
checkbox_div = auto_generate_label.find_element(By.TAG_NAME, "div")
|
||||
checkbox_div.click()
|
||||
wait_for_element_to_be_disabled(driver, By.NAME, "value")
|
||||
client_select = drawer.find_element(By.NAME, "clients")
|
||||
client_select_node = Select(client_select)
|
||||
|
||||
name_input.send_keys("autosecret")
|
||||
client_select_node.deselect_all()
|
||||
client_select_node.select_by_visible_text("client1")
|
||||
client_select_node.select_by_visible_text("client2")
|
||||
|
||||
add_secret_button = drawer.find_element(By.XPATH, "//button[@type='submit']")
|
||||
add_secret_button.click()
|
||||
|
||||
client_appeared = wait_for_element_with_text(driver, "td", "autosecret")
|
||||
|
||||
secret_name_field = driver.find_element(
|
||||
By.XPATH, "//tr/td[contains(text(), 'autosecret')]"
|
||||
)
|
||||
secret_row = secret_name_field.find_element(By.XPATH, "./..")
|
||||
client_field = secret_row.find_element(By.CLASS_NAME, "secret-client-list")
|
||||
secret_client1 = client_field.find_element(
|
||||
By.XPATH, "//span[contains(text(), 'client1')]"
|
||||
)
|
||||
assert secret_client1 is not None
|
||||
|
||||
secret_client2 = client_field.find_element(
|
||||
By.XPATH, "//span[contains(text(), 'client2')]"
|
||||
)
|
||||
assert secret_client2 is not None
|
||||
|
||||
@allure.title("Test manage client access")
|
||||
def test_manage_client_access(self, driver: WebDriver) -> None:
|
||||
"""Test the manage client access button."""
|
||||
# Use the previous step to create a secret assigned to two clients.
|
||||
self.test_auto_secret_creation(driver)
|
||||
driver.refresh()
|
||||
# Find the manage client access button
|
||||
# btn_id = "client-secret-modal-autosecret"
|
||||
manage_btn = driver.find_element(By.ID, "manage-client-access-btn-autosecret")
|
||||
assert manage_btn is not None
|
||||
manage_btn.click()
|
||||
wait_for_element_to_be_visisble(driver, "client-secret-modal-autosecret")
|
||||
modal = driver.find_element(By.ID, "client-secret-modal-autosecret")
|
||||
assert modal is not None
|
||||
client_pills = modal.find_elements(By.CLASS_NAME, "pill-client-secret")
|
||||
assert len(client_pills) == 2
|
||||
|
||||
# Remove client1
|
||||
remove_pill_btn_id = "btn-remove-client-client1-secret-autosecret"
|
||||
remove_btn = modal.find_element(By.ID, remove_pill_btn_id)
|
||||
assert remove_btn is not None
|
||||
remove_btn.click()
|
||||
alert = wait_for_alert(driver)
|
||||
alert.accept()
|
||||
|
||||
# Wait for the client pill to disappear.
|
||||
wait_for_element_to_disappear(
|
||||
driver,
|
||||
By.XPATH,
|
||||
"//td[@id='secret-client-list-autosecret']/span[contains(text(), 'client1')]",
|
||||
)
|
||||
|
||||
# Add a different client.
|
||||
client_select_field = modal.find_element(By.NAME, "client")
|
||||
assert client_select_field is not None
|
||||
assert client_select_field.tag_name == "select"
|
||||
|
||||
client_select = Select(client_select_field)
|
||||
client_select.select_by_visible_text("client3")
|
||||
|
||||
give_access = modal.find_element(By.XPATH, "//button[@type='submit']")
|
||||
assert "give access" in give_access.text.lower()
|
||||
give_access.click()
|
||||
wait_for_element(driver, By.ID, "client-secret-autosecret-pill-client3")
|
||||
|
||||
@allure.title("Test secret deletion")
|
||||
def test_delete_secret(self, driver: WebDriver) -> None:
|
||||
"""Test deleting a secret."""
|
||||
self.test_auto_secret_creation(driver)
|
||||
driver.refresh()
|
||||
delete_btn_id = "delete-secret-btn-autosecret"
|
||||
delete_btn = driver.find_element(By.ID, delete_btn_id)
|
||||
|
||||
delete_btn.click()
|
||||
|
||||
alert = wait_for_alert(driver)
|
||||
alert.accept()
|
||||
|
||||
wait_for_element_to_disappear(
|
||||
driver, By.XPATH, "//td[contains(text(), 'autosecret')]"
|
||||
)
|
||||
Reference in New Issue
Block a user