"""Модуль 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 close_window_by_toolbar_button(self): """Закрывает окно через кнопку в тулбаре.""" self.click_toolbar_close_button() 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:" )