def test_should_change_a_extended_user_to_project_manager(self): user = generate_user() self._create_extended_user(user) username = fetch_(USERNAME, user) self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) self.assertTrue( self.all_users_page.is_editable(username), '%s user was expected to be editable but was not editable') self.all_users_page.select_user_with_username(username) edit_user_page = self.all_users_page.select_edit_action() self.assertTrue(edit_user_page.is_user_name_is_prefetched(username)) self.assertTrue(edit_user_page.is_role_administrator()) edit_user_page.select_role_as_project_manager() selected_questionnaires = edit_user_page.select_questionnaires(3) edit_user_page.save_changes() edit_user_page.get_success_message() self.driver.go_to(ALL_USERS_URL) questionnaire_list_for_user = self.all_users_page.get_questionnaire_list_for( username) self.assertEqual(set(questionnaire_list_for_user), set(selected_questionnaires)) self.assertEqual('Project Manager', self.all_users_page.get_role_for(username)) self.global_navigation.sign_out()
def test_should_change_a_project_manager_to_extended_user(self): self.global_navigation = login(self.driver, VALID_CREDENTIALS) self.driver.go_to(ALL_USERS_URL) all_users_page = AllUsersPage(self.driver) add_user_page = all_users_page.navigate_to_add_user() user = generate_user() add_user_page.select_role_as_project_manager() add_user_page.select_questionnaires(2, 4) add_user_page.add_user_with(user) message = add_user_page.get_success_message() self.assertEqual(message, ADDED_USER_SUCCESS_MSG) self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) username = fetch_(USERNAME, user) self.assertTrue( self.all_users_page.is_editable(username), '%s user was expected to be editable but was not editable') self.all_users_page.select_user_with_username(username) edit_user_page = self.all_users_page.select_edit_action() self.assertTrue(edit_user_page.is_user_name_is_prefetched(username)) self.assertTrue(edit_user_page.is_role_project_manager()) edit_user_page.select_role_as_administrator() edit_user_page.save_changes() edit_user_page.get_success_message() self.driver.go_to(ALL_USERS_URL) self.assertEqual('Administrator', self.all_users_page.get_role_for(username)) self.assertEqual( 'All', self.all_users_page.get_questionnaire_list_for(username)[0]) self.global_navigation.sign_out()
def _create_extended_user(self, user): self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) self.add_user_page = self.all_users_page.navigate_to_add_user() self.add_user_page.select_role_as_administrator() self.add_user_page.add_user_with(user) self.add_user_page.get_success_message()
def _create_project_manager(self, user): self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) self.add_user_page = self.all_users_page.navigate_to_add_user() self.add_user_page.select_role_as_project_manager() self.add_user_page.select_questionnaires(1, 0) self.add_user_page.add_user_with(user) self.add_user_page.get_success_message()
def add_new_user(cls, user_data): cls.driver.go_to(ALL_USERS_URL) all_users_page = AllUsersPage(cls.driver) add_user_page = all_users_page.navigate_to_add_user() add_user_page.add_user_with(user_data) cls.driver.wait_for_element(UI_TEST_TIMEOUT * 2, FLASH_MESSAGE_LABEL, True) user_mobile_number = fetch_(MOBILE_PHONE, user_data) return user_mobile_number
def add_new_user(cls, user_data): cls.driver.go_to(ALL_USERS_URL) all_users_page = AllUsersPage(cls.driver) add_user_page = all_users_page.navigate_to_add_user() add_user_page.add_user_with(user_data) cls.driver.wait_for_element(UI_TEST_TIMEOUT, by_css("div.success-message-box"), True) user_mobile_number = fetch_(MOBILE_PHONE, user_data) return user_mobile_number
def test_should_check_validations_while_editing_an_user(self): # Create a Project Manager user = generate_user() self._create_extended_user(user) self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) existing_mobile_number = self.all_users_page.get_mobile_number_for( user.get(USERNAME)) add_user_page = self.all_users_page.navigate_to_add_user() user = generate_user() add_user_page.select_role_as_project_manager() add_user_page.select_questionnaires(2, 4) add_user_page.add_user_with(user) add_user_page.get_success_message() username = user[USERNAME] # Edit the Project Manager self.driver.go_to(ALL_USERS_URL) self.all_users_page.select_user_with_username(username) edit_user_page = self.all_users_page.select_edit_action() updated_user_data = {NAME: ""} edit_user_page.edit_values(updated_user_data) message = edit_user_page.get_error_messages() self.assertEqual(message, u'This field is required') updated_user_data = {NAME: "Test User", MOBILE_PHONE: ""} edit_user_page.edit_values(updated_user_data) message = edit_user_page.get_error_messages() self.assertEqual(message, u'This field is required') updated_user_data = {MOBILE_PHONE: "Some text value"} edit_user_page.edit_values(updated_user_data) message = edit_user_page.get_error_messages() self.assertEqual(message, u'Invalid phone number') updated_user_data = {MOBILE_PHONE: "1234"} edit_user_page.edit_values(updated_user_data) message = edit_user_page.get_error_messages() self.assertEqual(message, u'Invalid phone number') updated_user_data = {MOBILE_PHONE: existing_mobile_number} edit_user_page.save_changes(updated_user_data) message = edit_user_page.get_error_messages() self.assertEqual( message, u'This phone number is already in use. Please supply a different phone number' ) self.global_navigation.sign_out() edit_user_page.confirm_leave_page()
def delete_user(self, username): self.global_navigation.sign_out() login(self.driver, VALID_CREDENTIALS) self.driver.go_to(ALL_USERS_URL) all_users_page = AllUsersPage(self.driver) self.driver.find(by_xpath("//td[contains(.,'%s')]/../td/input" % username)).click() all_users_page.select_delete_action(confirm=True) self.driver.wait_for_element(UI_TEST_TIMEOUT, by_css("span.loading"), True) self.driver.wait_until_modal_dismissed() message = all_users_page.get_message() self.assertEqual(message, SUCCESSFULLY_DELETED_USER_MSG)
def test_should_show_warning_when_trying_to_leave_page_without_saving( self): self.driver.go_to(ALL_USERS_URL) all_users_page = AllUsersPage(self.driver) all_users_page.select_user_with_username("*****@*****.**") edit_user_page = all_users_page.select_edit_action() edit_user_page.select_role_as_administrator() self.edit_user_page.switch_language("en") expected_msg = """You have made changes to the form. These changes will be lost if you navigate away from this page.\n\nAre you sure you want to proceed?""" alert_msg = self.edit_user_page.get_warning_dialog_message() self.assertEqual(alert_msg, expected_msg)
def test_should_show_warning_when_trying_to_leave_page_without_saving( self): self.global_navigation = login(self.driver, VALID_CREDENTIALS) self.driver.go_to(ALL_USERS_URL) all_users_page = AllUsersPage(self.driver) all_users_page.select_user_with_username("*****@*****.**") edit_user_page = all_users_page.select_edit_action() edit_user_page.select_role_as_administrator() self.driver.refresh() expected_msg = u'This page is asking you to confirm that you want to leave - data you have entered may not be saved.' alert = self.driver.switch_to_alert() self.assertEqual(alert.text, expected_msg)
def test_should_add_a_new_user(self): self.global_navigation = login(self.driver, VALID_CREDENTIALS) self.driver.go_to(ALL_USERS_URL) all_users_page = AllUsersPage(self.driver) add_user_page = all_users_page.navigate_to_add_user() add_user_page.add_user_with(ADD_USER_DATA) message = add_user_page.get_success_message() self.assertEqual(message, ADDED_USER_SUCCESS_MSG) username = fetch_(USERNAME, ADD_USER_DATA) password = DEFAULT_PASSWORD new_user_credential = {USERNAME: username, PASSWORD: password} self.global_navigation.sign_out() login(self.driver, new_user_credential) title = self.driver.get_title() self.assertEqual(title, DASHBOARD_PAGE_TITLE)
def test_should_make_sure_that_ds_permission_is_removed_in_the_same_time_as_user_permission_is_removed( self): self.driver.go_to(ALL_USERS_URL) all_users_page = AllUsersPage(self.driver) all_users_page.select_user_with_username("*****@*****.**") edit_user_page = all_users_page.select_edit_action() edit_user_page._uncheck_all_questionnaires() edit_user_page.save_changes() edit_user_page.get_success_message() response = send_sms_with(SMS_TO_TEST_PERMISSION) self.assertEqual(response, ERROR_MESSAGE) edit_user_page.select_questionnaires_by_name(["clinic test project1"]) edit_user_page.save_changes() edit_user_page.get_success_message() response = send_sms_with(SMS_TO_TEST_PERMISSION) self.assertEqual(response, SUCCESS_MESSAGE)
def test_should_update_user_name_when_edited_from_datasender_page(self): add_user_page = self.all_users_page.navigate_to_add_user() add_user_page.add_user_with(EDIT_USER_DATA) self.driver.go_to(DATA_WINNER_ALL_DATA_SENDERS_PAGE) all_datasenders_page = AllDataSendersPage(self.driver) all_datasenders_page.search_with(EDIT_USER_DATA.get('username')) self.driver.find(all_datasenders_page.get_checkbox_selector_for_datasender_row(1)).click() all_datasenders_page.select_edit_action() EDIT_DETAILS = {"name": "New testUser", "mobile_number": EDIT_USER_DATA.get("mobile_phone"), "commune": "Madagascar", "gps": "-21.7622088847 48.0690991394"} AddDataSenderPage(self.driver).enter_data_sender_details_from(EDIT_DETAILS).navigate_to_datasender_page() self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) element = self.driver.find(by_xpath(NAME_COLUMN % EDIT_USER_DATA.get("username"))) self.assertEquals(EDIT_DETAILS.get("name"),element.text)
def delete_user(self): self.driver.go_to(ALL_USERS_URL) all_users_page = AllUsersPage(self.driver) all_users_page.check_nth_user(2) all_users_page.select_delete_action(confirm=True) message = all_users_page.get_message() self.assertEqual(message, SUCCESSFULLY_DELETED_USER_MSG)
def test_should_add_a_new_project_manager_as_extended_user(self): self.add_user_page.select_role_as_administrator() user = generate_user() self.add_user_page.add_user_with(user) message = self.add_user_page.get_success_message() self.assertEqual(message, ADDED_USER_SUCCESS_MSG) self.username = fetch_(USERNAME, user) password = DEFAULT_PASSWORD self.new_user_credential = {USERNAME: self.username, PASSWORD: password} self.global_navigation.sign_out() login(self.driver, self.new_user_credential) title = self.driver.get_title() self.assertEqual(title, DASHBOARD_PAGE_TITLE) self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) self.add_user_page = self.all_users_page.navigate_to_add_user() self.assertFalse(self.add_user_page.is_administrator_role_visible(), 'Expected Administrator Role not to be present but it was present') questionnaires = self.add_user_page.select_questionnaires(2) user = generate_user() self.add_user_page.add_user_with(user) message = self.add_user_page.get_success_message() self.assertEqual(message, ADDED_USER_SUCCESS_MSG) self.username = fetch_(USERNAME, user) password = DEFAULT_PASSWORD self.new_user_credential = {USERNAME: self.username, PASSWORD: password} self.driver.go_to(ALL_USERS_URL) questionnaire_list_for_user = self.all_users_page.get_questionnaire_list_for(self.username) role_for_user = self.all_users_page.get_role_for(self.username) self.assertEqual('Project Manager', role_for_user, 'Expected role to be Project Manager but was %s' % role_for_user) if not questionnaires[0] in questionnaire_list_for_user: self.driver.create_screenshot("debug-ft-qre-not-in-list") raise Exception("%s not in [%s] for user %s" % (questionnaires[0], ", ".join(questionnaire_list_for_user), self.username)) self.assertTrue(questionnaires[0] in questionnaire_list_for_user) self.assertTrue(questionnaires[1] in questionnaire_list_for_user) self.assertEqual(2, len(questionnaire_list_for_user), 'Expected the questionnaires length to be 2 but was %s' % len(questionnaire_list_for_user)) self.global_navigation.sign_out() login(self.driver, self.new_user_credential) title = self.driver.get_title() self.assertEqual(title, DASHBOARD_PAGE_TITLE)
def test_should_create_activity_log_and_submit_data(self): all_users_page = self.prerequisites_for_all_users() add_user_page = all_users_page.navigate_to_add_user() add_user_page.add_user_with(NEW_USER_DATA) self.driver.go_to(LOGOUT) new_user_credential = { USERNAME: NEW_USER_DATA[USERNAME], PASSWORD: "******" } self.login(credential=new_user_credential) self.driver.go_to(ALL_USERS_URL) all_users_page = AllUsersPage(self.driver) add_user_page = all_users_page.navigate_to_add_user() add_user_page.add_user_with(ADD_USER_DATA) self.driver.go_to(url("/project/")) project_name, questionnaire_code = self.create_project() self.send_submission(questionnaire_code) self.delete_user(NEW_USER_DATA[USERNAME]) self.check_sent_submission(project_name) self.check_deleted_user_name_on_activity_log_page(project_name)
def create_user_and_open_it_on_edit_page(self, isAdmin=True, questionnaires=[]): self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) add_user_page = self.all_users_page.navigate_to_add_user() user = generate_user() if isAdmin: add_user_page.select_role_as_administrator() else: add_user_page.select_role_as_project_manager() add_user_page.select_questionnaires(*questionnaires) add_user_page.add_user_with(user) message = add_user_page.get_success_message() self.username = fetch_(USERNAME, user) self.driver.go_to(ALL_USERS_URL) self.user_questionnaire_list = self.all_users_page.get_questionnaire_list_for( self.username) self.assertTrue( self.all_users_page.is_editable(self.username), '%s user was expected to be editable but was not editable') self.all_users_page.select_user_with_username(self.username) self.edit_user_page = self.all_users_page.select_edit_action()
def test_should_edit_a_project_manager_as_ngo_admin(self): self.global_navigation = login(self.driver, VALID_CREDENTIALS) self.driver.go_to(ALL_USERS_URL) all_users_page = AllUsersPage(self.driver) add_user_page = all_users_page.navigate_to_add_user() user = generate_user() add_user_page.select_role_as_project_manager() add_user_page.select_questionnaires(2, 4) add_user_page.add_user_with(user) add_user_page.get_success_message() username = fetch_(USERNAME, user) self.driver.go_to(ALL_USERS_URL) questionnaire_list_for_user = all_users_page.get_questionnaire_list_for( username) all_users_page.select_user_with_username(username) edit_user_page = all_users_page.select_edit_action() self.assertTrue(edit_user_page.is_user_name_is_prefetched(username)) self.assertTrue(edit_user_page.is_role_project_manager()) self.assertTrue( edit_user_page.are_questionnaires_preselected( questionnaire_list_for_user)) selected_questionnaires = edit_user_page.select_questionnaires(3) edit_user_page.save_changes({ "mobile_phone": random_number(9), "full_name": 'New User Name' }) success_message = edit_user_page.get_success_message() self.assertEqual( USER_EDITED_SUCCESS_MESSAGE, success_message, 'Expected "User has been updated successfully" message but was not found' ) self.driver.go_to(ALL_USERS_URL) self.assertEqual('New User Name', all_users_page.get_full_name_for(username)) self.assertEqual( 3, len(selected_questionnaires), 'Expected the questionnaires length to be 3 but was %s' % len(selected_questionnaires)) self.global_navigation.sign_out()
def test_should_edit_an_extended_user_as_ngo_admin(self): self.global_navigation = login(self.driver, VALID_CREDENTIALS) self.driver.go_to(ALL_USERS_URL) all_users_page = AllUsersPage(self.driver) add_user_page = all_users_page.navigate_to_add_user() user = generate_user() add_user_page.select_role_as_administrator() add_user_page.add_user_with(user) message = add_user_page.get_success_message() username = fetch_(USERNAME, user) self.driver.go_to(ALL_USERS_URL) all_users_page.select_user_with_username(username) edit_user_page = all_users_page.select_edit_action() self.assertTrue(edit_user_page.is_user_name_is_prefetched(username)) self.assertTrue(edit_user_page.is_role_administrator()) edit_user_page.save_changes({"mobile_phone": random_number(9)}) success_message = edit_user_page.get_success_message() self.assertEqual( USER_EDITED_SUCCESS_MESSAGE, success_message, 'Expected "User has been updated successfully" message but was not found' ) self.global_navigation.sign_out()
def test_should_edit_a_project_manager_as_extended_user(self): user = { TITLE: "Developer", NAME: random_string(7), USERNAME: random_string(7) + "@mailinator.com", MOBILE_PHONE: random_number(9) } new_user = { TITLE: "Developer", NAME: random_string(7), USERNAME: random_string(7) + "@mailinator.com", MOBILE_PHONE: random_number(9) } # create extended user self._create_extended_user(user) username = fetch_(USERNAME, user) password = DEFAULT_PASSWORD extended_user_credentials = {USERNAME: username, PASSWORD: password} self.global_navigation.sign_out() # Login with extended user and create project manager login(self.driver, extended_user_credentials) self.driver.wait_for_page_with_title(UI_TEST_TIMEOUT, "Dashboard") self.assertEqual("Dashboard", self.driver.get_title()) self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) self.assertEqual( 0, self.all_users_page.number_of_editable_users_for_role( 'Administrator'), 'Expected Administrators to be non-editable but was editable') self.assertEqual( 0, self.all_users_page.number_of_editable_users_for_role( 'Super Admin'), 'Expected Super Admin to be non-editable but was editable') self.add_user_page = self.all_users_page.navigate_to_add_user() self.add_user_page.select_questionnaires(2) self.add_user_page.add_user_with(new_user) self.add_user_page.get_success_message() username = fetch_(USERNAME, new_user) self.driver.go_to(ALL_USERS_URL) self.assertGreater( 1, self.all_users_page.number_of_editable_users_for_role( 'Super Admin'), 'Expected Super Admin to be non-editable but was editable') self.assertTrue( self.all_users_page.is_editable(username), '%s user was expected to be editable but was not editable') questionnaire_list_for_user = self.all_users_page.get_questionnaire_list_for( username) time.sleep(10) self.all_users_page.select_user_with_username(username) edit_user_page = self.all_users_page.select_edit_action() self.assertTrue(edit_user_page.is_user_name_is_prefetched(username)) self.assertTrue(edit_user_page.is_role_project_manager()) qre_pre_selected = edit_user_page.are_questionnaires_preselected( questionnaire_list_for_user, True) self.assertTrue(qre_pre_selected) selected_questionnaires = edit_user_page.select_questionnaires(3) edit_user_page.save_changes({ "mobile_phone": random_number(9), "full_name": 'New User Name' }) success_message = edit_user_page.get_success_message() self.assertEqual( USER_EDITED_SUCCESS_MESSAGE, success_message, 'Expected "User has been updated successfully" message but was not found' ) self.driver.go_to(ALL_USERS_URL) self.assertEqual('New User Name', self.all_users_page.get_full_name_for(username)) self.assertEqual( 3, len(selected_questionnaires), 'Expected the questionnaires length to be 3 but was %s' % len(selected_questionnaires))
def prerequisites_for_all_users(self): self.login() self.driver.go_to(ALL_USERS_URL) return AllUsersPage(self.driver)
def select_user_tab(self): self.driver.find(USER_TAB).click() return AllUsersPage(self.driver)
def prerequest_for_add_user_page(self): self.login() self.driver.go_to(ALL_USERS_URL) all_users_page = AllUsersPage(self.driver) return all_users_page.navigate_to_add_user()
class TestAddUser(HeadlessRunnerTest): def setUp(self): self.global_navigation = login(self.driver, VALID_CREDENTIALS) self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) self.add_user_page = self.all_users_page.navigate_to_add_user() def _create_extended_user(self): self.add_user_page.select_role_as_administrator() user = generate_user() self.add_user_page.add_user_with(user) message = self.add_user_page.get_success_message() self.assertEqual(message, ADDED_USER_SUCCESS_MSG) self.username = fetch_(USERNAME, user) password = DEFAULT_PASSWORD self.new_user_credential = {USERNAME: self.username, PASSWORD: password} self.driver.go_to(ALL_USERS_URL) role_for_user = self.all_users_page.get_role_for(self.username) self.assertEqual('Administrator', role_for_user, 'Expected role to be Administrator but was %s' % role_for_user) self.global_navigation.sign_out() login(self.driver, self.new_user_credential) title = self.driver.get_title() self.assertEqual(title, DASHBOARD_PAGE_TITLE) self.global_navigation.sign_out() @attr('functional_test') def test_should_add_a_new_extended_user_as_ngo_admin(self): self.add_user_page.select_role_as_administrator() user = generate_user() self.add_user_page.add_user_with(user) message = self.add_user_page.get_success_message() self.assertEqual(message, ADDED_USER_SUCCESS_MSG) self.username = fetch_(USERNAME, user) password = DEFAULT_PASSWORD self.new_user_credential = {USERNAME: self.username, PASSWORD: password} self.driver.go_to(ALL_USERS_URL) role_for_user = self.all_users_page.get_role_for(self.username) self.assertEqual('Administrator', role_for_user, 'Expected role to be Administrator but was %s' % role_for_user) self.global_navigation.sign_out() login(self.driver, self.new_user_credential) title = self.driver.get_title() self.assertEqual(title, DASHBOARD_PAGE_TITLE) self.global_navigation.sign_out() @attr('functional_test') def test_should_add_a_new_project_manager_as_ngo_admin(self): self.add_user_page.select_role_as_project_manager() questionnaires = self.add_user_page.select_questionnaires(2) user = generate_user() self.add_user_page.add_user_with(user) message = self.add_user_page.get_success_message() self.assertEqual(message, ADDED_USER_SUCCESS_MSG) self.username = fetch_(USERNAME, user) password = DEFAULT_PASSWORD self.new_user_credential = {USERNAME: self.username, PASSWORD: password} self.driver.go_to(ALL_USERS_URL) questionnaire_list_for_user = self.all_users_page.get_questionnaire_list_for(self.username) role_for_user = self.all_users_page.get_role_for(self.username) self.assertEqual('Project Manager', role_for_user, 'Expected role to be Project Manager but was %s' % role_for_user) self.assertTrue(questionnaires[0] in questionnaire_list_for_user) self.assertTrue(questionnaires[1] in questionnaire_list_for_user) self.assertEqual(2, len(questionnaire_list_for_user), 'Expected the questionnaires length to be 2 but was %s' % len(questionnaire_list_for_user)) self.global_navigation.sign_out() login(self.driver, self.new_user_credential) title = self.driver.get_title() self.assertEqual(title, DASHBOARD_PAGE_TITLE) self.global_navigation.sign_out() @attr('functional_test') def test_should_add_a_new_project_manager_as_extended_user(self): self.add_user_page.select_role_as_administrator() user = generate_user() self.add_user_page.add_user_with(user) message = self.add_user_page.get_success_message() self.assertEqual(message, ADDED_USER_SUCCESS_MSG) self.username = fetch_(USERNAME, user) password = DEFAULT_PASSWORD self.new_user_credential = {USERNAME: self.username, PASSWORD: password} self.global_navigation.sign_out() login(self.driver, self.new_user_credential) title = self.driver.get_title() self.assertEqual(title, DASHBOARD_PAGE_TITLE) self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) self.add_user_page = self.all_users_page.navigate_to_add_user() self.assertFalse(self.add_user_page.is_administrator_role_visible(), 'Expected Administrator Role not to be present but it was present') questionnaires = self.add_user_page.select_questionnaires(2) user = generate_user() self.add_user_page.add_user_with(user) message = self.add_user_page.get_success_message() self.assertEqual(message, ADDED_USER_SUCCESS_MSG) self.username = fetch_(USERNAME, user) password = DEFAULT_PASSWORD self.new_user_credential = {USERNAME: self.username, PASSWORD: password} self.driver.go_to(ALL_USERS_URL) questionnaire_list_for_user = self.all_users_page.get_questionnaire_list_for(self.username) role_for_user = self.all_users_page.get_role_for(self.username) self.assertEqual('Project Manager', role_for_user, 'Expected role to be Project Manager but was %s' % role_for_user) self.assertTrue(questionnaires[0] in questionnaire_list_for_user) self.assertTrue(questionnaires[1] in questionnaire_list_for_user) self.assertEqual(2, len(questionnaire_list_for_user), 'Expected the questionnaires length to be 2 but was %s' % len(questionnaire_list_for_user)) self.global_navigation.sign_out() login(self.driver, self.new_user_credential) title = self.driver.get_title() self.assertEqual(title, DASHBOARD_PAGE_TITLE) self.global_navigation.sign_out() @attr('functional_test') def test_should_check_when_adding_user_with_existing_username(self): user = get_existing_username_user() self._validate_and_check_error_message(user, u'This email address is already in use. Please supply a different email address') self.global_navigation.sign_out() self.add_user_page.confirm_leave_page() @attr('functional_test') def test_should_check_when_adding_user_with_existing_phonenumber(self): user = generate_user_with_existing_phone_number() self._validate_and_check_error_message(user, u'This phone number is already in use. Please supply a different phone number') self.global_navigation.sign_out() self.add_user_page.confirm_leave_page() @attr('functional_test') def test_should_check_choose_a_role_when_adding_user(self): user = generate_user() self.add_user_page.add_user_with(user) message = self.add_user_page.get_error_messages() self.assertEqual(message, "This field is required.") self.global_navigation.sign_out() self.add_user_page.confirm_leave_page() @attr('functional_test') def test_should_check_when_adding_user_with_invalid_phonenumber(self): user = generate_user() user.update({MOBILE_PHONE: 'abcdefgh'}) self._validate_and_check_error_message(user, u'Please enter a valid phone number.') self.global_navigation.sign_out() self.add_user_page.confirm_leave_page() @attr('functional_test') def test_should_check_when_adding_user_with_invalid_email_address(self): user = generate_user() user.update({USERNAME: '******'}) self._validate_and_check_error_message(user, u'Enter a valid email address. Example:[email protected]') self.global_navigation.sign_out() self.add_user_page.confirm_leave_page() def _validate_and_check_error_message(self, user, expected_message): self.add_user_page.select_role_as_project_manager() self.add_user_page.add_user_with(user) message = self.add_user_page.get_error_messages() self.assertEqual(message, expected_message) @attr('functional_test') @unittest.skip('Failed only in jenkins - Temporarily skipping') def test_should_show_warning_when_trying_to_leave_page_without_saving(self): user = generate_user() self.add_user_page.select_questionnaires() self.add_user_page.add_user_with(user, click_submit=False) self.driver.refresh() expected_msg = u'This page is asking you to confirm that you want to leave - data you have entered may not be saved.' alert = self.driver.switch_to_alert() self.assertEqual(alert.text, expected_msg)
class TestAddUser(HeadlessRunnerTest): def setUp(self): self.global_navigation = login(self.driver, VALID_CREDENTIALS) self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) self.add_user_page = self.all_users_page.navigate_to_add_user() def tearDown(self): try: self.global_navigation.sign_out() self.driver.wait_for_page_load() self.assertEqual(self.driver.get_title(), "Sign out") except Exception as e: self.add_user_page.confirm_form_changed_dialog() def _create_extended_user(self): self.add_user_page.select_role_as_administrator() user = generate_user() self.add_user_page.add_user_with(user) message = self.add_user_page.get_success_message() self.assertEqual(message, ADDED_USER_SUCCESS_MSG) self.username = fetch_(USERNAME, user) password = DEFAULT_PASSWORD self.new_user_credential = {USERNAME: self.username, PASSWORD: password} self.driver.go_to(ALL_USERS_URL) role_for_user = self.all_users_page.get_role_for(self.username) self.assertEqual('Administrator', role_for_user, 'Expected role to be Administrator but was %s' % role_for_user) self.global_navigation.sign_out() login(self.driver, self.new_user_credential) title = self.driver.get_title() self.assertEqual(title, DASHBOARD_PAGE_TITLE) @attr('functional_test') def test_should_add_a_new_extended_user_as_ngo_admin(self): self.add_user_page.select_role_as_administrator() user = generate_user() self.add_user_page.add_user_with(user) message = self.add_user_page.get_success_message() self.assertEqual(message, ADDED_USER_SUCCESS_MSG) self.username = fetch_(USERNAME, user) password = DEFAULT_PASSWORD self.new_user_credential = {USERNAME: self.username, PASSWORD: password} self.driver.go_to(ALL_USERS_URL) role_for_user = self.all_users_page.get_role_for(self.username) self.assertEqual('Administrator', role_for_user, 'Expected role to be Administrator but was %s' % role_for_user) self.global_navigation.sign_out() login(self.driver, self.new_user_credential) title = self.driver.get_title() self.assertEqual(title, DASHBOARD_PAGE_TITLE) @attr('functional_test') def test_should_add_a_new_project_manager_as_ngo_admin(self): self.add_user_page.select_role_as_project_manager() questionnaires = self.add_user_page.select_questionnaires(2) user = generate_user() self.add_user_page.add_user_with(user) message = self.add_user_page.get_success_message() self.assertEqual(message, ADDED_USER_SUCCESS_MSG) self.username = fetch_(USERNAME, user) password = DEFAULT_PASSWORD self.new_user_credential = {USERNAME: self.username, PASSWORD: password} self.driver.go_to(ALL_USERS_URL) questionnaire_list_for_user = self.all_users_page.get_questionnaire_list_for(self.username) role_for_user = self.all_users_page.get_role_for(self.username) self.assertEqual('Project Manager', role_for_user, 'Expected role to be Project Manager but was %s' % role_for_user) self.assertTrue(questionnaires[0] in questionnaire_list_for_user) self.assertTrue(questionnaires[1] in questionnaire_list_for_user) self.assertEqual(2, len(questionnaire_list_for_user), 'Expected the questionnaires length to be 2 but was %s' % len(questionnaire_list_for_user)) self.global_navigation.sign_out() login(self.driver, self.new_user_credential) title = self.driver.get_title() self.assertEqual(title, DASHBOARD_PAGE_TITLE) @attr('functional_test') def test_should_add_a_new_project_manager_as_extended_user(self): self.add_user_page.select_role_as_administrator() user = generate_user() self.add_user_page.add_user_with(user) message = self.add_user_page.get_success_message() self.assertEqual(message, ADDED_USER_SUCCESS_MSG) self.username = fetch_(USERNAME, user) password = DEFAULT_PASSWORD self.new_user_credential = {USERNAME: self.username, PASSWORD: password} self.global_navigation.sign_out() login(self.driver, self.new_user_credential) title = self.driver.get_title() self.assertEqual(title, DASHBOARD_PAGE_TITLE) self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) self.add_user_page = self.all_users_page.navigate_to_add_user() self.assertFalse(self.add_user_page.is_administrator_role_visible(), 'Expected Administrator Role not to be present but it was present') questionnaires = self.add_user_page.select_questionnaires(2) user = generate_user() self.add_user_page.add_user_with(user) message = self.add_user_page.get_success_message() self.assertEqual(message, ADDED_USER_SUCCESS_MSG) self.username = fetch_(USERNAME, user) password = DEFAULT_PASSWORD self.new_user_credential = {USERNAME: self.username, PASSWORD: password} self.driver.go_to(ALL_USERS_URL) questionnaire_list_for_user = self.all_users_page.get_questionnaire_list_for(self.username) role_for_user = self.all_users_page.get_role_for(self.username) self.assertEqual('Project Manager', role_for_user, 'Expected role to be Project Manager but was %s' % role_for_user) if not questionnaires[0] in questionnaire_list_for_user: self.driver.create_screenshot("debug-ft-qre-not-in-list") raise Exception("%s not in [%s] for user %s" % (questionnaires[0], ", ".join(questionnaire_list_for_user), self.username)) self.assertTrue(questionnaires[0] in questionnaire_list_for_user) self.assertTrue(questionnaires[1] in questionnaire_list_for_user) self.assertEqual(2, len(questionnaire_list_for_user), 'Expected the questionnaires length to be 2 but was %s' % len(questionnaire_list_for_user)) self.global_navigation.sign_out() login(self.driver, self.new_user_credential) title = self.driver.get_title() self.assertEqual(title, DASHBOARD_PAGE_TITLE) @attr('functional_test') def test_should_check_when_adding_user_with_existing_username(self): user = get_existing_username_user() self._validate_and_check_error_message(user, u'This email address is already in use. Please supply a different email address') @attr('functional_test') def test_should_check_when_adding_user_with_existing_phonenumber(self): user = generate_user_with_existing_phone_number() self._validate_and_check_error_message(user, u'This phone number is already in use. Please supply a different phone number') @attr('functional_test') def test_should_check_choose_a_role_when_adding_user(self): user = generate_user() self.add_user_page.add_user_with(user) message = self.add_user_page.get_error_messages() self.assertEqual(message, "This field is required.") @attr('functional_test') def test_should_check_when_adding_user_with_invalid_phonenumber(self): user = generate_user() user.update({MOBILE_PHONE: 'abcdefgh'}) self._validate_and_check_error_message(user, u'Please enter a valid phone number.') @attr('functional_test') def test_should_check_when_adding_user_with_invalid_email_address(self): user = generate_user() user.update({USERNAME: '******'}) self._validate_and_check_error_message(user, u'Enter a valid email address. Example:[email protected]') def _validate_and_check_error_message(self, user, expected_message): self.add_user_page.select_role_as_project_manager() self.add_user_page.add_user_with(user) message = self.add_user_page.get_error_messages() self.assertEqual(message, expected_message) @attr('functional_test') def test_should_show_warning_when_trying_to_leave_page_without_saving(self): user = generate_user() self.add_user_page.select_questionnaires() self.add_user_page.add_user_with(user, click_submit=False) self.add_user_page.switch_language("fr") expected_msg = """You have made changes to the form. These changes will be lost if you navigate away from this page.\n\nAre you sure you want to proceed?""" alert_msg = self.add_user_page.get_warning_dialog_message() self.assertEqual(alert_msg, expected_msg)
class TestEditUser(HeadlessRunnerTest): def setUp(self): self.global_navigation = login(self.driver, VALID_CREDENTIALS) self.driver.wait_for_page_with_title(UI_TEST_TIMEOUT, "Dashboard") self.edit_user_page = EditUserPage(self.driver) def tearDown(self): try: self.global_navigation.sign_out() self.assertEqual(self.driver.get_title(), "Sign out") except Exception as e: self.edit_user_page.confirm_leave_page() def create_user_and_open_it_on_edit_page(self, isAdmin=True, questionnaires=[]): self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) add_user_page = self.all_users_page.navigate_to_add_user() user = generate_user() if isAdmin: add_user_page.select_role_as_administrator() else: add_user_page.select_role_as_project_manager() add_user_page.select_questionnaires(*questionnaires) add_user_page.add_user_with(user) message = add_user_page.get_success_message() self.username = fetch_(USERNAME, user) self.driver.go_to(ALL_USERS_URL) self.user_questionnaire_list = self.all_users_page.get_questionnaire_list_for( self.username) self.assertTrue( self.all_users_page.is_editable(self.username), '%s user was expected to be editable but was not editable') self.all_users_page.select_user_with_username(self.username) self.edit_user_page = self.all_users_page.select_edit_action() @attr('functional_test') def test_should_edit_an_extended_user_as_ngo_admin(self): self.create_user_and_open_it_on_edit_page() self.assertTrue( self.edit_user_page.is_user_name_is_prefetched(self.username)) self.assertTrue(self.edit_user_page.is_role_administrator()) self.edit_user_page.save_changes({"mobile_phone": random_number(9)}) success_message = self.edit_user_page.get_success_message() time.sleep(1) self.assertEqual( USER_EDITED_SUCCESS_MESSAGE, success_message, 'Expected "User has been updated successfully" message but was not found' ) @attr('functional_test') def test_should_edit_a_project_manager_as_ngo_admin(self): self.create_user_and_open_it_on_edit_page(False, [2, 4]) self.assertTrue( self.edit_user_page.is_user_name_is_prefetched(self.username)) self.assertTrue(self.edit_user_page.is_role_project_manager()) self.assertTrue( self.edit_user_page.are_questionnaires_preselected( self.user_questionnaire_list, True)) selected_questionnaires = self.edit_user_page.select_questionnaires(3) self.edit_user_page.save_changes({ "mobile_phone": random_number(9), "full_name": 'New User Name' }) success_message = self.edit_user_page.get_success_message() self.assertEqual( USER_EDITED_SUCCESS_MESSAGE, success_message, 'Expected "User has been updated successfully" message but was not found' ) self.driver.go_to(ALL_USERS_URL) self.assertEqual('New User Name', self.all_users_page.get_full_name_for(self.username)) self.assertEqual( 3, len(selected_questionnaires), 'Expected the questionnaires length to be 3 but was %s' % len(selected_questionnaires)) @attr('functional_test') def test_should_edit_a_project_manager_as_extended_user(self): user = { TITLE: "Developer", NAME: random_string(7), USERNAME: random_string(7) + "@mailinator.com", MOBILE_PHONE: random_number(9) } new_user = { TITLE: "Developer", NAME: random_string(7), USERNAME: random_string(7) + "@mailinator.com", MOBILE_PHONE: random_number(9) } # create extended user self._create_extended_user(user) username = fetch_(USERNAME, user) password = DEFAULT_PASSWORD extended_user_credentials = {USERNAME: username, PASSWORD: password} self.global_navigation.sign_out() # Login with extended user and create project manager login(self.driver, extended_user_credentials) self.driver.wait_for_page_with_title(UI_TEST_TIMEOUT, "Dashboard") self.assertEqual("Dashboard", self.driver.get_title()) self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) self.assertEqual( 0, self.all_users_page.number_of_editable_users_for_role( 'Administrator'), 'Expected Administrators to be non-editable but was editable') self.assertEqual( 0, self.all_users_page.number_of_editable_users_for_role( 'Super Admin'), 'Expected Super Admin to be non-editable but was editable') self.add_user_page = self.all_users_page.navigate_to_add_user() self.add_user_page.select_questionnaires(2) self.add_user_page.add_user_with(new_user) self.add_user_page.get_success_message() username = fetch_(USERNAME, new_user) self.driver.go_to(ALL_USERS_URL) self.assertGreater( 1, self.all_users_page.number_of_editable_users_for_role( 'Super Admin'), 'Expected Super Admin to be non-editable but was editable') self.assertTrue( self.all_users_page.is_editable(username), '%s user was expected to be editable but was not editable') questionnaire_list_for_user = self.all_users_page.get_questionnaire_list_for( username) time.sleep(10) self.all_users_page.select_user_with_username(username) edit_user_page = self.all_users_page.select_edit_action() self.assertTrue(edit_user_page.is_user_name_is_prefetched(username)) self.assertTrue(edit_user_page.is_role_project_manager()) qre_pre_selected = edit_user_page.are_questionnaires_preselected( questionnaire_list_for_user, True) self.assertTrue(qre_pre_selected) selected_questionnaires = edit_user_page.select_questionnaires(3) edit_user_page.save_changes({ "mobile_phone": random_number(9), "full_name": 'New User Name' }) success_message = edit_user_page.get_success_message() self.assertEqual( USER_EDITED_SUCCESS_MESSAGE, success_message, 'Expected "User has been updated successfully" message but was not found' ) self.driver.go_to(ALL_USERS_URL) self.assertEqual('New User Name', self.all_users_page.get_full_name_for(username)) self.assertEqual( 3, len(selected_questionnaires), 'Expected the questionnaires length to be 3 but was %s' % len(selected_questionnaires)) @attr('functional_test') def test_should_change_a_extended_user_to_project_manager(self): user = generate_user() self._create_extended_user(user) username = fetch_(USERNAME, user) self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) self.all_users_page.select_user_with_username(username) edit_user_page = self.all_users_page.select_edit_action() self.assertTrue(edit_user_page.is_user_name_is_prefetched(username)) self.assertTrue(edit_user_page.is_role_administrator()) edit_user_page.select_role_as_project_manager() selected_questionnaires = edit_user_page.select_questionnaires(3) edit_user_page.save_changes() edit_user_page.get_success_message() self.driver.go_to(ALL_USERS_URL) questionnaire_list_for_user = self.all_users_page.get_questionnaire_list_for( username) self.assertEqual(set(questionnaire_list_for_user), set(selected_questionnaires)) role = self.all_users_page.get_role_for(username) self.assertEqual('Project Manager', role) @attr('functional_test') def test_should_change_a_project_manager_to_extended_user(self): self.create_user_and_open_it_on_edit_page(False, [2, 4]) self.assertTrue( self.edit_user_page.is_user_name_is_prefetched(self.username)) self.assertTrue(self.edit_user_page.is_role_project_manager()) self.edit_user_page.select_role_as_administrator() self.edit_user_page.save_changes() self.edit_user_page.get_success_message() self.driver.go_to(ALL_USERS_URL) self.assertEqual('Administrator', self.all_users_page.get_role_for(self.username)) questionnaire_list = self.all_users_page.get_questionnaire_list_for( self.username)[0] self.assertEqual('All', questionnaire_list) @attr('functional_test') def test_should_check_validations_while_editing_an_user(self): # Create a Project Manager user = generate_user() self._create_extended_user(user) self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) existing_mobile_number = self.all_users_page.get_mobile_number_for( user.get(USERNAME)) add_user_page = self.all_users_page.navigate_to_add_user() user = generate_user() add_user_page.select_role_as_project_manager() add_user_page.select_questionnaires(2, 4) add_user_page.add_user_with(user) add_user_page.get_success_message() username = user[USERNAME] # Edit the Project Manager self.driver.go_to(ALL_USERS_URL) self.all_users_page.select_user_with_username(username) edit_user_page = self.all_users_page.select_edit_action() updated_user_data = {NAME: ""} edit_user_page.edit_values(updated_user_data) message = edit_user_page.get_error_messages() self.assertEqual(message, u'This field is required') updated_user_data = {NAME: "Test User", MOBILE_PHONE: ""} edit_user_page.edit_values(updated_user_data) message = edit_user_page.get_error_messages() self.assertEqual(message, u'This field is required') updated_user_data = {MOBILE_PHONE: "Some text value"} edit_user_page.edit_values(updated_user_data) message = edit_user_page.get_error_messages() self.assertEqual(message, u'Invalid phone number') updated_user_data = {MOBILE_PHONE: "1234"} edit_user_page.edit_values(updated_user_data) message = edit_user_page.get_error_messages() self.assertEqual(message, u'Invalid phone number') updated_user_data = {MOBILE_PHONE: existing_mobile_number} edit_user_page.save_changes(updated_user_data) message = edit_user_page.get_error_messages() self.assertEqual( message, u'This phone number is already in use. Please supply a different phone number' ) def _create_extended_user(self, user): self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) self.add_user_page = self.all_users_page.navigate_to_add_user() self.add_user_page.select_role_as_administrator() self.add_user_page.add_user_with(user) self.add_user_page.get_success_message() def _create_project_manager(self, user): self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) self.add_user_page = self.all_users_page.navigate_to_add_user() self.add_user_page.select_role_as_project_manager() self.add_user_page.select_questionnaires(1, 0) self.add_user_page.add_user_with(user) self.add_user_page.get_success_message() @attr('functional_test') def test_should_make_sure_that_ds_permission_is_removed_in_the_same_time_as_user_permission_is_removed( self): self.driver.go_to(ALL_USERS_URL) all_users_page = AllUsersPage(self.driver) all_users_page.select_user_with_username("*****@*****.**") edit_user_page = all_users_page.select_edit_action() edit_user_page._uncheck_all_questionnaires() edit_user_page.save_changes() edit_user_page.get_success_message() response = send_sms_with(SMS_TO_TEST_PERMISSION) self.assertEqual(response, ERROR_MESSAGE) edit_user_page.select_questionnaires_by_name(["clinic test project1"]) edit_user_page.save_changes() edit_user_page.get_success_message() response = send_sms_with(SMS_TO_TEST_PERMISSION) self.assertEqual(response, SUCCESS_MESSAGE) @attr('functional_test') def test_should_show_warning_when_trying_to_leave_page_without_saving( self): self.driver.go_to(ALL_USERS_URL) all_users_page = AllUsersPage(self.driver) all_users_page.select_user_with_username("*****@*****.**") edit_user_page = all_users_page.select_edit_action() edit_user_page.select_role_as_administrator() self.edit_user_page.switch_language("en") expected_msg = """You have made changes to the form. These changes will be lost if you navigate away from this page.\n\nAre you sure you want to proceed?""" alert_msg = self.edit_user_page.get_warning_dialog_message() self.assertEqual(alert_msg, expected_msg)
class TestAllUsers(HeadlessRunnerTest): def setUp(self): self.global_navigation = login(self.driver, VALID_CREDENTIALS) self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) def tearDown(self): self.global_navigation.sign_out() @attr('functional_test') def test_should_not_show_delete_if_any_users_selected(self): self.all_users_page.click_check_all_users(check=False) self.all_users_page.click_action_button() self.assertFalse(self.all_users_page.actions_menu_shown()) @attr('functional_test') def test_should_not_delete_super_admin_user(self): self.assertFalse(self.all_users_page.is_editable('*****@*****.**')) @attr('functional_test') def test_should_create_activity_log_and_submit_data(self): add_user_page = self.all_users_page.navigate_to_add_user() user_data = generate_user() add_user_page.select_role_as_administrator() add_user_page.add_user_with(user_data) add_user_page.get_success_message() self.global_navigation.sign_out() new_user_credential = {USERNAME: user_data[USERNAME], PASSWORD: "******"} self.global_navigation = login(self.driver, new_user_credential) self.driver.go_to(DATA_WINNER_ALL_PROJECTS_PAGE) project_name, questionnaire_code = self.create_project() self.send_submission(user_data[MOBILE_PHONE], questionnaire_code) self.delete_user(user_data[USERNAME]) self.check_sent_submission(project_name) self.check_deleted_user_name_on_activity_log_page(project_name) self.global_navigation.sign_out() self.global_navigation = login(self.driver, VALID_CREDENTIALS) @attr('functional_test') def test_should_update_user_name_when_edited_from_datasender_page(self): add_user_page = self.all_users_page.navigate_to_add_user() add_user_page.select_role_as_administrator() add_user_page.add_user_with(EDIT_USER_DATA) add_user_page.get_success_message() self.driver.go_to(DATA_WINNER_ALL_DATA_SENDERS_PAGE) all_datasenders_page = AllDataSendersPage(self.driver) all_datasenders_page.search_with(EDIT_USER_DATA.get('username')) self.driver.find(all_datasenders_page.get_checkbox_selector_for_datasender_row(1)).click() all_datasenders_page.select_edit_action() EDIT_DETAILS = {"name": "New testUser", "mobile_number": EDIT_USER_DATA.get("mobile_phone"), "commune": "Madagascar", "gps": "-21.7622088847 48.0690991394"} AddDataSenderPage(self.driver).enter_data_sender_details_from(EDIT_DETAILS).navigate_to_datasender_page() self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) user_name = self.all_users_page.get_full_name_for(EDIT_USER_DATA.get("username")) self.assertEquals(EDIT_DETAILS.get("name"), user_name) def send_submission(self, mobile_number, questionnaire_code): client = Client() valid_sms = {"from_msisdn": mobile_number, "to_msisdn": '919880734937', MESSAGE: "%s 10.10.2010" % questionnaire_code, "message_id": uuid.uuid1().hex} resp = client.post('/submission', valid_sms) self.assertIn("Thank you", resp.content) def create_project(self): dashboard_page = DashboardPage(self.driver) create_project_page = dashboard_page.navigate_to_create_project_page() create_project_page = create_project_page.select_blank_questionnaire_creation_option() create_project_page.create_questionnaire_with(VALID_SUMMARY_REPORT_DATA, QUESTIONNAIRE_DATA) overview_page = create_project_page.save_and_create_project_successfully() questionnaire_code = overview_page.get_questionnaire_code() project_name = overview_page.get_project_title() return project_name, questionnaire_code def delete_user(self, username): self.global_navigation.sign_out() login(self.driver, VALID_CREDENTIALS) self.driver.go_to(ALL_USERS_URL) all_users_page = AllUsersPage(self.driver) self.driver.find(by_xpath("//td[contains(.,'%s')]/../td/input" % username)).click() all_users_page.select_delete_action(confirm=True) self.driver.wait_for_element(UI_TEST_TIMEOUT, by_css("span.loading"), True) self.driver.wait_until_modal_dismissed() message = all_users_page.get_message() self.assertEqual(message, SUCCESSFULLY_DELETED_USER_MSG) def check_sent_submission(self, project_name): all_data_page = self.global_navigation.navigate_to_all_data_page() data_analysis_page = all_data_page.navigate_to_data_analysis_page(project_name) data_sender_name = data_analysis_page.get_all_data_on_nth_row(1)[1] self.assertTrue("Mino" in data_sender_name) def check_deleted_user_name_on_activity_log_page(self, project_name): self.driver.go_to(DATA_WINNER_USER_ACTIVITY_LOG_PAGE) username = self.driver.find(by_xpath("//td[contains(.,'%s')]/../td[1]" % project_name)).text action = self.driver.find(by_xpath("//td[contains(.,'%s')]/../td[2]" % project_name)).text self.assertEqual("Deleted User", username) self.assertEqual("Created Questionnaire", action) @attr('functional_test') def test_should_check_if_org_settings_is_restricted_to_extended_user(self): add_user_page = self.all_users_page.navigate_to_add_user() add_user_page.select_role_as_administrator() user_data = generate_user() add_user_page.add_user_with(user_data) add_user_page.get_success_message() self.global_navigation.sign_out() new_user_credential = {USERNAME: user_data[USERNAME], PASSWORD: "******"} login(self.driver, new_user_credential) self.driver.go_to(ORG_SETTINGS_URL) title = self.driver.get_title() self.assertEqual(title, ACCESS_DENIED_TITLE) @attr('functional_test') def test_should_check_if_account_settings_is_restricted_to_project_manager(self): add_user_page = self.all_users_page.navigate_to_add_user() add_user_page.select_role_as_project_manager() add_user_page.select_questionnaires(2) new_user_data = generate_user() add_user_page.add_user_with(new_user_data) add_user_page.get_success_message() self.global_navigation.sign_out() new_user_credential = {USERNAME: new_user_data[USERNAME], PASSWORD: "******"} login(self.driver, new_user_credential) self.driver.go_to(ORG_SETTINGS_URL) title = self.driver.get_title() self.assertEqual(title, ACCESS_DENIED_TITLE) self.driver.go_to(ALL_USERS_URL) title = self.driver.get_title() self.assertEqual(title, ACCESS_DENIED_TITLE)
class TestEditUser(HeadlessRunnerTest): @attr('functional_test') def test_should_edit_an_extended_user_as_ngo_admin(self): self.global_navigation = login(self.driver, VALID_CREDENTIALS) self.driver.go_to(ALL_USERS_URL) all_users_page = AllUsersPage(self.driver) add_user_page = all_users_page.navigate_to_add_user() user = generate_user() add_user_page.select_role_as_administrator() add_user_page.add_user_with(user) message = add_user_page.get_success_message() username = fetch_(USERNAME, user) self.driver.go_to(ALL_USERS_URL) all_users_page.select_user_with_username(username) edit_user_page = all_users_page.select_edit_action() self.assertTrue(edit_user_page.is_user_name_is_prefetched(username)) self.assertTrue(edit_user_page.is_role_administrator()) edit_user_page.save_changes({"mobile_phone": random_number(9)}) success_message = edit_user_page.get_success_message() self.assertEqual( USER_EDITED_SUCCESS_MESSAGE, success_message, 'Expected "User has been updated successfully" message but was not found' ) self.global_navigation.sign_out() @attr('functional_test') def test_should_edit_a_project_manager_as_ngo_admin(self): self.global_navigation = login(self.driver, VALID_CREDENTIALS) self.driver.go_to(ALL_USERS_URL) all_users_page = AllUsersPage(self.driver) add_user_page = all_users_page.navigate_to_add_user() user = generate_user() add_user_page.select_role_as_project_manager() add_user_page.select_questionnaires(2, 4) add_user_page.add_user_with(user) add_user_page.get_success_message() username = fetch_(USERNAME, user) self.driver.go_to(ALL_USERS_URL) questionnaire_list_for_user = all_users_page.get_questionnaire_list_for( username) all_users_page.select_user_with_username(username) edit_user_page = all_users_page.select_edit_action() self.assertTrue(edit_user_page.is_user_name_is_prefetched(username)) self.assertTrue(edit_user_page.is_role_project_manager()) self.assertTrue( edit_user_page.are_questionnaires_preselected( questionnaire_list_for_user)) selected_questionnaires = edit_user_page.select_questionnaires(3) edit_user_page.save_changes({ "mobile_phone": random_number(9), "full_name": 'New User Name' }) success_message = edit_user_page.get_success_message() self.assertEqual( USER_EDITED_SUCCESS_MESSAGE, success_message, 'Expected "User has been updated successfully" message but was not found' ) self.driver.go_to(ALL_USERS_URL) self.assertEqual('New User Name', all_users_page.get_full_name_for(username)) self.assertEqual( 3, len(selected_questionnaires), 'Expected the questionnaires length to be 3 but was %s' % len(selected_questionnaires)) self.global_navigation.sign_out() @attr('functional_test') def test_should_edit_a_project_manager_as_extended_user(self): user = generate_user() new_user = generate_user() # create extended user self._create_extended_user(user) username = fetch_(USERNAME, user) password = DEFAULT_PASSWORD extended_user_credentials = {USERNAME: username, PASSWORD: password} self.global_navigation.sign_out() # Login with extended user and create project manager login(self.driver, extended_user_credentials) self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) self.assertEqual( 0, self.all_users_page.number_of_editable_users_for_role( 'Administrator'), 'Expected Administrators to be non-editable but was editable') self.assertEqual( 0, self.all_users_page.number_of_editable_users_for_role( 'Super Admin'), 'Expected Super Admin to be non-editable but was editable') self.add_user_page = self.all_users_page.navigate_to_add_user() self.add_user_page.select_questionnaires(2) self.add_user_page.add_user_with(new_user) self.add_user_page.get_success_message() username = fetch_(USERNAME, new_user) self.driver.go_to(ALL_USERS_URL) self.assertGreater( 1, self.all_users_page.number_of_editable_users_for_role( 'Super Admin'), 'Expected Super Admin to be non-editable but was editable') self.assertTrue( self.all_users_page.is_editable(username), '%s user was expected to be editable but was not editable') questionnaire_list_for_user = self.all_users_page.get_questionnaire_list_for( username) self.all_users_page.select_user_with_username(username) edit_user_page = self.all_users_page.select_edit_action() self.assertTrue(edit_user_page.is_user_name_is_prefetched(username)) self.assertTrue(edit_user_page.is_role_project_manager()) self.assertTrue( edit_user_page.are_questionnaires_preselected( questionnaire_list_for_user)) selected_questionnaires = edit_user_page.select_questionnaires(3) edit_user_page.save_changes({ "mobile_phone": random_number(9), "full_name": 'New User Name' }) success_message = edit_user_page.get_success_message() self.assertEqual( USER_EDITED_SUCCESS_MESSAGE, success_message, 'Expected "User has been updated successfully" message but was not found' ) self.driver.go_to(ALL_USERS_URL) self.assertEqual('New User Name', self.all_users_page.get_full_name_for(username)) self.assertEqual( 3, len(selected_questionnaires), 'Expected the questionnaires length to be 3 but was %s' % len(selected_questionnaires)) self.global_navigation.sign_out() @attr('functional_test') def test_should_change_a_extended_user_to_project_manager(self): user = generate_user() self._create_extended_user(user) username = fetch_(USERNAME, user) self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) self.assertTrue( self.all_users_page.is_editable(username), '%s user was expected to be editable but was not editable') self.all_users_page.select_user_with_username(username) edit_user_page = self.all_users_page.select_edit_action() self.assertTrue(edit_user_page.is_user_name_is_prefetched(username)) self.assertTrue(edit_user_page.is_role_administrator()) edit_user_page.select_role_as_project_manager() selected_questionnaires = edit_user_page.select_questionnaires(3) edit_user_page.save_changes() edit_user_page.get_success_message() self.driver.go_to(ALL_USERS_URL) questionnaire_list_for_user = self.all_users_page.get_questionnaire_list_for( username) self.assertEqual(set(questionnaire_list_for_user), set(selected_questionnaires)) self.assertEqual('Project Manager', self.all_users_page.get_role_for(username)) self.global_navigation.sign_out() @attr('functional_test') def test_should_change_a_project_manager_to_extended_user(self): self.global_navigation = login(self.driver, VALID_CREDENTIALS) self.driver.go_to(ALL_USERS_URL) all_users_page = AllUsersPage(self.driver) add_user_page = all_users_page.navigate_to_add_user() user = generate_user() add_user_page.select_role_as_project_manager() add_user_page.select_questionnaires(2, 4) add_user_page.add_user_with(user) message = add_user_page.get_success_message() self.assertEqual(message, ADDED_USER_SUCCESS_MSG) self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) username = fetch_(USERNAME, user) self.assertTrue( self.all_users_page.is_editable(username), '%s user was expected to be editable but was not editable') self.all_users_page.select_user_with_username(username) edit_user_page = self.all_users_page.select_edit_action() self.assertTrue(edit_user_page.is_user_name_is_prefetched(username)) self.assertTrue(edit_user_page.is_role_project_manager()) edit_user_page.select_role_as_administrator() edit_user_page.save_changes() edit_user_page.get_success_message() self.driver.go_to(ALL_USERS_URL) self.assertEqual('Administrator', self.all_users_page.get_role_for(username)) self.assertEqual( 'All', self.all_users_page.get_questionnaire_list_for(username)[0]) self.global_navigation.sign_out() @attr('functional_test') def test_should_check_validations_while_editing_an_user(self): # Create a Project Manager user = generate_user() self._create_extended_user(user) self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) existing_mobile_number = self.all_users_page.get_mobile_number_for( user.get(USERNAME)) add_user_page = self.all_users_page.navigate_to_add_user() user = generate_user() add_user_page.select_role_as_project_manager() add_user_page.select_questionnaires(2, 4) add_user_page.add_user_with(user) add_user_page.get_success_message() username = user[USERNAME] # Edit the Project Manager self.driver.go_to(ALL_USERS_URL) self.all_users_page.select_user_with_username(username) edit_user_page = self.all_users_page.select_edit_action() updated_user_data = {NAME: ""} edit_user_page.edit_values(updated_user_data) message = edit_user_page.get_error_messages() self.assertEqual(message, u'This field is required') updated_user_data = {NAME: "Test User", MOBILE_PHONE: ""} edit_user_page.edit_values(updated_user_data) message = edit_user_page.get_error_messages() self.assertEqual(message, u'This field is required') updated_user_data = {MOBILE_PHONE: "Some text value"} edit_user_page.edit_values(updated_user_data) message = edit_user_page.get_error_messages() self.assertEqual(message, u'Invalid phone number') updated_user_data = {MOBILE_PHONE: "1234"} edit_user_page.edit_values(updated_user_data) message = edit_user_page.get_error_messages() self.assertEqual(message, u'Invalid phone number') updated_user_data = {MOBILE_PHONE: existing_mobile_number} edit_user_page.save_changes(updated_user_data) message = edit_user_page.get_error_messages() self.assertEqual( message, u'This phone number is already in use. Please supply a different phone number' ) self.global_navigation.sign_out() edit_user_page.confirm_leave_page() def _create_extended_user(self, user): self.global_navigation = login(self.driver, VALID_CREDENTIALS) self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) self.add_user_page = self.all_users_page.navigate_to_add_user() self.add_user_page.select_role_as_administrator() self.add_user_page.add_user_with(user) self.add_user_page.get_success_message() def _create_project_manager(self, user): self.global_navigation = login(self.driver, VALID_CREDENTIALS) self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) self.add_user_page = self.all_users_page.navigate_to_add_user() self.add_user_page.select_role_as_project_manager() self.add_user_page.select_questionnaires(1, 0) self.add_user_page.add_user_with(user) self.add_user_page.get_success_message() @attr('functional_test') def test_should_make_sure_that_ds_permission_is_removed_in_the_same_time_as_user_permission_is_removed( self): self.global_navigation = login(self.driver, VALID_CREDENTIALS) self.driver.go_to(ALL_USERS_URL) all_users_page = AllUsersPage(self.driver) all_users_page.select_user_with_username("*****@*****.**") edit_user_page = all_users_page.select_edit_action() edit_user_page._uncheck_all_questionnaires() edit_user_page.save_changes() edit_user_page.get_success_message() response = send_sms_with(SMS_TO_TEST_PERMISSION) self.assertEqual(response, ERROR_MESSAGE) edit_user_page.select_questionnaires_by_name(["clinic test project1"]) edit_user_page.save_changes() edit_user_page.get_success_message() response = send_sms_with(SMS_TO_TEST_PERMISSION) self.assertEqual(response, SUCCESS_MESSAGE) @attr('functional_test') @unittest.skip('Failed only in jenkins - Temporarily skipping') def test_should_show_warning_when_trying_to_leave_page_without_saving( self): self.global_navigation = login(self.driver, VALID_CREDENTIALS) self.driver.go_to(ALL_USERS_URL) all_users_page = AllUsersPage(self.driver) all_users_page.select_user_with_username("*****@*****.**") edit_user_page = all_users_page.select_edit_action() edit_user_page.select_role_as_administrator() self.driver.refresh() expected_msg = u'This page is asking you to confirm that you want to leave - data you have entered may not be saved.' alert = self.driver.switch_to_alert() self.assertEqual(alert.text, expected_msg)
def setUp(self): self.global_navigation = login(self.driver, VALID_CREDENTIALS) self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) self.add_user_page = self.all_users_page.navigate_to_add_user()
class TestAllUsers(HeadlessRunnerTest): def setUp(self): self.global_navigation = login(self.driver, VALID_CREDENTIALS) self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) def tearDown(self): self.global_navigation.sign_out() @attr('functional_test') def test_should_not_show_delete_if_any_users_selected(self): self.all_users_page.click_check_all_users(check=False) self.all_users_page.click_action_button() self.assertFalse(self.all_users_page.actions_menu_shown()) @attr('functional_test') def test_should_not_delete_super_admin_user(self): self.all_users_page.click_check_all_users() self.all_users_page.select_delete_action(confirm=True) message = self.all_users_page.get_message() self.assertEqual(message, ADMIN_CANT_BE_DELETED) @attr('functional_test') def test_should_create_activity_log_and_submit_data(self): add_user_page = self.all_users_page.navigate_to_add_user() add_user_page.add_user_with(NEW_USER_DATA) self.driver.go_to(LOGOUT) new_user_credential = { USERNAME: NEW_USER_DATA[USERNAME], PASSWORD: "******" } login(self.driver, new_user_credential) self.driver.go_to(DATA_WINNER_ALL_PROJECTS_PAGE) project_name, questionnaire_code = self.create_project() self.send_submission(questionnaire_code) self.delete_user(NEW_USER_DATA[USERNAME]) self.check_sent_submission(project_name) self.check_deleted_user_name_on_activity_log_page(project_name) @attr('functional_test') def test_should_update_user_name_when_edited_from_datasender_page(self): add_user_page = self.all_users_page.navigate_to_add_user() add_user_page.add_user_with(EDIT_USER_DATA) self.driver.go_to(DATA_WINNER_ALL_DATA_SENDERS_PAGE) all_datasenders_page = AllDataSendersPage(self.driver) all_datasenders_page.search_with(EDIT_USER_DATA.get('username')) self.driver.find( all_datasenders_page.get_checkbox_selector_for_datasender_row( 1)).click() all_datasenders_page.select_edit_action() EDIT_DETAILS = { "name": "New testUser", "mobile_number": EDIT_USER_DATA.get("mobile_phone"), "commune": "Madagascar", "gps": "-21.7622088847 48.0690991394" } AddDataSenderPage(self.driver).enter_data_sender_details_from( EDIT_DETAILS).navigate_to_datasender_page() self.driver.go_to(ALL_USERS_URL) self.all_users_page = AllUsersPage(self.driver) element = self.driver.find( by_xpath(NAME_COLUMN % EDIT_USER_DATA.get("username"))) self.assertEquals(EDIT_DETAILS.get("name"), element.text) def send_submission(self, questionnaire_code): self.driver.execute_script("window.open('%s')" % DATA_WINNER_SMS_TESTER_PAGE) new_tab = self.driver.window_handles[1] first_tab = self.driver.window_handles[0] self.driver.switch_to_window(new_tab) sms_tester_page = SMSTesterPage(self.driver) valid_sms = { SENDER: NEW_USER_DATA[MOBILE_PHONE], RECEIVER: '919880734937', SMS: "%s 10.10.2010" % questionnaire_code } sms_tester_page.send_sms_with(valid_sms) response = sms_tester_page.get_response_message() self.assertIn("Thank you", response) # self.assertRegexpMatches(response, THANKS % "Mamy") self.driver.close() self.driver.switch_to_window(first_tab) def create_project(self): dashboard_page = DashboardPage(self.driver) create_project_page = dashboard_page.navigate_to_create_project_page() create_project_page = create_project_page.select_blank_questionnaire_creation_option( ) create_project_page.create_questionnaire_with( VALID_SUMMARY_REPORT_DATA, QUESTIONNAIRE_DATA) overview_page = create_project_page.save_and_create_project_successfully( ) questionnaire_code = overview_page.get_questionnaire_code() project_name = overview_page.get_project_title() return project_name, questionnaire_code def delete_user(self, username): self.driver.go_to(LOGOUT) login(self.driver, VALID_CREDENTIALS) self.driver.go_to(ALL_USERS_URL) all_users_page = AllUsersPage(self.driver) self.driver.find( by_xpath("//td[contains(.,'%s')]/../td/input" % username)).click() all_users_page.select_delete_action(confirm=True) self.driver.wait_for_element(UI_TEST_TIMEOUT, by_css("span.loading"), True) self.driver.wait_until_modal_dismissed() message = all_users_page.get_message() self.assertEqual(message, SUCCESSFULLY_DELETED_USER_MSG) def check_sent_submission(self, project_name): all_data_page = self.global_navigation.navigate_to_all_data_page() data_analysis_page = all_data_page.navigate_to_data_analysis_page( project_name) data_sender_name = data_analysis_page.get_all_data_on_nth_row(1)[1] self.assertTrue("kimi" in data_sender_name) def check_deleted_user_name_on_activity_log_page(self, project_name): self.driver.go_to(DATA_WINNER_USER_ACTIVITY_LOG_PAGE) username = self.driver.find( by_xpath("//td[contains(.,'%s')]/../td[1]" % project_name)).text action = self.driver.find( by_xpath("//td[contains(.,'%s')]/../td[2]" % project_name)).text self.assertEqual("Deleted User", username) self.assertEqual("Created Project", action)