def login_to_adcm_over_ui(app_fs, adcm_credentials): """Perform login on Login page ADCM""" login = LoginPage(app_fs.driver, app_fs.adcm.url).open() login.login_user(**adcm_credentials) login.wait_url_contains_path(AdminIntroPage(app_fs.driver, app_fs.adcm.url).path) login.wait_config_loaded()
def test_upgrade_adcm( app_fs: ADCMTest, sdk_client_fs: ADCMClient, adcm_api_credentials: dict, adcm_image_tags: Tuple[str, str], ): """ Login to ADCM (previous version) Upgrade ADCM Check messages about ADCM upgrade Check that user is still logged in (open different tabs) """ credentials = {**adcm_api_credentials} credentials['username'] = credentials.pop('user') with allure.step('Login to ADCM with UI'): login_page = LoginPage(app_fs.driver, app_fs.adcm.url).open() login_page.login_user(**credentials) intro_page = PreviousAdminIntroPage(login_page.driver, login_page.base_url) intro_page.wait_page_is_opened() intro_page.wait_config_loaded() with allure.step('Start ADCM upgrade with client'): upgrade_thread = threading.Thread(target=upgrade_adcm_version, args=(app_fs.adcm, sdk_client_fs, adcm_api_credentials, adcm_image_tags)) upgrade_thread.start() with allure.step('Check update popup messages are present'): for message in ( 'Connection lost. Recovery attempt.', 'No connection to back-end. Check your internet connection.', 'New version available. Page has been refreshed.', ): with allure.step(f'Check message "{message}" is presented'): # TODO one day make first wait a long one, others shorter like 90, 30, 30 or smt like that wait_until_step_succeeds(wait_info_popup_contains, page=intro_page, text=message, timeout=77, period=0.3) with allure.step('Wait for upgrade to finish'): upgrade_thread.join(timeout=60) open_different_tabs(intro_page)
def login_to_adcm_over_api(app_fs, adcm_credentials): """Perform login via API call""" login_endpoint = f'{app_fs.adcm.url.rstrip("/")}/api/v1/token/' LoginPage(app_fs.driver, app_fs.adcm.url).open() token = requests.post(login_endpoint, json=adcm_credentials).json()['token'] with allure.step("Set token to localStorage"): auth = {'login': adcm_credentials['username'], 'token': token} script = f'localStorage.setItem("auth", JSON.stringify({json.dumps(auth)}))' app_fs.driver.execute_script(script) auth = app_fs.driver.execute_script("return localStorage.auth") assert token in auth, "Token was not set in localStorage" AdminIntroPage(app_fs.driver, app_fs.adcm.url).open().wait_config_loaded()
def test_new_user_creation(self, users_page: AdminUsersPage): """Create new user, change password and login with new password""" params = { 'username': '******', 'password': '******', 'new_password': '******', 'first_name': 'First', 'last_name': 'Last', 'email': '*****@*****.**', } users_page.create_user(params['username'], params['password'], params['first_name'], params['last_name'], params['email']) with allure.step( f'Check user {params["username"]} is listed in users list'): assert users_page.is_user_presented( params['username'] ), f'User {params["username"]} was not created' users_page.change_user_password(params['username'], params['new_password']) users_page.header.logout() with allure.step( f'Login as user {params["username"]} with password {params["new_password"]}' ): login_page = LoginPage(users_page.driver, users_page.base_url) login_page.wait_page_is_opened() login_page.login_user(params['username'], params['new_password']) with allure.step('Check login was successful'): AdminIntroPage(users_page.driver, users_page.base_url).wait_page_is_opened(timeout=5)
def test_check_login_to_adcm(app_fs, adcm_credentials): """Test basic success UI login""" login_page = LoginPage(app_fs.driver, app_fs.adcm.url).open() login_page.check_all_elements() login_page.login_user(**adcm_credentials) with allure.step("Check if user has been authorized"): intro_page = AdminIntroPage(app_fs.driver, app_fs.adcm.url) intro_page.wait_page_is_opened() # investigate why profile marker can't be found # login_page.wait_config_loaded() intro_page.header.check_auth_page_elements()
def test_check_header_user_settings_for_authorised_user(self, app_fs): """Test header user settings buttons for authorised user""" header = PageHeader(app_fs.driver, app_fs.adcm.url) header.click_account_button_in_header() header.check_account_popup() header.click_settings_link_in_acc_popup() header.wait_url_contains_path( AdminSettingsPage(app_fs.driver, app_fs.adcm.url).path) header.click_account_button_in_header() header.click_profile_link_in_acc_popup() header.wait_url_contains_path( ProfilePage(app_fs.driver, app_fs.adcm.url).path) header.click_account_button_in_header() header.click_logout_in_acc_popup() header.wait_url_contains_path( LoginPage(app_fs.driver, app_fs.adcm.url).path)
def test_change_password(adcm_credentials: dict, app_fs: ADCMTest): """Change admin password over UI and login under new credentials""" new_credentials = {**adcm_credentials, 'password': '******'} profile_page = ProfilePage(app_fs.driver, app_fs.adcm.url).open() profile_page.set_new_password(new_credentials['password']) login_page = LoginPage(profile_page.driver, profile_page.base_url) login_page.wait_page_is_opened() login_page.login_user(**new_credentials) intro_page = AdminIntroPage(app_fs.driver, app_fs.adcm.url) intro_page.wait_config_loaded() intro_page.header.open_profile() profile_page.wait_page_is_opened() profile_page.check_required_fields_are_presented() profile_page.check_username(adcm_credentials['username'])
def test_login_as_new_user(another_user: dict, app_fs: ADCMTest): """Login as admin, logout, login as another user, check username""" params = {'admin_username': '******', 'another_username': another_user['username']} profile_page = ProfilePage(app_fs.driver, app_fs.adcm.url).open() profile_page.check_username(params['admin_username']) profile_page.header.logout() login_page = LoginPage(profile_page.driver, profile_page.base_url) login_page.wait_page_is_opened() login_page.login_user(**another_user) intro_page = AdminIntroPage(profile_page.driver, profile_page.base_url) intro_page.wait_config_loaded() intro_page.header.open_profile() profile_page.wait_page_is_opened() profile_page.check_required_fields_are_presented() profile_page.check_username(another_user['username'])
def test_change_admin_password(self, users_page: AdminUsersPage): """Change admin password, login with new credentials""" params = {'username': '******', 'password': '******'} users_page.update_user_info(params['username'], first_name='Best', last_name='Admin') users_page.change_user_password(**params) users_page.driver.refresh() with allure.step('Check Login page is opened'): login_page = LoginPage(users_page.driver, users_page.base_url) login_page.wait_page_is_opened() login_page.login_user(**params) with allure.step('Check login was successful'): AdminIntroPage(users_page.driver, users_page.base_url).wait_page_is_opened(timeout=5)
def test_check_header_links_in_login_page_unauthorised(app_fs): """Test header for unauthorised user""" params = {"error_text": "User is not authorized!"} login_page = LoginPage(app_fs.driver, app_fs.adcm.url).open() login_page.header.click_arenadata_logo_in_header() login_page.check_error_message(params["error_text"]) login_page.header.click_clusters_tab_in_header() login_page.check_error_message(params["error_text"]) login_page.header.click_hostproviders_tab_in_header() login_page.check_error_message(params["error_text"]) login_page.header.click_hosts_tab_in_header() login_page.check_error_message(params["error_text"]) login_page.header.click_jobs_tab_in_header() login_page.check_error_message(params["error_text"]) login_page.header.click_bundles_tab_in_header() login_page.check_error_message(params["error_text"])
def test_check_error_in_login(app_fs, name, password): """Test basic UI login with invalid credentials""" params = {"error_text": "Incorrect password or user."} login_page = LoginPage(app_fs.driver, app_fs.adcm.url).open() login_page.login_user(name, password) login_page.check_error_message(params["error_text"])
def test_check_login_button_unavailable(app_fs, name, password): """Test that login button is unavailable for given conditions""" login_page = LoginPage(app_fs.driver, app_fs.adcm.url).open() login_page.fill_login_user_form(name, password) login_page.check_check_login_button_unavailable()