212 lines
9.9 KiB
Python
212 lines
9.9 KiB
Python
"""Модуль вкладки настройки Keycloak Аутентификации.
|
||
|
||
Содержит класс KeycloakAuthSettings для работы с вкладкой настройки Keycloak Аутентификации.
|
||
Позволяет проверять состояние и взаимодействовать с элементами вкладки.
|
||
"""
|
||
|
||
import re
|
||
from playwright.sync_api import Page
|
||
from locators.settings_form_locators import SettingsFormLocators
|
||
from elements.text_input_element import TextInput
|
||
from components.toolbar_component import ToolbarComponent
|
||
from components.alert_component import AlertComponent
|
||
from components_derived.settings_form_component import SettingsFormComponent
|
||
from pages.base_page import BasePage
|
||
|
||
class KeycloakAuthSettingsTab(BasePage):
|
||
"""Класс для работы с вкладкой настройки Keycloak Аутентификации.
|
||
|
||
Предоставляет методы для взаимодействия с вкладкой настройки Keycloak Аутентификации.
|
||
|
||
Args:
|
||
page: Экземпляр страницы Playwright.
|
||
"""
|
||
|
||
def __init__(self, page: Page) -> None:
|
||
"""Инициализирует компоненты вкладки настройки Keycloak Аутентификации."""
|
||
|
||
super().__init__(page)
|
||
|
||
self.toolbar = ToolbarComponent(page, "KEYCLOAK")
|
||
|
||
toolbar_button_edit = self.page.get_by_role("navigation"). \
|
||
locator("//button[@data-testid='KEYCLOAK__btn__edit']")
|
||
self.toolbar.add_tooltip_button(toolbar_button_edit, "edit")
|
||
|
||
toolbar_button_save = self.page.get_by_role("navigation"). \
|
||
locator("//button[@data-testid='KEYCLOAK__btn__done']")
|
||
self.toolbar.add_tooltip_button(toolbar_button_save, "save")
|
||
|
||
toolbar_button_cancel = self.page.get_by_role("navigation"). \
|
||
locator("//button[@data-testid='KEYCLOAK__btn__close']")
|
||
self.toolbar.add_tooltip_button(toolbar_button_cancel, "cancel")
|
||
|
||
# Форма для отображения/редактирования полей настроек KEYCLOAK Аутентификации
|
||
self.settings_form = SettingsFormComponent(page)
|
||
|
||
container_locator = self.page.locator(SettingsFormLocators.SETTINGS_FORM_KEYCLOAK_INPUT_FORM_CONTAINER)
|
||
|
||
self.input_fields_locators = self.settings_form.get_input_fields_locators(container_locator)
|
||
|
||
loc = self.input_fields_locators.get("url")
|
||
loc_url_input = loc.locator("//input[@data-testid='KEYCLOAK__text-field__url']")
|
||
url_setting_input = TextInput(page, loc_url_input, "url_setting_input")
|
||
self.settings_form.add_content_item("url_setting_input", url_setting_input)
|
||
|
||
loc = self.input_fields_locators.get("url_token")
|
||
loc_url_token_input = loc.locator("//input[@data-testid='KEYCLOAK__text-field__url_token']")
|
||
url_token_setting_input = TextInput(page, loc_url_token_input, "url_token_setting_input")
|
||
self.settings_form.add_content_item("url_token_setting_input", url_token_setting_input)
|
||
|
||
loc = self.input_fields_locators.get("clientid")
|
||
loc_clientid_input = loc.locator("//input[@data-testid='KEYCLOAK__text-field__clientid']")
|
||
clientid_setting_input = TextInput(page, loc_clientid_input, "clientid_setting_input")
|
||
self.settings_form.add_content_item("clientid_setting_input", clientid_setting_input)
|
||
|
||
loc = self.input_fields_locators.get("clientsecret")
|
||
loc_clientsecret_input = loc.locator("//input[@data-testid='KEYCLOAK__text-field__clientsecret']")
|
||
clientsecret_setting_input = TextInput(page, loc_clientsecret_input, "clientsecret_setting_input")
|
||
self.settings_form.add_content_item("clientsecret_setting_input", clientsecret_setting_input)
|
||
|
||
loc = self.input_fields_locators.get("redirect_uri")
|
||
loc_redirect_uri_input = loc.locator("//input[@data-testid='KEYCLOAK__text-field__redirect_uri']")
|
||
redirect_uri_setting_input = TextInput(page, loc_redirect_uri_input, "redirect_uri_setting_input")
|
||
self.settings_form.add_content_item("redirect_uri_setting_input", redirect_uri_setting_input)
|
||
|
||
self.alert = AlertComponent(page)
|
||
|
||
# Действия:
|
||
def click_cancel_button(self) -> None:
|
||
"""Нажатие кнопки 'Отменить' на тулбаре."""
|
||
|
||
self.toolbar.check_button_visibility("cancel")
|
||
self.toolbar.get_button_by_name("cancel").click()
|
||
|
||
def click_edit_button(self) -> None:
|
||
"""Нажатие кнопки 'Редактировать' на тулбаре."""
|
||
|
||
self.toolbar.check_button_visibility("edit")
|
||
self.toolbar.get_button_by_name("edit").click()
|
||
|
||
def click_save_button(self) -> None:
|
||
"""Нажатие кнопки 'Сохранить' на тулбаре."""
|
||
|
||
self.toolbar.check_button_visibility("save")
|
||
self.toolbar.get_button_by_name("save").click()
|
||
|
||
def get_current_setting_values(self) -> dict:
|
||
"""Возвращает текущее значение полей настроек.
|
||
|
||
Returns:
|
||
str : Текущее значение полей настроек.
|
||
"""
|
||
|
||
values = {}
|
||
field = self.settings_form.get_content_item("url_setting_input")
|
||
values.update({"url": field.get_input_value().strip()})
|
||
|
||
field = self.settings_form.get_content_item("url_token_setting_input")
|
||
values.update({"url_token": field.get_input_value().strip()})
|
||
|
||
field = self.settings_form.get_content_item("clientid_setting_input")
|
||
values.update({"clientid": field.get_input_value().strip()})
|
||
|
||
field = self.settings_form.get_content_item("clientsecret_setting_input")
|
||
values.update({"clientsecret": field.get_input_value().strip()})
|
||
|
||
field = self.settings_form.get_content_item("redirect_uri_setting_input")
|
||
values.update({"redirect_uri": field.get_input_value().strip()})
|
||
|
||
return values
|
||
|
||
def input_url(self, text: str) -> None:
|
||
"""Заполнение поля 'URL'."""
|
||
|
||
message_input = self.settings_form.get_content_item("url_setting_input")
|
||
message_input.clear()
|
||
message_input.input_value(text)
|
||
|
||
def input_url_token(self, text: str) -> None:
|
||
"""Заполнение поля 'URL_TOKEN'."""
|
||
|
||
message_input = self.settings_form.get_content_item("url_token_setting_input")
|
||
message_input.clear()
|
||
message_input.input_value(text)
|
||
|
||
def input_clientid(self, text: str) -> None:
|
||
"""Заполнение поля 'CLIENTID'."""
|
||
|
||
message_input = self.settings_form.get_content_item("clientid_setting_input")
|
||
message_input.clear()
|
||
message_input.input_value(text)
|
||
|
||
def input_clientsecret(self, text: str) -> None:
|
||
"""Заполнение поля 'CLIENTSECRET'."""
|
||
|
||
message_input = self.settings_form.get_content_item("clientsecret_setting_input")
|
||
message_input.clear()
|
||
message_input.input_value(text)
|
||
|
||
def input_redirect_uri(self, text: str) -> None:
|
||
"""Заполнение поля 'REDIRECT_URI'."""
|
||
|
||
message_input = self.settings_form.get_content_item("redirect_uri_setting_input")
|
||
message_input.clear()
|
||
message_input.input_value(text)
|
||
|
||
# Проверки:
|
||
def check_content(self):
|
||
"""Проверяет наличие и корректность всех элементов страницы."""
|
||
|
||
expected_input_field_names = ["url", "url_token", "clientid",
|
||
"clientsecret", "redirect_uri"]
|
||
|
||
self.should_be_toolbar()
|
||
|
||
actual_input_field_names = self.input_fields_locators.keys()
|
||
|
||
for name in expected_input_field_names:
|
||
assert name in actual_input_field_names, \
|
||
f"Expected input field name {name} is missing in actual input field names"
|
||
|
||
for name in self.settings_form.content_items.keys():
|
||
item = self.settings_form.get_content_item(name)
|
||
item.check_visibility(
|
||
f"KEYCLOAK settings input form item with name '{name}' is missing"
|
||
)
|
||
|
||
def should_be_toolbar(self) -> None:
|
||
"""Проверяет наличие тулбара страницы, наличие и функциональность кнопок тулбара.
|
||
|
||
Raises:
|
||
AssertionError: Если тулбар или кнопка тулбара отсутствуют.
|
||
"""
|
||
loc = self.page.get_by_role("navigation").filter(
|
||
has_text=re.compile("KEYCLOAK")).locator("div").nth(1)
|
||
self.toolbar.check_toolbar_presence_by_locator(loc, "Toolbar with title 'KEYCLOAK' is missing")
|
||
|
||
self.toolbar.check_button_visibility("edit")
|
||
self.toolbar.check_button_tooltip("edit", "Редактировать")
|
||
|
||
self.toolbar.get_button_by_name("edit").click()
|
||
self.toolbar.check_button_visibility("save")
|
||
self.toolbar.check_button_visibility("cancel")
|
||
self.toolbar.check_button_tooltip("save", "Сохранить")
|
||
self.toolbar.check_button_tooltip("cancel", "Отменить")
|
||
|
||
self.toolbar.get_button_by_name("cancel").click()
|
||
self.toolbar.check_button_visibility("edit")
|
||
|
||
def should_be_success_alert(self) -> None:
|
||
"""Проверяет наличие сообщения об успешном сохранении заданных параметров.
|
||
|
||
Raises:
|
||
AssertionError: Если тулбар отсутствует.
|
||
"""
|
||
|
||
alert_type = self.alert.get_alert_type()
|
||
assert alert_type == "success", f"Expected success alert, but got {alert_type} alert"
|
||
|
||
self.alert.check_alert_presence('\nПараметры успешно\n обновлены\n')
|
||
self.alert.check_alert_absence('\nПараметры успешно\n обновлены\n')
|