190 lines
7.5 KiB
Python
190 lines
7.5 KiB
Python
"""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')]"
|
|
)
|