diff --git a/tests/e2e/test_event_panel.py b/tests/e2e/test_event_panel.py index 88e8c7b..f3b340d 100644 --- a/tests/e2e/test_event_panel.py +++ b/tests/e2e/test_event_panel.py @@ -14,10 +14,14 @@ from pages.login_page import LoginPage class TestEventPanel: """Класс тестов для проверки панели событий. + Тесты покрывают следующие сценарии: + 1. test_event_panel_content: Проверяет содержимое панели событий + 2. test_event_panel_expand_buttons: Проверяет состояние и количество кнопок расширения рабочей области панели событий + Атрибуты: browser: Фикстура для работы с браузером. """ - + def test_event_panel_content(self, browser: Page) -> None: """Проверяет содержимое панели событий. @@ -27,35 +31,35 @@ class TestEventPanel: lp = LoginPage(browser) lp.do_login() - + mp = MainPage(browser) mp.should_be_event_panel() - + # Проверяем соответствие тултипов информации на кнопках tooltip_event_counters = mp.get_event_counters_by_tooltips() button_event_counters = mp.get_event_counters_by_tooltips() - + for event, counter in tooltip_event_counters.items(): button_counter = button_event_counters.get(event) if button_counter is None: assert False, f"Found unexpected tooltip {event} for event button" - + if button_counter != counter: assert False, f"Expected tooltip value {counter} is not equal button value {button_counter} for event button {event}" - + # @pytest.mark.develop def test_event_panel_expand_buttons(self, browser: Page) -> None: """Проверяет состояние и количество кнопок расширения рабочей области панели событий. Args: browser: Экземпляр страницы Playwright. - """ - + """ + lp = LoginPage(browser) lp.do_login() mp = MainPage(browser) - + # Проверяем начальное состояние - панель событий внизу, видна одна кнопка expand less current_position = mp.get_events_panel_position() assert current_position == "bottom", \ @@ -64,52 +68,52 @@ class TestEventPanel: "Expand less button should be present" assert mp.check_expand_more_button(), \ "Expand more button should be absent" - + mp.click_events_panel_expand_less_button() mp.wait_for_timeout(500) - + # Проверяем, что панель событий переместилась в середину экрана, # видна обе кнопки expand less и expand more current_position = mp.get_events_panel_position() assert current_position == "center", \ - "Events panel should be located on main page center" + "Events panel should be located on main page center" assert mp.check_expand_less_button(), \ - "Expand less button should be present" + "Expand less button should be present" assert mp.check_expand_more_button(), \ "Expand more button should be present" - + mp.click_events_panel_expand_less_button() mp.wait_for_timeout(500) - + # Проверяем, что панель событий находится вверху экрана, # видна кнопки expand more и отсутствует expand less current_position = mp.get_events_panel_position() assert current_position == "top", \ - "Events panel should be located on main page top" + "Events panel should be located on main page top" assert mp.check_expand_less_button(), \ - "Expand less button should be absent" - assert mp.check_expand_more_button(), \ - "Expand more button should be present" - - # перемещение в отратном напрвлении сверху вниз - mp.click_events_panel_expand_more_button() - mp.wait_for_timeout(500) - - current_position = mp.get_events_panel_position() - assert current_position == "center", \ - "Events panel should be located on main page center" - assert mp.check_expand_less_button(), \ - "Expand less button should be present" + "Expand less button should be absent" assert mp.check_expand_more_button(), \ "Expand more button should be present" - + + # перемещение в отратном напрвлении сверху вниз mp.click_events_panel_expand_more_button() mp.wait_for_timeout(500) - + current_position = mp.get_events_panel_position() - assert current_position == "bottom", \ - "Events panel should be located on main page bottom" + assert current_position == "center", \ + "Events panel should be located on main page center" assert mp.check_expand_less_button(), \ "Expand less button should be present" assert mp.check_expand_more_button(), \ - "Expand more button should be absent" + "Expand more button should be present" + + mp.click_events_panel_expand_more_button() + mp.wait_for_timeout(500) + + current_position = mp.get_events_panel_position() + assert current_position == "bottom", \ + "Events panel should be located on main page bottom" + assert mp.check_expand_less_button(), \ + "Expand less button should be present" + assert mp.check_expand_more_button(), \ + "Expand more button should be absent" diff --git a/tests/e2e/test_expand_navigation_panel.py b/tests/e2e/test_expand_navigation_panel.py index e31475e..5a8e270 100644 --- a/tests/e2e/test_expand_navigation_panel.py +++ b/tests/e2e/test_expand_navigation_panel.py @@ -13,6 +13,10 @@ from pages.login_page import LoginPage class TestNavigationPanel: """Класс тестов для проверки панели навигации. + Тесты покрывают следующие сценарии: + - test_expand_panel: Проверяет полное раскрытие панели навигации + - test_sub_panel_item_click: Проверяет возможность клика заданного элемента в подпанели навигации + Атрибуты: browser: Фикстура для работы с браузером. """ diff --git a/tests/e2e/test_license_tab.py b/tests/e2e/test_license_tab.py index c9b95a7..f43d0d6 100644 --- a/tests/e2e/test_license_tab.py +++ b/tests/e2e/test_license_tab.py @@ -13,7 +13,12 @@ from pages.login_page import LoginPage from pages.license_tab import LicenseTab class TestLicenseTab: - """Класс тестов для проверки вкладки 'Лицензии'.""" + """Класс тестов для проверки вкладки 'Лицензии'. + + Тесты покрывают следующие сценарии: + 1. test_lisence_tab_content: Проверяет содержимое вкладки 'Лицензии' + 2. test_license_tab_input_form_and_check_alert: Проверяет форму ввода лицензии и отображение алертов + """ @pytest.fixture(scope="function", autouse=True) def setup(self, browser: Page) -> None: diff --git a/tests/e2e/test_login.py b/tests/e2e/test_login.py index af9a103..e5e0782 100644 --- a/tests/e2e/test_login.py +++ b/tests/e2e/test_login.py @@ -9,7 +9,13 @@ from pages.main_page import MainPage from pages.login_page import LoginPage class TestLogin: - """Класс тестов для проверки авторизации.""" + """Класс тестов для проверки авторизации. + + Тесты покрывают следующие сценарии: + 1. test_successful_login: Проверяет успешный вход в систему + 2. test_unsuccessful_login: Проверяет вход с неверными учетными данными + 3. test_successful_login_and_logout: Проверяет успешный вход и выход из системы + """ def test_successful_login(self, browser: Page) -> None: """Проверяет успешный вход в систему. diff --git a/tests/e2e/test_service_status_tab.py b/tests/e2e/test_service_status_tab.py index 3f71af2..50f4a35 100644 --- a/tests/e2e/test_service_status_tab.py +++ b/tests/e2e/test_service_status_tab.py @@ -13,7 +13,12 @@ from pages.login_page import LoginPage class TestServiceStatusTab: - """Класс тестов для проверки вкладки 'Статус обслуживания'.""" + """Класс тестов для проверки вкладки 'Статус обслуживания'. + + Тесты покрывают следующие сценарии: + 1. test_service_status_tab_content: Проверяет содержимое вкладки 'Статус обслуживания' + 2. test_service_status_table_row_highlighting: Проверяет выделение строк в таблице сервисов + """ @pytest.fixture(scope="function", autouse=True) def setup(self, browser: Page): diff --git a/tests/e2e/test_sessions_tab.py b/tests/e2e/test_sessions_tab.py index 18f08b2..060da6e 100644 --- a/tests/e2e/test_sessions_tab.py +++ b/tests/e2e/test_sessions_tab.py @@ -19,15 +19,17 @@ class TestSessionsTab: включая работу с сеансами пользователей, их создание, удаление и автоматическую очистку. Тесты покрывают следующие сценарии: - 1. Тест содержимого вкладки 'Сеансы' - 2. Тест окна подтверждения удаления сеанса - 3. Тест автоматического удаления сеанса после выхода пользователя из системы (отложено) - 4. Тест создания нескольких пользователей и их сеансов, скроллинг, подсветка строк таблицы - 5. Тест удаления сеанса при удалении пользователя (отложено) - 6. Тест автоматического удаления сеанса через 15 минут после выхода пользователя (отложено) - 7. Тест проверки невозможности пользователя удалить свой собственный сеанс (отложено) + 1. test_sessions_tab_content: Тест содержимого вкладки 'Сеансы' + 2. test_delete_session_confirm_window: Тест окна подтверждения удаления сеанса + 3. test_delete_session_after_logout: Тест автоматического удаления сеанса после выхода пользователя из системы + 4. test_delete_existed_session: Тест удаления созданного сеанса + 5 test_multiple_users_sessions: Тест создания нескольких пользователей и их сеансов + 6. test_session_removed_when_user_deleted: Тест удаления сеанса при удалении пользователя + 7. test_session_auto_deletion_after_15_minutes: Тест автоматического удаления сеанса через 15 минут после выхода пользователя + 8. test_user_cannot_delete_own_session: Тест проверки невозможности пользователя удалить свой собственный сеанс """ + @pytest.fixture(scope="function", autouse=True) def setup(self, browser: Page) -> None: """Фикстура для подготовки тестового окружения. diff --git a/tests/e2e/test_users_tab.py b/tests/e2e/test_users_tab.py index e423357..e1c5f44 100644 --- a/tests/e2e/test_users_tab.py +++ b/tests/e2e/test_users_tab.py @@ -12,7 +12,20 @@ from pages.main_page import MainPage from pages.login_page import LoginPage class TestUsersTab: - """Класс тестов для проверки вкладки 'Пользователи'.""" + """Класс тестов для проверки вкладки 'Пользователи'. + + Тесты покрывают следующие сценарии: + 1. test_users_tab_content: Проверяет содержимое вкладки 'Пользователи' + 2. test_users_tab_toolbar_buttons: Проверяет кнопки на панели инструментов + 3. test_add_user_window_content: Проверяет содержимое окна добавления пользователя + 4. test_add_user_window_close_buttons: Проверяет кнопки закрытия окна добавления + 5 test_edit_user_window_content: Проверяет содержимое окна редактирования + 6. test_edit_user_window_close_buttons: Проверяет кнопки закрытия окна редактирования + 7. test_add_and_delete_user: Проверяет добавление и удаление пользователя + 8. test_add_AD_user: Проверяет добавление пользователя Active Directory + 9. test_reset_password: Проверяет сброс пароля пользователя + 10.test_edit_user_role: Проверяет изменение роли пользователя + """ @pytest.fixture(scope="function", autouse=True) def setup(self, browser: Page) -> None: @@ -31,37 +44,38 @@ class TestUsersTab: mp.click_subpanel_item("Пользователи") @pytest.fixture(scope="function") - def cleanup_user(self, browser: Page) -> None: - """Фикстура для очистки пользователя User после теста.""" + def cleanup_users(self, browser: Page) -> None: + """Фикстура для очистки тестовых пользователей и их сеансов после теста.""" yield - # Удаляем тестового пользователя после выполнения теста - user_data: Dict[str, str] = {"name": "User", "role": "Администратор", "password": "987654"} + + # Выход из системы текущего пользователя + mp = MainPage(browser) + mp.do_logout() + + # Авторизация администратором для очистки + login_page = LoginPage(browser) + login_page.do_login() + + # Удаляем тестовых пользователей + self._cleanup_test_users(browser) + + def _cleanup_test_users(self, browser: Page) -> None: + """Удаляет тестовых пользователей.""" + mp = MainPage(browser) + mp.click_main_navigation_panel_item("Настройки") + mp.click_subpanel_item("Пользователи") ut = UsersTab(browser) - # Проверяем существует ли пользователь и удаляем его - if ut.find_user_in_table(user_data["name"], user_data["role"]) != -1: - ut.open_edit_user_page_by_user(user_data["name"], user_data["role"]) - ut.delete_user(user_data["name"]) + # Удаляем тестовых пользователей + test_users = ["TestUser", "TestUserAutoOperator", "TestUserAutoAdmin"] - @pytest.fixture(scope="function") - def cleanup_autoadmin(self, browser: Page) -> None: - """Фикстура для очистки пользователя autoadmin после теста.""" - yield - user_data: Dict[str, str] = {"name": "autoadmin", "role": "Администратор", "password": "123456"} - ut = UsersTab(browser) - if ut.find_user_in_table(user_data["name"], user_data["role"]) != -1: - ut.open_edit_user_page_by_user(user_data["name"], user_data["role"]) - ut.delete_user(user_data["name"]) + for user_name in test_users: + # Проверяем существует ли пользователь и удаляем его + user_index = ut.find_user_in_table(user_name, "Администратор") + if user_index != -1: + ut.open_edit_user_page_by_user(user_name, "Администратор") + ut.delete_user(user_name) - @pytest.fixture(scope="function") - def cleanup_autooperator(self, browser: Page) -> None: - """Фикстура для очистки пользователя autooperator после теста.""" - yield - user_data: Dict[str, str] = {"name": "autooperator", "role": "Оператор", "password": "123245"} - ut = UsersTab(browser) - if ut.find_user_in_table(user_data["name"], user_data["role"]) != -1: - ut.open_edit_user_page_by_user(user_data["name"], user_data["role"]) - ut.delete_user(user_data["name"]) def test_users_tab_content(self, browser: Page) -> None: """Проверяет содержимое вкладки 'Пользователи'. @@ -146,15 +160,15 @@ class TestUsersTab: ut.close_edit_user_window(user_name) # @pytest.mark.develop - def test_add_and_delete_user(self, browser: Page, cleanup_user: None) -> None: + def test_add_and_delete_user(self, browser: Page, cleanup_users: None) -> None: """Проверяет добавление и удаление пользователя. Args: browser: Экземпляр страницы Playwright. - cleanup_user: Фикстура для очистки пользователя. + Удаление пользователя выполняется автоматически фикстурой cleanup_users. """ - user_data: Dict[str, str] = {"name": "User", "role": "Администратор", "password": "987654"} + user_data: Dict[str, str] = {"name": "TestUser", "role": "Администратор", "password": "987654"} mp = MainPage(browser) ut = UsersTab(browser) @@ -194,12 +208,12 @@ class TestUsersTab: ut.should_not_be_user_in_table(user_data["name"], user_data["role"]) # @pytest.mark.develop - def test_add_AD_user(self, browser: Page, cleanup_user: None) -> None: + def test_add_AD_user(self, browser: Page, cleanup_users: None) -> None: """Проверяет добавление пользователя Active Directory. Args: browser: Экземпляр страницы Playwright. - cleanup_user: Фикстура для очистки пользователя. + Удаление пользователя выполняется автоматически фикстурой cleanup_users. """ user_data: Dict[str, str] = {"auth_type":"active_directory", @@ -212,15 +226,15 @@ class TestUsersTab: ut.open_add_user_window() ut.add_new_user(user_data) - def test_reset_password(self, browser: Page, cleanup_autoadmin: None) -> None: + def test_reset_password(self, browser: Page, cleanup_users: None) -> None: """Проверяет сброс пароля пользователя. Args: browser: Экземпляр страницы Playwright. - cleanup_autoadmin: Фикстура для очистки пользователя autoadmin. + Удаление пользователя выполняется автоматически фикстурой cleanup_users. """ - user_data: Dict[str, str] = {"name": "autoadmin", "role": "Администратор", "password": "123456"} + user_data: Dict[str, str] = {"name": "TestUserAutoAdmin", "role": "Администратор", "password": "123456"} mp = MainPage(browser) ut = UsersTab(browser) @@ -252,15 +266,15 @@ class TestUsersTab: mp_1.click_subpanel_item("Пользователи") ut_1.should_not_be_user_in_table(user_data["name"], user_data["role"]) - def test_edit_user_role(self, browser: Page, cleanup_autooperator: None) -> None: + def test_edit_user_role(self, browser: Page, cleanup_users: None) -> None: """Проверяет изменение роли пользователя. Args: browser: Экземпляр страницы Playwright. - cleanup_autooperator: Фикстура для очистки пользователя autooperator. + Удаление пользователя выполняется автоматически фикстурой cleanup_users. """ - user_data: Dict[str, str] = {"name": "autooperator", "role": "Оператор", "password": "123245"} + user_data: Dict[str, str] = {"name": "TestUserAutoOperator", "role": "Оператор", "password": "123245"} mp = MainPage(browser) ut = UsersTab(browser)