"""Модуль тестов вкладки 'Пользователи'. Содержит тесты для проверки функциональности работы с пользователями системы. """ from typing import Dict import pytest from playwright.sync_api import Page from pages.users_tab import UsersTab 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: """Настраивает тестовое окружение. Args: browser: Экземпляр страницы Playwright. """ lp = LoginPage(browser) lp.do_login() mp = MainPage(browser) mp.should_be_navigation_panel() mp.click_main_navigation_panel_item("Настройки") mp.click_subpanel_item("Пользователи") @pytest.fixture(scope="function") def cleanup_users(self, browser: Page) -> None: """Фикстура для очистки тестовых пользователей и их сеансов после теста.""" yield # Выход из системы текущего пользователя 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) # Удаляем тестовых пользователей test_users = ["TestUser", "TestUserAutoOperator", "TestUserAutoAdmin"] 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) def test_users_tab_content(self, browser: Page) -> None: """Проверяет содержимое вкладки 'Пользователи'. Args: browser: Экземпляр страницы Playwright. """ ut = UsersTab(browser) ut.should_be_toolbar() ut.should_be_users_table() ut.check_users_table_content(True) def test_users_tab_toolbar_buttons(self, browser: Page) -> None: """Проверяет кнопки на панели инструментов. Args: browser: Экземпляр страницы Playwright. """ ut = UsersTab(browser) ut.should_be_toolbar_buttons() # pytest.mark.develop def test_add_user_window_content(self, browser: Page) -> None: """Проверяет содержимое окна добавления пользователя. Args: browser: Экземпляр страницы Playwright. """ ut = UsersTab(browser) ut.open_add_user_window() ut.check_add_user_window_content() ut.transform_to_add_AD_user_window() ut.check_add_AD_user_window_content() def test_add_user_window_close_buttons(self, browser: Page) -> None: """Проверяет кнопки закрытия окна добавления. Args: browser: Экземпляр страницы Playwright. """ ut = UsersTab(browser) ut.open_add_user_window() ut.close_add_user_window_by_toolbar_button() ut.open_add_user_window() ut.close_add_user_window() ut.open_add_user_window() ut.transform_to_add_AD_user_window() ut.close_add_AD_user_window_by_toolbar_button() ut.open_add_user_window() ut.transform_to_add_AD_user_window() ut.close_add_AD_user_window() def test_edit_user_window_content(self, browser: Page) -> None: """Проверяет содержимое окна редактирования. Args: browser: Экземпляр страницы Playwright. """ ut = UsersTab(browser) user_name, role = ut.open_edit_user_page_by_index(0) ut.check_edit_user_window_content(user_name, role) def test_edit_user_window_close_buttons(self, browser: Page) -> None: """Проверяет кнопки закрытия окна редактирования. Args: browser: Экземпляр страницы Playwright. """ ut = UsersTab(browser) user_name, _ = ut.open_edit_user_page_by_index(0) ut.close_edit_user_window_by_toolbar_button(user_name) user_name, _ = ut.open_edit_user_page_by_index(0) ut.close_edit_user_window(user_name) # @pytest.mark.develop def test_add_and_delete_user(self, browser: Page, cleanup_users: None) -> None: """Проверяет добавление и удаление пользователя. Args: browser: Экземпляр страницы Playwright. Удаление пользователя выполняется автоматически фикстурой cleanup_users. """ user_data: Dict[str, str] = {"name": "TestUser", "role": "Администратор", "password": "987654"} mp = MainPage(browser) ut = UsersTab(browser) # Проверяем, есть ли такой пользователь user_exists = ut.find_user_in_table(user_data["name"], user_data["role"]) != -1 if not user_exists: # Создаем пользователя впервые ut.open_add_user_window() success = ut.add_new_user(user_data) if success: # Ждем обновления таблицы с использованием ожиданий Playwright browser.wait_for_timeout(2000) # Проверяем наличие пользователя в таблице user_found = ut.find_user_in_table(user_data["name"], user_data["role"]) != -1 if not user_found: # Если пользователь не найден, обновляем страницу browser.reload() browser.wait_for_timeout(2000) else: ut.close_add_user_window() # Пытаемся создать такого же пользователя снова ut.open_add_user_window() success_second = ut.add_new_user(user_data) # Должно вернуться False при попытке создания существующего пользователя assert not success_second, "Ожидалась ошибка при создании существующего пользователя" ut.open_edit_user_page_by_user(user_data["name"], user_data["role"]) ut.delete_user(user_data["name"]) mp.click_subpanel_item("Пользователи") mp.click_subpanel_item("Пользователи") 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_users: None) -> None: """Проверяет добавление пользователя Active Directory. Args: browser: Экземпляр страницы Playwright. Удаление пользователя выполняется автоматически фикстурой cleanup_users. """ user_data: Dict[str, str] = {"auth_type":"active_directory", "group": "Администраторы", "name": "Администратор", "role": "Администратор"} ut = UsersTab(browser) ut.open_add_user_window() ut.add_new_user(user_data) def test_reset_password(self, browser: Page, cleanup_users: None) -> None: """Проверяет сброс пароля пользователя. Args: browser: Экземпляр страницы Playwright. Удаление пользователя выполняется автоматически фикстурой cleanup_users. """ user_data: Dict[str, str] = {"name": "TestUserAutoAdmin", "role": "Администратор", "password": "123456"} mp = MainPage(browser) ut = UsersTab(browser) ut.open_add_user_window() ut.add_new_user(user_data) mp.click_subpanel_item("Пользователи") mp.click_subpanel_item("Пользователи") ut.open_edit_user_page_by_user(user_data["name"], user_data["role"]) new_password = ut.reset_password(user_data["name"]) if len(new_password) == 0: assert False, "Unsuccessful password reset" new_lp = LoginPage(browser) new_lp.do_login(username=user_data["name"], password=new_password) new_mp = MainPage(browser) new_mp.do_logout() lp_1 = LoginPage(browser) lp_1.do_login() mp_1 = MainPage(browser) mp_1.should_be_navigation_panel() mp_1.click_main_navigation_panel_item("Настройки") mp_1.click_subpanel_item("Пользователи") ut_1 = UsersTab(browser) ut_1.open_edit_user_page_by_user(user_data["name"], user_data["role"]) ut_1.delete_user(user_data["name"]) mp_1.click_subpanel_item("Пользователи") 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_users: None) -> None: """Проверяет изменение роли пользователя. Args: browser: Экземпляр страницы Playwright. Удаление пользователя выполняется автоматически фикстурой cleanup_users. """ user_data: Dict[str, str] = {"name": "TestUserAutoOperator", "role": "Оператор", "password": "123245"} mp = MainPage(browser) ut = UsersTab(browser) ut.open_add_user_window() ut.add_new_user(user_data) mp.click_subpanel_item("Пользователи") mp.click_subpanel_item("Пользователи") ut.open_edit_user_page_by_user(user_data["name"], user_data["role"]) new_user_data = {"role": "Контактное лицо"} ut.edit_user(user_data["name"], new_user_data) mp.click_subpanel_item("Пользователи") mp.click_subpanel_item("Пользователи") ut.should_be_user_in_table(user_data["name"], new_user_data["role"]) ut.open_edit_user_page_by_user(user_data["name"], new_user_data["role"]) ut.delete_user(user_data["name"]) mp.click_subpanel_item("Пользователи") mp.click_subpanel_item("Пользователи") ut.should_not_be_user_in_table(user_data["name"], new_user_data["role"])