"""Модуль тестов контейнера для отображения событий системного журнала. Содержит тесты для проверки функциональности контейнера для отображения событий системного журнала. """ # import pytest from playwright.sync_api import Page from pages.main_page import MainPage from pages.login_page import LoginPage # @pytest.mark.smoke class TestSystemLogEventsContainer: """Класс тестов для проверки контейнера для отображения событий системного журнала.. Тесты покрывают следующие сценарии: 1. test_system_log_events_content: Проверяет содержимое контейнера для отображения событий системного журнала. Атрибуты: browser: Фикстура для работы с браузером. """ # @pytest.mark.develop def test_system_log_events_content(self, browser: Page) -> None: """Проверяет содержимое контейнера для отображения событий системного журнала. Args: browser: Экземпляр страницы Playwright. """ lp = LoginPage(browser) lp.do_login() mp = MainPage(browser) mp.should_be_event_panel() system_log_events_container = mp.click_events_panel_system_log_tab() system_log_events_container.check_content() def test_events_table_row_highlighting(self, browser: Page): """Проверяет выделение строк в таблице событий. Args: browser: Экземпляр страницы Playwright. """ lp = LoginPage(browser) lp.do_login() mp = MainPage(browser) mp.should_be_event_panel() system_log_events_container = mp.click_events_panel_system_log_tab() # Получение количества строк в таблице rows_count = system_log_events_container.get_events_table_rows_count() # Проверка выделения строк system_log_events_container.check_events_table_row_highlighting(0) system_log_events_container.check_events_table_row_highlighting(rows_count - 1) system_log_events_container.check_events_table_row_highlighting(int(rows_count / 2)) def test_events_table_scrolling(self, browser: Page): """Проверяет возможность скроллинга таблицы событий. Args: browser: Экземпляр страницы Playwright. """ lp = LoginPage(browser) lp.do_login() mp = MainPage(browser) mp.should_be_event_panel() system_log_events_container = mp.click_events_panel_system_log_tab() events_panel_position = mp.get_events_panel_position() # Проверка, что панель с таблицей открыта assert events_panel_position != "bottom", "Panel with system log events should be opened" is_scrollable = system_log_events_container.check_events_table_verticall_scrolling() # Убеждаемся, что панель открыта наполовину и проверяем скроллинг assert events_panel_position == "center",\ "Panel with system log events should be located on the main page center" assert is_scrollable, "System log events table should be scrollable" # Скроллинг вниз system_log_events_container.scroll_events_table_down() browser.wait_for_timeout(1000) # Проверка видимости последней строки после прокрутки system_log_events_container.check_events_table_last_row_visibility() # Скроллинг вверх system_log_events_container.scroll_events_table_up() browser.wait_for_timeout(1000) # Проверка видимости первой строки после прокрутки system_log_events_container.check_events_table_first_row_visibility() # Раскрываем панель полностью и проверяем скроллинг assert mp.check_expand_less_button(), \ "Expand less button should be present" mp.click_events_panel_expand_less_button() mp.wait_for_timeout(500) events_panel_position = mp.get_events_panel_position() assert events_panel_position == "top",\ "Panel with system log events should be located on the main page top" is_scrollable = system_log_events_container.check_events_table_verticall_scrolling() assert is_scrollable, "System log events table should be scrollable in the full window" # Скроллинг вниз system_log_events_container.scroll_events_table_down() browser.wait_for_timeout(1000) # Проверка видимости последней строки после прокрутки system_log_events_container.check_events_table_last_row_visibility() # Скроллинг вверх system_log_events_container.scroll_events_table_up() browser.wait_for_timeout(1000) # Проверка видимости первой строки после прокрутки system_log_events_container.check_events_table_first_row_visibility() # @pytest.mark.develop def test_events_table_column_sorting(self, browser: Page): """Проверяет сортировку колонки 'Время' в таблице событий. Args: browser: Экземпляр страницы Playwright. """ lp = LoginPage(browser) lp.do_login() mp = MainPage(browser) mp.should_be_event_panel() system_log_events_container = mp.click_events_panel_system_log_tab() index = 1 state = system_log_events_container.get_arrow_button_state(index) assert state == "down", "Arrow button should be down" system_log_events_container.click_event_table_header_arrow(index) browser.wait_for_timeout(500) state = system_log_events_container.get_arrow_button_state(index) assert state == "up", "Arrow button should be up" is_descending_order = system_log_events_container.check_events_table_column_descending_order(index, convert2timestamp=True) assert not is_descending_order, "Column data should be in ascending order" system_log_events_container.click_event_table_header_arrow(index) browser.wait_for_timeout(500) state = system_log_events_container.get_arrow_button_state(index) assert state == "down", "Arrow button should be down" is_descending_order = system_log_events_container.check_events_table_column_descending_order(index, convert2timestamp=True) assert is_descending_order, "Column data should be in descending order" # @pytest.mark.develop def test_events_table_pagination(self, browser: Page): """Проверяет возможность пагинации таблицы событий. Args: browser: Экземпляр страницы Playwright. """ lp = LoginPage(browser) lp.do_login() mp = MainPage(browser) mp.should_be_event_panel() system_log_events_container = mp.click_events_panel_system_log_tab() system_log_events_container.should_be_pagination_buttons() # Проверка начального состояния tested_pages = 1 # to do: некорректный запрос в бэк, должно быть "filter": {"page": 0} payload = {"table": "logs", "filter": {"page": 1}, "count": 40 } response = mp.send_post_api_request("e-nms/logs_enode", payload) if response.status == 200: response_body = mp.get_response_body(response) if response_body: pages = response_body["data"]["pages"] if pages > 5: tested_pages = 5 else: tested_pages = pages current_number = system_log_events_container.get_current_data_set_number() assert current_number == 1, "The first page should be number one" if tested_pages == 1: system_log_events_container.should_be_all_disabled() else: system_log_events_container.should_be_initial_state() # Переход на самую последнюю страницу, возврат на страницу назад, потом на страницу вперед system_log_events_container.click_last_page() browser.wait_for_timeout(2000) system_log_events_container.should_be_final_state() last_number = system_log_events_container.get_current_data_set_number() system_log_events_container.click_chevron_left() browser.wait_for_timeout(4000) if last_number == 2: system_log_events_container.should_be_initial_state() else: system_log_events_container.should_be_all_enabled() counter = last_number - 1 current_number = system_log_events_container.get_current_data_set_number() assert current_number == counter, f"Expected page number {counter} is not equal actual {current_number}" system_log_events_container.click_chevron_right() browser.wait_for_timeout(4000) system_log_events_container.should_be_final_state() current_number = system_log_events_container.get_current_data_set_number() assert current_number == last_number, f"Expected page number {last_number} is not equal actual {current_number}" # Переход на первую страницу, переход на следующую страницу, возврат на первую страницу system_log_events_container.click_first_page() browser.wait_for_timeout(2000) system_log_events_container.should_be_initial_state() current_number = system_log_events_container.get_current_data_set_number() assert current_number == 1, f"Expected page number 1 is not equal actual {current_number}" system_log_events_container.click_chevron_right() browser.wait_for_timeout(4000) if tested_pages == 2: system_log_events_container.should_be_final_state() else: system_log_events_container.should_be_all_enabled() current_number = system_log_events_container.get_current_data_set_number() assert current_number == 2, f"Expected page number 2 is not equal actual {current_number}" system_log_events_container.click_chevron_left() browser.wait_for_timeout(4000) system_log_events_container.should_be_initial_state() current_number = system_log_events_container.get_current_data_set_number() assert current_number == 1, f"Expected page number 1 is not equal actual {current_number}" if tested_pages > 2: # загрузка страниц от начала и до конца # to_do: проверка, что происходит обновление содержимого таблицы counter = 1 while counter <= tested_pages: system_log_events_container.click_chevron_right() browser.wait_for_timeout(2000) system_log_events_container.should_be_all_enabled() counter += 1 current_number = system_log_events_container.get_current_data_set_number() assert current_number == counter, f"Expected page number {counter} is not equal actual {current_number}" # загрузка страниц от конца к началу # to_do: проверка, что происходит обновление содержимого таблицы while counter > 2: system_log_events_container.click_chevron_left() browser.wait_for_timeout(2000) system_log_events_container.should_be_all_enabled() counter -= 1 current_number = system_log_events_container.get_current_data_set_number() assert current_number == counter, f"Expected page number {counter} is not equal actual {current_number}" # Проверка возврата к начальному состоянию system_log_events_container.click_chevron_left() browser.wait_for_timeout(2000) system_log_events_container.should_be_initial_state() current_number = system_log_events_container.get_current_data_set_number() assert current_number == 1, "The first page should be number one"