from pages.login_page import LoginPage from pages.main_page import MainPage from pages.users_tab import UsersTab import pytest # @pytest.mark.smoke class TestUsersTab: """Тесты для вкладки 'Пользователи'. Содержит тесты для проверки функционала работы с пользователями: - отображение списка пользователей - добавление/удаление пользователей - изменение ролей пользователей - сброс паролей Атрибуты: browser: фикстура для работы с браузером. """ @pytest.fixture(scope="function", autouse=True) def setup(self, browser): """Подготовка тестового окружения. Выполняет вход в систему и переход на вкладку 'Пользователи'. Args: browser: фикстура для работы с браузером. """ lp = LoginPage(browser) lp.do_login() # Переход на главную страницу mp = MainPage(browser) # Проверка наличия панели навигации mp.should_be_navigation_panel() # Клик по кнопке "Настройки" в главной панели навигации mp.click_main_navigation_panel_item("Настройки") # Клик по кнопке "Пользователи" в панели навигации настроек mp.click_configuration_navigation_panel_item("Пользователи") def test_users_tab_content(self, browser): """Тест содержимого вкладки 'Пользователи'. Проверяет наличие основных элементов интерфейса и содержимого таблицы пользователей. Args: browser: фикстура для работы с браузером. """ # Вкладка пользователей открыта 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): """Тест кнопок на панели инструментов. Проверяет наличие и доступность кнопок управления пользователями. Args: browser: фикстура для работы с браузером. """ ut = UsersTab(browser) ut.should_be_toolbar_buttons() def test_add_user_window_content(self, browser): """Тест содержимого окна добавления пользователя. Проверяет корректность отображения формы добавления нового пользователя. Args: browser: фикстура для работы с браузером. """ ut = UsersTab(browser) # Открытие формы добавления пользователя ut.open_add_user_window() # Проверка содержимого формы ut.check_add_user_window_content() def test_add_user_window_close_buttons(self, browser): """Тест кнопок закрытия окна добавления пользователя. Проверяет работу кнопок закрытия формы добавления пользователя. Args: browser: фикстура для работы с браузером. """ 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() def test_edit_user_window_content(self, browser): """Тест содержимого окна редактирования пользователя. Проверяет корректность отображения формы редактирования пользователя. Args: browser: фикстура для работы с браузером. """ 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): """Тест кнопок закрытия окна редактирования пользователя. Проверяет работу кнопок закрытия формы редактирования пользователя. Args: browser: фикстура для работы с браузером. """ ut = UsersTab(browser) # Проверка закрытия через кнопку на панели инструментов user_name, role = ut.open_edit_user_page_by_index(0) ut.close_edit_user_window_by_toolbar_button(user_name) # Проверка закрытия через стандартную кнопку закрытия user_name, role = ut.open_edit_user_page_by_index(0) ut.close_edit_user_window(user_name) def test_add_and_delete_user(self, browser): """Тест добавления и удаления пользователя. Проверяет полный цикл создания и удаления пользователя. Args: browser: фикстура для работы с браузером. """ user_data = {"name": "User", "role": "Администратор"} mp = MainPage(browser) ut = UsersTab(browser) # Создание нового пользователя ut.open_add_user_window() ut.add_new_user(user_data) # Обновление списка пользователей (двойной клик - возможно баг?) mp.click_configuration_navigation_panel_item("Пользователи") mp.click_configuration_navigation_panel_item("Пользователи") # Проверка наличия пользователя в таблице ut.should_be_user_in_table(user_data["name"], user_data["role"]) # Удаление пользователя ut.open_edit_user_page_by_user(user_data["name"], user_data["role"]) ut.delete_user(user_data["name"]) # Обновление списка пользователей (двойной клик - возможно баг?) mp.click_configuration_navigation_panel_item("Пользователи") mp.click_configuration_navigation_panel_item("Пользователи") # Проверка отсутствия пользователя в таблице ut.should_not_be_user_in_table(user_data["name"], user_data["role"]) # @pytest.mark.develop def test_reset_password(self, browser): """Тест сброса пароля пользователя. Проверяет функционал сброса и проверки нового пароля. Args: browser: фикстура для работы с браузером. """ user_data = {"name": "autoadmin", "role": "Администратор"} mp = MainPage(browser) ut = UsersTab(browser) # Создание тестового пользователя ut.open_add_user_window() ut.add_new_user(user_data) # Обновление списка пользователей (двойной клик - возможно баг?) mp.click_configuration_navigation_panel_item("Пользователи") mp.click_configuration_navigation_panel_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_configuration_navigation_panel_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_configuration_navigation_panel_item("Пользователи") mp_1.click_configuration_navigation_panel_item("Пользователи") ut_1.should_not_be_user_in_table(user_data["name"], user_data["role"]) # @pytest.mark.develop def test_edit_user_role(self, browser): """Тест изменения роли пользователя. Проверяет функционал изменения роли пользователя. Args: browser: фикстура для работы с браузером. """ user_data = {"name": "autooperator", "role": "Оператор"} mp = MainPage(browser) ut = UsersTab(browser) # Создание тестового пользователя ut.open_add_user_window() ut.add_new_user(user_data) # Обновление списка пользователей (двойной клик - возможно баг?) mp.click_configuration_navigation_panel_item("Пользователи") mp.click_configuration_navigation_panel_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_configuration_navigation_panel_item("Пользователи") mp.click_configuration_navigation_panel_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_configuration_navigation_panel_item("Пользователи") mp.click_configuration_navigation_panel_item("Пользователи") ut.should_not_be_user_in_table(user_data["name"], new_user_data["role"])