"""Модуль modal_view_template содержит класс для работы с модальным окном шаблона.
Класс ViewTemplateModalWindow наследует базовый функционал ModalWindowComponent
и реализует методы просмотра модального окна шаблона.
"""
import re
from playwright.sync_api import Page
from tools.logger import get_logger
from components.modal_window_component import ModalWindowComponent
from components.json_container_component import JsonContainerComponent
from locators.json_container_locators import JsonContainerLocators
logger = get_logger("VIEW_TEMPLATE_MODAL_WINDOW")
[документация]
class ViewTemplateModalWindow(ModalWindowComponent):
"""Модальное окно шаблона.
Наследует ModalWindowComponent и добавляет функционал для:
1. Инициализации модального окна с конкретным шаблоном
2. Закрытия модального окна через тулбар
3. Проверки содержимого модального окна
4. Проверки содержимого JSON контейнера
"""
[документация]
def __init__(self, page: Page, title: str):
"""Инициализирует элементы формы модального окна шаблона."""
super().__init__(page)
# Настройка заголовка и кнопки закрытия
self.window_title = title
locator_button_toolbar_close = self.page.get_by_role("navigation").filter(
has_text=re.compile(self.window_title)
).get_by_role("button")
self.add_toolbar_title(self.window_title)
self.add_toolbar_button(locator_button_toolbar_close, "close")
# Инициализация JSON контейнера
self.json_container = JsonContainerComponent(page)
[документация]
def check_content(self) -> None:
"""Проверяет наличие и корректность элементов окна.
Проверяет:
1. Наличие заголовка окна с именем шаблона
2. Видимость кнопки закрытия
3. Подсказку кнопки закрытия
"""
self.check_by_window_title()
self.check_toolbar_button_visibility("close")
self.check_toolbar_button_tooltip("close", "Закрыть")
[документация]
def verify_json_container_content(self, template_data: dict) -> None:
"""Проверяет соответствие данных контейнера данным из API.
Args:
template_data: Данные шаблона из API.
"""
# Читаем данные из контейнера
actual_data = self.json_container.read_data(JsonContainerLocators.CONTAINER)
# Сравниваем actual_data с данными конкретного шаблона
self.json_container.check_json_equals(
actual_data,
template_data,
"Expected json content is not equal actual:"
)