Добавлены тесты для вкладки 'Настройки/Аутентификация'

ra4/management_rack
nsubbot 2026-02-03 10:03:28 +03:00
parent 4e39172bc7
commit 415924ec98
5 changed files with 804 additions and 0 deletions

View File

@ -20,6 +20,8 @@ class SettingsFormLocators:
SETTINGS_FORM_INPUT_FORM_CONTAINER = "//nav[contains(@class, 'active v-toolbar')]/following-sibling::div" SETTINGS_FORM_INPUT_FORM_CONTAINER = "//nav[contains(@class, 'active v-toolbar')]/following-sibling::div"
SETTINGS_FORM_SMS_INPUT_FORM_CONTAINER = "//nav[contains(@class, 'active v-toolbar')]/../following-sibling::div" SETTINGS_FORM_SMS_INPUT_FORM_CONTAINER = "//nav[contains(@class, 'active v-toolbar')]/../following-sibling::div"
SETTINGS_FORM_LDAP_INPUT_FORM_CONTAINER = "//nav[contains(@class, 'active v-toolbar')]/../following-sibling::div"
SETTINGS_FORM_KEYCLOAK_INPUT_FORM_CONTAINER = "//nav[contains(@class, 'active v-toolbar')]/../following-sibling::div"
SETTINGS_FORM_INPUT_FIELD = "div.v-text-field__slot > input" SETTINGS_FORM_INPUT_FIELD = "div.v-text-field__slot > input"
SETTINGS_FORM_INPUT_VALUE_SUFFIX = ".v-text-field__suffix" SETTINGS_FORM_INPUT_VALUE_SUFFIX = ".v-text-field__suffix"

View File

@ -0,0 +1,211 @@
"""Модуль вкладки настройки 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')

333
pages/ldap_settings_tab.py Normal file
View File

@ -0,0 +1,333 @@
"""Модуль вкладки настройки LDAP Аутентификации.
Содержит класс LDAPAuthSettings для работы с вкладкой настройки LDAP Аутентификации.
Позволяет проверять состояние и взаимодействовать с элементами вкладки.
"""
import re
from playwright.sync_api import Page
from locators.text_input_locators import TextInputLocators
from locators.settings_form_locators import SettingsFormLocators
from elements.text_input_element import TextInput
from elements.text_element import Text
from elements.icon_element import Icon
from elements.checkbox_element import Checkbox
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 LDAPAuthSettingsTab(BasePage):
"""Класс для работы с вкладкой настройки LDAP Аутентификации.
Предоставляет методы для взаимодействия с вкладкой настройки LDAP Аутентификации.
Args:
page: Экземпляр страницы Playwright.
"""
def __init__(self, page: Page) -> None:
"""Инициализирует компоненты вкладки настройки LDAP Аутентификации."""
super().__init__(page)
self.toolbar = ToolbarComponent(page, "LDAP")
toolbar_button_edit = self.page.get_by_role("navigation").locator("//button[@data-testid='LDAP__btn__edit']")
self.toolbar.add_tooltip_button(toolbar_button_edit, "edit")
toolbar_button_save = self.page.get_by_role("navigation").locator("//button[@data-testid='LDAP__btn__submit']")
self.toolbar.add_tooltip_button(toolbar_button_save, "save")
toolbar_button_cancel = self.page.get_by_role("navigation"). \
locator("//button[@data-testid='LDAP__btn__cancelEdit']")
self.toolbar.add_tooltip_button(toolbar_button_cancel, "cancel")
# Форма для отображения/редактирования полей настроек LDAP Аутентификации
self.settings_form = SettingsFormComponent(page)
container_locator = self.page.locator(SettingsFormLocators.SETTINGS_FORM_LDAP_INPUT_FORM_CONTAINER)
# Метка "tls"
label_tls_locator = container_locator.get_by_text("tls")
label_tls = Text(
page,
label_tls_locator,
"tls_checkbox_label"
)
self.settings_form.add_content_item("tls_checkbox_label", label_tls)
# Чекбокс "tls"
checkbox_tls = Checkbox(
page,
container_locator.locator("//input[@data-testid='LDAP__checkbox__tls']"),
"tls_checkbox"
)
self.settings_form.add_content_item("tls_checkbox", checkbox_tls)
self.input_fields_locators = self.settings_form.get_input_fields_locators(container_locator)
loc = self.input_fields_locators.get("ip")
loc_ip_input = loc.locator("//input[@data-testid='LDAP__text-field__ip']")
ip_setting_input = TextInput(page, loc_ip_input, "ip_setting_input")
self.settings_form.add_content_item("ip_setting_input", ip_setting_input)
loc = self.input_fields_locators.get("Порт")
loc_port_input = loc.locator("//input[@data-testid='LDAP__text-field__port']")
port_setting_input = TextInput(page, loc_port_input, "port_setting_input")
self.settings_form.add_content_item("port_setting_input", port_setting_input)
loc = self.input_fields_locators.get("Имя пользователя")
loc_user_input = loc.locator("//input[@data-testid='LDAP__text-field__login']")
user_setting_input = TextInput(page, loc_user_input, "user_setting_input")
self.settings_form.add_content_item("user_setting_input", user_setting_input)
loc = self.input_fields_locators.get("Пароль")
loc_password_input = loc.locator("//input[@data-testid='LDAP__text-field__password']")
password_setting_input = TextInput(page, loc_password_input, "password_setting_input")
self.settings_form.add_content_item("password_setting_input", password_setting_input)
loc = self.input_fields_locators.get("Домен")
loc_domain_input = loc.locator("//input[@data-testid='LDAP__text-field__domain']")
domain_setting_input = TextInput(page, loc_domain_input, "domain_setting_input")
self.settings_form.add_content_item("domain_setting_input", domain_setting_input)
loc = self.input_fields_locators.get("DN каталог пользователей")
loc_dn_catalog_input = loc.locator("//input[@data-testid='LDAP__text-field__base_dn']")
dn_catalog_setting_input = TextInput(page, loc_dn_catalog_input, "dn_catalog_setting_input")
self.settings_form.add_content_item("dn_catalog_setting_input", dn_catalog_setting_input)
loc = self.input_fields_locators.get("Атрибут авторизации")
loc_login_attr_input = loc.locator("//input[@data-testid='LDAP__text-field__login_attribute']")
login_attr_setting_input = TextInput(page, loc_login_attr_input, "login_attr_setting_input")
self.settings_form.add_content_item("login_attr_setting_input", login_attr_setting_input)
loc = self.input_fields_locators.get("Атрибут email")
loc_email_attr_input = loc.locator("//input[@data-testid='LDAP__text-field__email_attribute']")
email_attr_setting_input = TextInput(page, loc_email_attr_input, "email_attr_setting_input")
self.settings_form.add_content_item("email_attr_setting_input", email_attr_setting_input)
loc = self.input_fields_locators.get("Атрибут sms")
loc_sms_attr_input = loc.locator("//input[@data-testid='LDAP__text-field__sms_attribute']")
sms_attr_setting_input = TextInput(page, loc_sms_attr_input, "sms_attr_setting_input")
self.settings_form.add_content_item("sms_attr_setting_input", sms_attr_setting_input)
icon_locator = loc_password_input.locator("../..").locator(TextInputLocators.ICON_PASSWORD_HIDING)
password_hidden_icon = Icon(page, icon_locator,
"password hidden icon")
self.settings_form.add_content_item("password_hidden_icon", password_hidden_icon)
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 click_password_hidden_icon(self) -> None:
"""Нажатие на иконку скрытия пароля."""
self.settings_form.get_content_item("password_hidden_icon").click()
def check_checkbox_tls(self):
"""Включает чек-бокс tls."""
self.settings_form.get_content_item("tls_checkbox").check(force=True)
def uncheck_checkbox_tls(self):
"""Выключает чек-бокс tls."""
self.settings_form.get_content_item("tls_checkbox").uncheck(force=True)
def get_current_setting_values(self) -> dict:
"""Возвращает текущее значение полей настроек.
Returns:
str : Текущее значение полей настроек.
"""
values = {}
tls_checkbox = self.settings_form.get_content_item("tls_checkbox")
values.update({"tls checked": tls_checkbox.is_checked()})
field = self.settings_form.get_content_item("ip_setting_input")
values.update({"ip": field.get_input_value().strip()})
field = self.settings_form.get_content_item("port_setting_input")
values.update({"Порт": field.get_input_value().strip()})
field = self.settings_form.get_content_item("user_setting_input")
values.update({"Имя пользователя": field.get_input_value().strip()})
field = self.settings_form.get_content_item("password_setting_input")
values.update({"Пароль": field.get_input_value().strip()})
field = self.settings_form.get_content_item("domain_setting_input")
values.update({"Домен": field.get_input_value().strip()})
field = self.settings_form.get_content_item("dn_catalog_setting_input")
values.update({"DN каталог пользователей": field.get_input_value().strip()})
field = self.settings_form.get_content_item("login_attr_setting_input")
values.update({"Атрибут авторизации": field.get_input_value().strip()})
field = self.settings_form.get_content_item("email_attr_setting_input")
values.update({"Атрибут email": field.get_input_value().strip()})
field = self.settings_form.get_content_item("sms_attr_setting_input")
values.update({"Атрибут sms": field.get_input_value().strip()})
return values
def get_password_setting_value(self) -> str:
"""Возвращает текущее значение поля настроек 'Пароль'.
Returns:
str : Текущее отображение значения поля настроек 'Пароль'.
"""
input_field = self.settings_form.get_content_item("password_setting_input")
is_hidden_state = self.settings_form.get_content_item("password_hidden_icon").is_password_hidden()
password_value = input_field.get_input_value().strip()
if is_hidden_state:
password_value = "." * len(password_value)
return password_value
def input_ip(self, text: str) -> None:
"""Заполнение поля 'IP'."""
message_input = self.settings_form.get_content_item("ip_setting_input")
message_input.clear()
message_input.input_value(text)
def input_port(self, text: str) -> None:
"""Заполнение поля 'Порт'."""
message_input = self.settings_form.get_content_item("port_setting_input")
message_input.clear()
message_input.input_value(text)
def input_user(self, text: str) -> None:
"""Заполнение поля 'Имя пользователя'."""
message_input = self.settings_form.get_content_item("user_setting_input")
message_input.clear()
message_input.input_value(text)
def input_password(self, text: str) -> None:
"""Заполнение поля 'Пароль'."""
message_input = self.settings_form.get_content_item("password_setting_input")
message_input.clear()
message_input.input_value(text)
def input_domain(self, text: str) -> None:
"""Заполнение поля 'Домен'."""
message_input = self.settings_form.get_content_item("domain_setting_input")
message_input.clear()
message_input.input_value(text)
def input_dn_catalog(self, text: str) -> None:
"""Заполнение поля 'DN каталог пользователей'."""
message_input = self.settings_form.get_content_item("dn_catalog_setting_input")
message_input.clear()
message_input.input_value(text)
def input_login_attribute(self, text: str) -> None:
"""Заполнение поля 'Атрибут авторизации'."""
message_input = self.settings_form.get_content_item("login_attr_setting_input")
message_input.clear()
message_input.input_value(text)
def input_email_attribute(self, text: str) -> None:
"""Заполнение поля 'Атрибут email'."""
message_input = self.settings_form.get_content_item("email_attr_setting_input")
message_input.clear()
message_input.input_value(text)
def input_sms_attribute(self, text: str) -> None:
"""Заполнение поля 'Атрибут sms'."""
message_input = self.settings_form.get_content_item("sms_attr_setting_input")
message_input.clear()
message_input.input_value(text)
# Проверки:
def check_content(self):
"""Проверяет наличие и корректность всех элементов страницы."""
expected_input_field_names = ["ip", "Порт", "Имя пользователя", "Пароль",
"Домен", "DN каталог пользователей",
"Атрибут авторизации", "Атрибут email", "Атрибут sms"]
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"LDAP settings input form item with name '{name}' is missing"
)
if name == "password_hidden_icon":
is_hidden_state = item.is_password_hidden()
assert is_hidden_state, "Password hidden icon should be in hidden state"
def should_be_toolbar(self) -> None:
"""Проверяет наличие тулбара страницы, наличие и функциональность кнопок тулбара.
Raises:
AssertionError: Если тулбар или кнопка тулбара отсутствуют.
"""
loc = self.page.get_by_role("navigation").filter(
has_text=re.compile("LDAP")).locator("div").nth(1)
self.toolbar.check_toolbar_presence_by_locator(loc, "Toolbar with title 'LDAP' 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')

View File

@ -0,0 +1,115 @@
"""Модуль тестов вкладки настройки Keycloak Аутентификации.
Содержит тесты для проверки корректности отображения
и функциональности элементов страницы настройки Keycloak Аутентификации.
"""
import pytest
from playwright.sync_api import Page
from pages.login_page import LoginPage
from pages.main_page import MainPage
from pages.keycloak_settings_tab import KeycloakAuthSettingsTab
# @pytest.mark.smoke
class TestKeycloakAuthSettingsTab:
"""Набор тестов для вкладки настройки Keycloak Аутентификации.
Проверяет корректность отображения и функциональность элементов вкладки настройки LDAP Аутентификации.
"""
@pytest.fixture(scope="function", autouse=True)
def setup(self, browser: Page) -> None:
"""Фикстура для подготовки тестового окружения.
Выполняет:
1. Авторизацию в системе
2. Переход на вкладку настройки Keycloak Аутентификации через панель навигации
"""
# Авторизация в системе
login_page = LoginPage(browser)
login_page.do_login()
# Инициализация главной страницы
main_page = MainPage(browser)
# Проверка и взаимодействие с элементами навигации
main_page.should_be_navigation_panel()
main_page.click_main_navigation_panel_item("Настройки")
main_page.click_subpanel_item("Аутентификация")
main_page.click_subpanel_item("KEYCLOAK")
# @pytest.mark.develop
def test_keycloak_auth_settings_tab_content(self, browser: Page) -> None:
"""Тест содержимого вкладки настройки Keycloak Аутентификации.
Проверяет:
Наличие и корректность элементов интерфейса
"""
current_settings = {}
default_settings = {}
# Инициализация вкладки
keycloak_auth_settings_tab = KeycloakAuthSettingsTab(browser)
# запрос текущих установок
cur_settings_response = keycloak_auth_settings_tab.send_get_api_request("e-cmdb/api/keycloack")
if cur_settings_response.status == 200:
response_body = keycloak_auth_settings_tab.get_response_body(cur_settings_response)
if response_body:
current_settings = response_body[0].copy()
# запрос дефолтных значений
default_settings_response = keycloak_auth_settings_tab.send_get_api_request("e-cmdb/api/keycloack/meta")
if default_settings_response.status == 200:
response_body = keycloak_auth_settings_tab.get_response_body(default_settings_response)
if response_body:
default_settings = response_body["fields"].copy()
# Проверка элементов интерфейса
keycloak_auth_settings_tab.check_content()
# Получение и проверка отображаемых входных значений формы настроек
settings = keycloak_auth_settings_tab.get_current_setting_values()
value = settings["url"]
expected = current_settings["url"]
if expected is None:
expected = self._get_default_value("url", default_settings)
assert value == expected, f"Actual value {value} is not equal expected {expected} for field 'URL'"
value = settings["url_token"]
expected = current_settings["url_token"]
if expected is None:
expected = self._get_default_value("url_token", default_settings)
assert value == expected, f"Actual value {value} is not equal expected {expected} for field 'URL_TOKEN'"
value = settings["clientid"]
expected = current_settings["clientid"]
if expected is None:
expected = self._get_default_value("clientid", default_settings)
assert value == expected, f"Actual value {value} is not equal expected {expected} for field 'CLIENTID'"
value = settings["clientsecret"]
expected = current_settings["clientsecret"]
if expected is None:
expected = self._get_default_value("clientsecret", default_settings)
assert value == expected, \
f"Actual value {value} is not equal expected {expected} for field 'CLIENTSECRET'"
value = settings["redirect_uri"]
expected = current_settings["redirect_uri"]
if expected is None:
expected = self._get_default_value("redirect_uri", default_settings)
assert value == expected, \
f"Actual value {value} is not equal expected {expected} for field 'REDIRECT_URI'"
def _get_default_value(self, setting_name: str, default_settings: dict) -> str| None:
for setting in default_settings:
if setting["name"] == setting_name:
return setting["default"]
return None

View File

@ -0,0 +1,143 @@
"""Модуль тестов вкладки настройки LDAP Аутентификации.
Содержит тесты для проверки корректности отображения
и функциональности элементов страницы настройки LDAP Аутентификации.
"""
import pytest
from playwright.sync_api import Page
from pages.login_page import LoginPage
from pages.main_page import MainPage
from pages.ldap_settings_tab import LDAPAuthSettingsTab
# @pytest.mark.smoke
class TestLDAPAuthSettingsTab:
"""Набор тестов для вкладки настройки LDAP Аутентификации.
Проверяет корректность отображения и функциональность элементов вкладки настройки LDAP Аутентификации.
"""
@pytest.fixture(scope="function", autouse=True)
def setup(self, browser: Page) -> None:
"""Фикстура для подготовки тестового окружения.
Выполняет:
1. Авторизацию в системе
2. Переход на вкладку настройки LDAP Аутентификации через панель навигации
"""
# Авторизация в системе
login_page = LoginPage(browser)
login_page.do_login()
# Инициализация главной страницы
main_page = MainPage(browser)
# Проверка и взаимодействие с элементами навигации
main_page.should_be_navigation_panel()
main_page.click_main_navigation_panel_item("Настройки")
main_page.click_subpanel_item("Аутентификация")
main_page.click_subpanel_item("LDAP")
# @pytest.mark.develop
def test_ldap_auth_settings_tab_content(self, browser: Page) -> None:
"""Тест содержимого вкладки настройки LDAP Аутентификации.
Проверяет:
Наличие и корректность элементов интерфейса
"""
current_settings = {}
default_settings = {}
# Инициализация вкладки
ldap_auth_settings_tab = LDAPAuthSettingsTab(browser)
# запрос текущих установок
cur_settings_response = ldap_auth_settings_tab.send_get_api_request("e-cmdb/api/ldap")
if cur_settings_response.status == 200:
response_body = ldap_auth_settings_tab.get_response_body(cur_settings_response)
if response_body:
current_settings = response_body[0].copy()
# запрос дефолтных значений
default_settings_response = ldap_auth_settings_tab.send_get_api_request("e-cmdb/api/ldap/meta")
if default_settings_response.status == 200:
response_body = ldap_auth_settings_tab.get_response_body(default_settings_response)
if response_body:
default_settings = response_body["fields"].copy()
# Проверка элементов интерфейса
ldap_auth_settings_tab.check_content()
# Получение и проверка отображаемых входных значений формы настроек
settings = ldap_auth_settings_tab.get_current_setting_values()
value = settings["ip"]
expected = current_settings["ip"]
if expected is None:
expected = self._get_default_value("ip", default_settings)
assert value == expected, f"Actual value {value} is not equal expected {expected} for field 'IP'"
value = settings["Порт"]
expected = current_settings["port"]
if expected is None:
expected = self._get_default_value("port", default_settings)
assert value == expected, f"Actual value {value} is not equal expected {expected} for field 'Порт'"
value = settings["Имя пользователя"]
expected = current_settings["login"]
if expected is None:
expected = self._get_default_value("login", default_settings)
assert value == expected, f"Actual value {value} is not equal expected {expected} for field 'Имя пользователя'"
value = settings["Пароль"]
expected = current_settings["password"]
if expected is None:
expected = self._get_default_value("password", default_settings)
assert value == expected, \
f"Actual value {value} is not equal expected {expected} for field 'Пароль'"
value = settings["Домен"]
expected = current_settings["domain"]
if expected is None:
expected = self._get_default_value("domain", default_settings)
assert value == expected, \
f"Actual value {value} is not equal expected {expected} for field 'Домен'"
value = settings["DN каталог пользователей"]
expected = current_settings["base_dn"]
if expected is None:
expected = self._get_default_value("base_dn", default_settings)
assert value == expected, \
f"Actual value {value} is not equal expected {expected} for field 'DN каталог пользователей'"
value = settings["Атрибут авторизации"]
expected = current_settings["login_attribute"]
if expected is None:
expected = self._get_default_value("login_attribute", default_settings)
assert value == expected, \
f"Actual value {value} is not equal expected {expected} for field 'Атрибут авторизации'"
value = settings["Атрибут email"]
expected = current_settings["email_attribute"]
if expected is None:
expected = self._get_default_value("email_attribute", default_settings)
assert value == expected, \
f"Actual value {value} is not equal expected {expected} for field 'Атрибут email'"
value = settings["Атрибут sms"]
expected = current_settings["sms_attribute"]
if expected is None:
expected = self._get_default_value("sms_attribute", default_settings)
assert value == expected, \
f"Actual value {value} is not equal expected {expected} for field 'Атрибут sms'"
def _get_default_value(self, setting_name: str, default_settings: dict) -> str| None:
for setting in default_settings:
if setting["name"] == setting_name:
return setting["default"]
return None