def test_successful_subject_registration(self): """ Function to test the successful addition of a subject from "My Subjects" page with given details e.g. First Name, Last Name, Location, GPS, Mobile Number """ self.driver.go_to(DATA_WINNER_LOGIN_PAGE) login_page = LoginPage(self.driver) login_page.do_successful_login_with(VALID_CREDENTIALS) dashboard_page = DashboardPage(self.driver) # going on setup project page create_project_page = dashboard_page.navigate_to_create_project_page() create_project_page.create_project_with(VALID_PROJECT_DATA) create_project_page.continue_create_project() project_overview_page = create_project_page.save_and_create_project_successfully( ) self.driver.wait_for_page_with_title( 15, fetch_(PAGE_TITLE, from_(VALID_PROJECT_DATA))) self.assertEqual(self.driver.get_title(), fetch_(PAGE_TITLE, from_(VALID_PROJECT_DATA))) project_subject_page = project_overview_page.navigate_to_subjects_page( ) project_subject_registration_page = project_subject_page.click_register_subject( ) project_subject_registration_page.add_subject_with( VALID_SUBJECT_REGISTRATION_DATA) project_subject_registration_page.submit_subject() success_message = project_subject_registration_page.get_flash_message() self.assertRegexpMatches( success_message, fetch_(SUCCESS_MSG, from_(VALID_SUBJECT_REGISTRATION_DATA)))
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 prerequisites_of_create_project(self): # doing successful login with valid credentials self.driver.go_to(DATA_WINNER_LOGIN_PAGE) login_page = LoginPage(self.driver) login_page.do_successful_login_with(VALID_CREDENTIALS) dashboard_page = DashboardPage(self.driver) # going on setup project page return dashboard_page.navigate_to_create_project_page()
def create_project(self): dashboard_page = DashboardPage(self.driver) create_project_page = dashboard_page.navigate_to_create_project_page() create_project_page.create_project_with(VALID_SUMMARY_REPORT_DATA) create_project_page.continue_create_project() create_project_page.save_and_create_project() overview_page = ProjectOverviewPage(self.driver) questionnaire_code = overview_page.get_questionnaire_code() project_name = overview_page.get_project_title() return project_name, questionnaire_code
def create_project(self): self.driver.go_to(DATA_WINNER_DASHBOARD_PAGE) dashboard_page = DashboardPage(self.driver) create_project_page = dashboard_page.navigate_to_create_project_page() create_project_page.create_project_with(VALID_PROJECT_DATA) create_project_page.continue_create_project() create_questionnaire_page = CreateQuestionnairePage(self.driver) self.form_code = create_questionnaire_page.get_questionnaire_code() create_questionnaire_page.add_question(QUESTION) create_questionnaire_page.save_and_create_project_successfully()
def create_project(cls): cls.driver.go_to(DATA_WINNER_DASHBOARD_PAGE) dashboard_page = DashboardPage(cls.driver) questionnaire_creation_options_page = dashboard_page.navigate_to_create_project_page() # VALID_PROJECT_DATA[SUBJECT] = cls.subject_type create_questionnaire_page = questionnaire_creation_options_page.select_blank_questionnaire_creation_option() create_questionnaire_page.create_questionnaire_with(VALID_PROJECT_DATA, QUESTIONNAIRE_DATA) cls.form_code = create_questionnaire_page.get_questionnaire_code() create_questionnaire_page.save_and_create_project_successfully() cls.driver.wait_for_page_with_title(15, fetch_(PAGE_TITLE, from_(VALID_PROJECT_DATA)))
def test_trial_account_should_see_reminder_not_work_message_at_reminder_tab_in_active_project(self): email = add_trial_organization_and_login(self.driver) createquestionnairepage = DashboardPage(self.driver).navigate_to_create_project_page()\ .select_blank_questionnaire_creation_option() project_page = createquestionnairepage.create_questionnaire_with(COPY_PROJECT_DATA, QUESTIONNAIRE_DATA)\ .save_and_create_project_successfully() project_title = project_page.get_project_title() self.driver.go_to(LOGOUT) reminder_settings = self.go_to_reminder_page(project_title, {USERNAME: email, PASSWORD: REGISTRATION_PASSWORD}) self.assertEqual(DISABLED_REMINDER[WARNING_MESSAGE], reminder_settings.get_warning_message()) reminder_settings.click_sent_reminder_tab() self.assertEqual(fetch_(WARNING_MESSAGE, from_(DISABLED_REMINDER)), reminder_settings.get_warning_message())
def prerequisites_of_create_questionnaire(self, project_data=VALID_DATA2): # doing successful login with valid credentials self.driver.go_to(DATA_WINNER_LOGIN_PAGE) login_page = LoginPage(self.driver) login_page.do_successful_login_with(VALID_CREDENTIALS) dashboard_page = DashboardPage(self.driver) # going on setup project page create_project_page = dashboard_page.navigate_to_create_project_page() #Navigating to Create Questionnaire Page by successfully creating a Project create_project_page.create_project_with(project_data) create_project_page.continue_create_project() return CreateQuestionnairePage(self.driver)
def _create_project(self, project_data, monthly): self.driver.go_to(DATA_WINNER_DASHBOARD_PAGE) self.dashboard_page = DashboardPage(self.driver) create_project_page = self.dashboard_page.navigate_to_create_project_page( ) create_project_page.create_project_with(project_data) create_project_page.continue_create_project() if monthly: create_questionnaire_page = CreateQuestionnairePage(self.driver) create_questionnaire_page.select_question_link(2) create_questionnaire_page.change_date_type_question( date_format=MM_YYYY) create_project_page.save_and_create_project_successfully()
def create_project(cls): cls.driver.go_to(DATA_WINNER_DASHBOARD_PAGE) dashboard_page = DashboardPage(cls.driver) create_project_page = dashboard_page.navigate_to_create_project_page() VALID_PROJECT_DATA[SUBJECT] = cls.subject_type create_project_page.create_project_with(VALID_PROJECT_DATA) create_project_page.continue_create_project() create_questionnaire_page = CreateQuestionnairePage(cls.driver) cls.form_code = create_questionnaire_page.get_questionnaire_code() create_questionnaire_page.add_question(QUESTION) create_questionnaire_page.save_and_create_project_successfully() cls.driver.wait_for_page_with_title( 15, fetch_(PAGE_TITLE, from_(VALID_PROJECT_DATA)))
def navigate_to_dashboard_page(self): """ Function to navigate to dashboard page of the website Return dashboard page """ self.driver.find(DASHBOARD_PAGE_LINK).click() return DashboardPage(self.driver)
def test_should_check_if_deleted_questionnaires_and_poll_not_be_in_questionnaires_list( self): self.driver.go_to(LOGOUT) self.driver.go_to(DATA_WINNER_LOGIN_PAGE) login_page = LoginPage(self.driver) login_page.do_successful_login_with(USER_RASITEFA_CREDENTIALS) self.driver.go_to(DATA_WINNER_DASHBOARD_PAGE) dashboard_page = DashboardPage(self.driver) self.assertEqual(len(dashboard_page.get_projects_list()), 3) create_questionnaire_options_page = dashboard_page.navigate_to_create_project_page( ) create_questionnaire_page = create_questionnaire_options_page.select_blank_questionnaire_creation_option( ) create_questionnaire_page.create_questionnaire_with( NEW_PROJECT, QUESTIONNAIRE_DATA) global_navigation = GlobalNavigationPage(self.driver) project_overview_page = create_questionnaire_page.save_and_create_project_successfully( ) project_name = project_overview_page.get_project_title() all_projects_page = global_navigation.navigate_to_view_all_project_page( ) all_projects_page.delete_project(project_name) self.driver.go_to(DATA_WINNER_DASHBOARD_PAGE) dashboard_page = DashboardPage(self.driver) all_projects_page = ProjectsPage(self.driver) self.assertEqual(len(dashboard_page.get_projects_list()), 3) self.assertFalse(all_projects_page.is_project_present(project_name)) self.global_navigation.sign_out()
def _create_project(cls): cls.dashboard_page = DashboardPage(cls.driver) create_project_page = cls.dashboard_page.navigate_to_create_project_page( ) create_project_page.create_project_with(WATERPOINT_PROJECT_DATA) create_project_page.continue_create_project() CreateQuestionnairePage(cls.driver).create_questionnaire_with( WATERPOINT_QUESTIONNAIRE_DATA) return create_project_page.save_and_create_project_successfully()
def navigate_to_dashboard_page(self): """ Function to navigate to dashboard page of the website Return dashboard page """ self.driver.find(DASHBOARD_PAGE_LINK).click() self.driver.wait_for_page_with_title(UI_TEST_TIMEOUT, "Dashboard") return DashboardPage(self.driver)
def _create_project(cls): cls.dashboard_page = DashboardPage(cls.driver) cls.driver.create_screenshot("debug-ft-before-click-create-qre") create_questionnaire_options_page = cls.dashboard_page.navigate_to_create_project_page( ) create_questionnaire_page = create_questionnaire_options_page.select_blank_questionnaire_creation_option( ) create_questionnaire_page.create_questionnaire_with( WATERPOINT_PROJECT_DATA, WATERPOINT_QUESTIONNAIRE_DATA) return create_questionnaire_page.save_and_create_project_successfully()
def navigate_to_dashboard_page(self): """ Function to navigate to dashboard page of the website Return dashboard page """ self.driver.wait_for_element(UI_TEST_TIMEOUT, DASHBOARD_PAGE_LINK, True) self.driver.find(DASHBOARD_PAGE_LINK).click() return DashboardPage(self.driver)
def do_successful_login_with(self, login_credential): """ Function to login into the website with valid credentials Args: 'login_credential' is valid login credentials of the user Return DashboardPage on successful login """ self.driver.find_text_box(EMAIL_TB).enter_text( fetch_(USERNAME, from_(login_credential))) self.driver.find_text_box(PASSWORD_TB).enter_text( fetch_(PASSWORD, from_(login_credential))) self.driver.find(LOGIN_BTN).click() return DashboardPage(self.driver)
def navigate_to_dashboard_page(self): """ Function to navigate to dashboard page of the website Return dashboard page """ self.driver.wait_for_element(UI_TEST_TIMEOUT, DASHBOARD_PAGE_LINK, True) self.driver.find(DASHBOARD_PAGE_LINK).click() try: self.driver.wait_for_page_with_title(UI_TEST_TIMEOUT, "Dashboard") except Exception as e: self.driver.create_screenshot( "debug-ft-navigate-to-dashboard-fails") raise e return DashboardPage(self.driver)
def login(self, credential=VALID_CREDENTIALS): # doing successful login with valid credentials self.driver.go_to(DATA_WINNER_LOGIN_PAGE) login_page = LoginPage(self.driver) login_page.do_successful_login_with(credential) return DashboardPage(self.driver)
def login_with(self, credential): self.driver.go_to(DATA_WINNER_LOGIN_PAGE) login_page = LoginPage(self.driver) login_page.do_successful_login_with(credential) return DashboardPage(self.driver)
class TestSubmissionLog(HeadlessRunnerTest): @classmethod def setUpClass(cls): HeadlessRunnerTest.setUpClass() cls.dashboard = login(cls.driver) cls.reporting_period_project_name = None cls.URL = None def _create_project(self, project_data, questionnaire_data, monthly): self.driver.go_to(DATA_WINNER_DASHBOARD_PAGE) self.dashboard_page = DashboardPage(self.driver) create_questionnaire_options_page = self.dashboard_page.navigate_to_create_project_page( ) create_questionnaire_page = create_questionnaire_options_page.select_blank_questionnaire_creation_option( ) create_questionnaire_page.create_questionnaire_with( project_data, questionnaire_data) if monthly: create_questionnaire_page.select_question_link(1) create_questionnaire_page.change_date_type_question( date_format=MM_YYYY) create_questionnaire_page.save_and_create_project_successfully() def populate_data_for_date_range_filters( self, project_data=NEW_PROJECT_DATA, questionnaire_data=DATE_PROJECT_QUESTIONNAIRE_DATA, monthly=False): self._create_project(project_data, questionnaire_data, monthly) project_name, questionnaire_code = self._get_project_details() self.driver.go_to(DATA_WINNER_ALL_DATA_SENDERS_PAGE) all_datasenders_page = AllDataSendersPage(self.driver) all_datasenders_page.associate_datasender_to_projects( "rep8", [project_name.lower()]) self._submit_sms_data(questionnaire_code, monthly=monthly) return project_name def _get_project_details(self): overview_page = ProjectOverviewPage(self.driver) return overview_page.get_project_title( ), overview_page.get_questionnaire_code() @classmethod def _submit_sms_data(cls, questionnaire_code, monthly): dates = get_reporting_date_values(monthly) for i in dates: send_valid_sms_with( get_sms_data_with_questionnaire_code(questionnaire_code, i)) def get_first_project_submission_log_page(self): if self.URL: self.driver.go_to(self.URL) submission_log_page = SubmissionLogPage(self.driver) else: submission_log_page = self.go_to_submission_log_page() if not self.URL: self.URL = self.driver.current_url return submission_log_page @classmethod def go_to_submission_log_page(cls, project_name=FIRST_PROJECT_NAME): cls.driver.go_to(ALL_DATA_PAGE) submission_log_page = AllDataPage( cls.driver).navigate_to_submission_log_page(project_name) return submission_log_page def assert_none_selected_shown(self, submission_log_page): self.assertTrue(submission_log_page.is_none_selected_shown()) self.assertFalse(submission_log_page.actions_menu_shown()) def assert_action_menu_shown_for(self, submission_log_page): self.assertTrue(submission_log_page.actions_menu_shown()) self.assertFalse(submission_log_page.is_none_selected_shown()) def register_datasender(self, datasender_details, all_datasenders_page, id=None): add_data_sender_page = all_datasenders_page.navigate_to_add_a_data_sender_page( ) add_data_sender_page.enter_data_sender_details_from(datasender_details, unique_id=id) return add_data_sender_page.get_registered_datasender_id( ) if id is None else id @attr("functional_test") def test_should_update_submission_log_when_DS_info_is_edited(self): all_project_page = self.dashboard.navigate_to_view_all_project_page() project_overview_page = all_project_page.navigate_to_project_overview_page( "clinic test project1") my_data_sender_page = project_overview_page.navigate_to_datasenders_page( ) add_ds_page = my_data_sender_page.navigate_to_add_a_data_sender_page() add_ds_page.enter_data_sender_details_from(DATASENDER_DETAILS) ds_id = add_ds_page.get_registered_datasender_id() send_valid_sms_with(VALID_DATA) submission_log_page = self.get_first_project_submission_log_page() submission_log_page.search(ds_id) self.assertTrue(DATASENDER_DETAILS[NAME] in submission_log_page.get_cell_value(row=1, column=2)) self.driver.go_to(DATA_WINNER_ALL_DATA_SENDERS_PAGE) all_datasenders_page = AllDataSendersPage(self.driver) all_datasenders_page.search_with(ds_id) all_datasenders_page.wait_for_table_to_load() all_datasenders_page.select_a_data_sender_by_id(ds_id) all_datasenders_page.select_edit_action() AddDataSenderPage(self.driver).enter_data_sender_details_from( EDITED_DATASENDER_DETAILS) submission_log_page = self.get_first_project_submission_log_page() submission_log_page.search(ds_id) self.assertTrue(EDITED_DATASENDER_DETAILS[NAME] in submission_log_page.get_cell_value(row=1, column=2)) @attr("functional_test") def test_should_update_submission_log_when_subject_info_is_edited(self): self.driver.go_to(url("/entity/subject/create/clinic/?web_view=True&")) add_subject_page = AddSubjectPage(self.driver) add_subject_page.add_subject_with(VALID_DATA_FOR_SUBJECT) add_subject_page.submit_subject() message = fetch_(SUCCESS_MESSAGE, from_(VALID_DATA_FOR_SUBJECT)) flash_message = add_subject_page.get_flash_message() subject_short_code = get_subject_short_code(flash_message) message = message % subject_short_code self.assertIn(message, flash_message) VALID_SMS_FOR_EDIT_SUBJECT[SMS] = VALID_SMS_FOR_EDIT_SUBJECT[ SMS].replace('short_code', subject_short_code, 1) send_valid_sms_with(VALID_SMS_FOR_EDIT_SUBJECT) submission_log_page = self.get_first_project_submission_log_page() submission_log_page.search(subject_short_code) self.assertIn(fetch_(SUB_LAST_NAME, VALID_DATA_FOR_SUBJECT), submission_log_page.get_cell_value(1, 5)) self.driver.go_to(url("/entity/subjects/clinic/")) subject_list_page = AllSubjectsListPage(self.driver) self.driver.wait_for_page_load() subject_list_page.select_subject_by_id(subject_short_code) edit_subject_page = subject_list_page.click_edit_action_button() edit_subject_page.add_subject_with(VALID_DATA_FOR_EDIT) edit_subject_page.submit_subject() submission_log_page = self.get_first_project_submission_log_page() submission_log_page.search(subject_short_code) self.assertIn(fetch_(SUB_LAST_NAME, VALID_DATA_FOR_EDIT), submission_log_page.get_cell_value(1, 5)) def make_web_submission(self, project_name, submission): all_data_page = self.dashboard.navigate_to_all_data_page() web_submission_page = all_data_page.navigate_to_web_submission_page( project_name) self.driver.wait_for_page_with_title(5, web_submission_page.get_title()) web_submission_page.fill_questionnaire_with(submission) web_submission_page.submit_answers() @attr("functional_test") def test_should_filter_by_name_and_id_of_datasender_and_subject(self): self.driver.go_to(DATA_WINNER_SMS_TESTER_PAGE) send_valid_sms_with(SMS_REGISTER_SUBJECT) send_valid_sms_with(SMS_WEB_SUBMISSION) submission_log_page = self.go_to_submission_log_page() submission_log_page.wait_for_table_data_to_load() datasender_name = 'Tester' submission_log_page.filter_by_datasender(datasender_name) submission_log_page.wait_for_table_data_to_load() self._verify_filtered_records_by_datasender_name_or_id( datasender_name, submission_log_page) project_name = fetch_("last_name", from_(SUBJECT_DATA)) submission_log_page.filter_by_subject(project_name) submission_log_page.wait_for_table_data_to_load() self._verify_filtered_records_by_subject_name_or_id( project_name, submission_log_page) datasender_id = 'rep276' submission_log_page.refresh() submission_log_page.filter_by_datasender(datasender_id) submission_log_page.wait_for_table_data_to_load() self._verify_filtered_records_by_datasender_name_or_id( datasender_id, submission_log_page) project_short_code = fetch_("short_code", from_(SUBJECT_DATA)) submission_log_page.refresh() submission_log_page.filter_by_subject(project_short_code) submission_log_page.wait_for_table_data_to_load() self._verify_filtered_records_by_subject_name_or_id( project_short_code, submission_log_page) def _verify_filtered_records_by_datasender_name_or_id( self, datasender, submission_log_page): total_number_of_rows = submission_log_page.get_total_number_of_rows() for i in range(1, total_number_of_rows): self.assertIn(datasender, submission_log_page.get_cell_value(i, 2)) def _verify_filtered_records_by_subject_name_or_id(self, project, submission_log_page): total_number_of_rows = submission_log_page.get_total_number_of_records( ) for i in range(1, total_number_of_rows): self.assertIn(project, submission_log_page.get_cell_value(i, 5)) def assert_reporting_period_values(self, submission_log_page, total_number_of_rows, monthly=False): rp_column = 6 all_reporting_dates = [] dates = get_reporting_date_values(monthly) for i in range(1, total_number_of_rows + 1): all_reporting_dates.append( submission_log_page.get_cell_value(i, rp_column)) self.assertTrue(set(all_reporting_dates).issubset(dates)) @attr("functional_test") def test_date_filters(self): if not self.reporting_period_project_name: self.reporting_period_project_name = self.populate_data_for_date_range_filters( ) submission_log_page = self.go_to_submission_log_page( project_name=self.reporting_period_project_name) submission_log_page.filter_by_submission_date(DAILY_DATE_RANGE) submission_log_page.wait_for_table_data_to_load() total_number_of_rows = submission_log_page.get_total_number_of_records( ) self.assertEqual(total_number_of_rows, 4) submission_log_page.filter_by_submission_date(LAST_MONTH) submission_log_page.wait_for_table_data_to_load() total_number_of_rows = submission_log_page.get_total_number_of_records( ) self.assertEqual(total_number_of_rows, 0) self.assertEqual('No matching records found', submission_log_page.get_empty_datatable_text()) submission_log_page.filter_by_submission_date(YEAR_TO_DATE) submission_log_page.wait_for_table_data_to_load() total_number_of_rows = submission_log_page.get_total_number_of_records( ) self.assertEqual(total_number_of_rows, 4) #submission_log_page.filter_by_reporting_date(DAILY_DATE_RANGE) #submission_log_page.wait_for_table_data_to_load() #total_number_of_rows = submission_log_page.get_total_number_of_records() #self.assertEqual(total_number_of_rows, 1) #self.assert_reporting_period_values(submission_log_page, total_number_of_rows) # #submission_log_page.filter_by_reporting_date(CURRENT_MONTH) # #submission_log_page.wait_for_table_data_to_load() #total_number_of_rows = submission_log_page.get_total_number_of_records() #self.assertEqual(total_number_of_rows, 2) #self.assert_reporting_period_values(submission_log_page, total_number_of_rows) # #submission_log_page.filter_by_reporting_date(LAST_MONTH) # #submission_log_page.wait_for_table_data_to_load() #total_number_of_rows = submission_log_page.get_total_number_of_records() #self.assertEqual(total_number_of_rows, 1) #self.assert_reporting_period_values(submission_log_page, total_number_of_rows) # #submission_log_page.filter_by_reporting_date(YEAR_TO_DATE) # #now = datetime.now() #year_to_date_expected = len([d for d in get_reporting_date_values(False) if # datetime.strptime(d, "%d.%m.%Y").year == now.year and datetime.strptime(d, # "%d.%m.%Y") <= now]) #submission_log_page.wait_for_table_data_to_load() #total_number_of_rows = submission_log_page.get_total_number_of_records() #self.assertEqual(total_number_of_rows, year_to_date_expected) #self.assert_reporting_period_values(submission_log_page, total_number_of_rows) # #submission_log_page.filter_by_reporting_date(ALL_PERIODS) #self.assert_reporting_period_values(submission_log_page, total_number_of_rows) #self.assert_reporting_period_values(submission_log_page, total_number_of_rows) def verify_sort_data_by_date( self, submission_log_page, column, sort_predicate, date_format=SUBMISSION_DATE_FORMAT_FOR_SUBMISSION_LOG): date_strings = submission_log_page.get_all_data_on_nth_column(column) self.assertTrue(len(date_strings) >= 3) dates = [] for date in date_strings: dates.append(datetime.strptime(date, date_format)) self.assertTrue(sort_predicate(dates[0], dates[1]), msg="Dates:" + str(dates)) self.assertTrue(sort_predicate(dates[1], dates[2]), msg="Dates:" + str(dates)) @attr('functional_test') def test_sorting_on_date_columns(self): if not self.reporting_period_project_name: self.reporting_period_project_name = self.populate_data_for_date_range_filters( ) submission_log_page = self.go_to_submission_log_page( project_name=self.reporting_period_project_name) submission_log_page.wait_for_table_data_to_load() #default sorting on submission date should be in descending order self.verify_sort_data_by_date(submission_log_page, 3, greater_than_equal) submission_log_page.click_on_nth_header(5) submission_log_page.wait_for_table_data_to_load() self.verify_sort_data_by_date(submission_log_page, 5, less_than_equal, date_format='%d.%m.%Y') @attr('functional_test') def test_should_delete_submission(self): send_valid_sms_with(VALID_DATA_FOR_DELETE) submission_log_page = self.go_to_submission_log_page() submission_log_page.search(unique_text) submission_log_page.wait_for_table_data_to_load() submission_log_page.check_submission_by_row_number(1) submission_log_page.choose_on_dropdown_action(DELETE_BUTTON) warning_dialog = WarningDialog(self.driver) warning_dialog.confirm() self.driver.wait_for_element(UI_TEST_TIMEOUT, by_css('#message_text .success-box')) delete_success_text = self.driver.find_visible_element( by_css('#message_text')).text self.assertEqual(delete_success_text, "The selected records have been deleted") submission_log_page.wait_for_table_data_to_load() self.assertEquals( int(submission_log_page.get_total_number_of_records()), 0)
class TestSubmissionLog(unittest.TestCase): @classmethod def setUpClass(cls): cls.driver = setup_driver() cls.driver.go_to(DATA_WINNER_LOGIN_PAGE) login_page = LoginPage(cls.driver) cls.dashboard = login_page.do_successful_login_with(VALID_CREDENTIALS) cls.reporting_period_project_name = None cls.URL = None @classmethod def tearDownClass(cls): teardown_driver(cls.driver) def _create_project(self, project_data, monthly): self.driver.go_to(DATA_WINNER_DASHBOARD_PAGE) self.dashboard_page = DashboardPage(self.driver) create_project_page = self.dashboard_page.navigate_to_create_project_page( ) create_project_page.create_project_with(project_data) create_project_page.continue_create_project() if monthly: create_questionnaire_page = CreateQuestionnairePage(self.driver) create_questionnaire_page.select_question_link(2) create_questionnaire_page.change_date_type_question( date_format=MM_YYYY) create_project_page.save_and_create_project_successfully() def populate_data_for_date_range_filters(self, project_data=NEW_PROJECT_DATA, monthly=False): self._create_project(project_data, monthly) project_name, questionnaire_code = self._get_project_details() self._submit_sms_data(questionnaire_code, monthly=monthly) return project_name def _get_project_details(self): overview_page = ProjectOverviewPage(self.driver) return overview_page.get_project_title( ), overview_page.get_questionnaire_code() @classmethod def _submit_sms_data(cls, questionnaire_code, monthly): cls.driver.go_to(DATA_WINNER_SMS_TESTER_PAGE) page = SMSTesterPage(cls.driver) dates = get_reporting_date_values(monthly) for i in dates: page.send_sms_with( get_sms_data_with_questionnaire_code(questionnaire_code, i)) assert 'Thank you' in page.get_response_message() def get_submission_log_page(self): if self.URL: self.driver.go_to(self.URL) submission_log_page = SubmissionLogPage(self.driver) else: submission_log_page = self.go_to_submission_log_page() return submission_log_page @classmethod def go_to_submission_log_page(cls, project_name=FIRST_PROJECT_NAME, cache_url=True): cls.driver.go_to(ALL_DATA_PAGE) submission_log_page = AllDataPage( cls.driver).navigate_to_submission_log_page(project_name) if not cls.URL and cache_url: cls.URL = cls.driver.current_url return submission_log_page @SkipTest @attr('functional_test') def test_should_show_warning_when_deleting_records(self): submission_log_page = self.get_submission_log_page() self.driver.wait_for_element(UI_TEST_TIMEOUT, ACTION_SELECT_CSS_LOCATOR, True) time.sleep(5) # instead, check for other checkboxes value submission_log_page.check_all_submissions() WebDriverWait(self.driver, UI_TEST_TIMEOUT, 1, (CouldNotLocateElementException)).until(lambda x: x.find( by_css(".selected_submissions")).is_selected()) submission_log_page.choose_on_dropdown_action(DELETE_BUTTON) warning_dialog = WarningDialog(self.driver) self.assertEqual(DELETE_SUBMISSION_WARNING_MESSAGE, warning_dialog.get_message()) @SkipTest @attr('functional_test') def test_should_have_consistent_sorting_on_each_tabs_submission_log_page( self): submission_log_page = self.get_submission_log_page() time.sleep(2) submission_log_page.click_on_nth_header(8) submission_log_page.click_on_success_tab() time.sleep(6) self.assertEqual(submission_log_page.get_all_data_on_nth_column(7), EXPECTED_FA_SORTED) def assert_none_selected_shown(self, submission_log_page): self.assertTrue(submission_log_page.is_none_selected_shown()) self.assertFalse(submission_log_page.actions_menu_shown()) def assert_action_menu_shown_for(self, submission_log_page): self.assertTrue(submission_log_page.actions_menu_shown()) self.assertFalse(submission_log_page.is_none_selected_shown()) def register_datasender(self, datasender_details, all_datasenders_page, id=None): add_data_sender_page = all_datasenders_page.navigate_to_add_a_data_sender_page( ) add_data_sender_page.enter_data_sender_details_from(datasender_details, unique_id=id) return add_data_sender_page.get_registered_datasender_id( ) if id is None else id @attr("functional_test") def test_should_update_submission_log_when_DS_info_is_edited(self): self.driver.go_to(DATA_WINNER_ALL_DATA_SENDERS_PAGE) all_datasenders_page = AllDataSendersPage(self.driver) ds_id = self.register_datasender(DATASENDER_DETAILS, all_datasenders_page) self.driver.go_to(DATA_WINNER_SMS_TESTER_PAGE) sms_tester_page = SMSTesterPage(self.driver) sms_tester_page.send_valid_sms_with(VALID_DATA) message = sms_tester_page.get_response_message() self.assertTrue( fetch_(SUCCESS_MESSAGE, VALID_DATA) in message, "message:" + message) submission_log_page = self.go_to_submission_log_page() submission_log_page.search(ds_id) self.assertTrue(DATASENDER_DETAILS[NAME] in submission_log_page.get_cell_value(row=1, column=2)) self.driver.go_to(DATA_WINNER_ALL_DATA_SENDERS_PAGE) all_datasenders_page.search_with(ds_id) all_datasenders_page.wait_for_table_to_load() all_datasenders_page.select_a_data_sender_by_id(ds_id) all_datasenders_page.select_edit_action() AddDataSenderPage(self.driver).enter_data_sender_details_from( EDITED_DATASENDER_DETAILS) submission_log_page = self.go_to_submission_log_page() submission_log_page.search(ds_id) self.assertTrue(EDITED_DATASENDER_DETAILS[NAME] in submission_log_page.get_cell_value(row=1, column=2)) @attr("functional_test") def test_should_update_submission_log_when_subject_info_is_edited(self): self.dashboard.navigate_to_all_subject_page() all_subject_type_page = AllSubjectTypePage(self.driver) add_subject_page = all_subject_type_page.select_subject_type( 'Clinic').navigate_to_register_subject_page() add_subject_page.add_subject_with(VALID_DATA_FOR_SUBJECT) add_subject_page.submit_subject() message = fetch_(SUCCESS_MESSAGE, from_(VALID_DATA_FOR_SUBJECT)) flash_message = add_subject_page.get_flash_message() self.assertIn(message, flash_message) subject_short_code = flash_message.replace(message, '') self.driver.go_to(DATA_WINNER_SMS_TESTER_PAGE) sms_tester_page = SMSTesterPage(self.driver) VALID_SMS_FOR_EDIT_SUBJECT[SMS] = VALID_SMS_FOR_EDIT_SUBJECT[ SMS].replace('short_code', subject_short_code, 1) sms_tester_page.send_valid_sms_with(VALID_SMS_FOR_EDIT_SUBJECT) submission_log_page = self.go_to_submission_log_page() submission_log_page.search(subject_short_code) self.assertIn(fetch_(SUB_LAST_NAME, VALID_DATA_FOR_SUBJECT), submission_log_page.get_cell_value(1, 5)) self.dashboard.navigate_to_all_subject_page() all_subject_type_page = AllSubjectTypePage(self.driver) add_subject_page = all_subject_type_page.select_subject_type( 'Clinic').navigate_to_register_subject_page() add_subject_page.navigate_to_subject_list() subject_list_page = AllSubjectsListPage(self.driver) subject_list_page.select_subject_by_id(subject_short_code) edit_subject_page = subject_list_page.click_edit_action_button() edit_subject_page.add_subject_with(VALID_DATA_FOR_EDIT) edit_subject_page.submit_subject() submission_log_page = self.go_to_submission_log_page() submission_log_page.search(subject_short_code) self.assertIn(fetch_(SUB_LAST_NAME, VALID_DATA_FOR_EDIT), submission_log_page.get_cell_value(1, 5)) def make_web_submission(self, project_name, submission): all_data_page = self.dashboard.navigate_to_all_data_page() web_submission_page = all_data_page.navigate_to_web_submission_page( project_name) self.driver.wait_for_page_with_title(5, web_submission_page.get_title()) web_submission_page.fill_questionnaire_with(submission) web_submission_page.submit_answers() @attr("functional_test") def test_should_filter_by_name_and_id_of_datasender_and_subject(self): self.driver.go_to(DATA_WINNER_SMS_TESTER_PAGE) sms_tester_page = SMSTesterPage(self.driver) sms_tester_page.send_valid_sms_with(SMS_REGISTER_SUBJECT) sms_tester_page.send_valid_sms_with(SMS_WEB_SUBMISSION) submission_log_page = self.go_to_submission_log_page() datasender_name = 'Tester' submission_log_page.filter_by_datasender(datasender_name) submission_log_page.wait_for_table_data_to_load() self._verify_filtered_records_by_datasender_name_or_id( datasender_name, submission_log_page) project_name = fetch_("last_name", from_(SUBJECT_DATA)) submission_log_page.filter_by_subject(project_name) submission_log_page.wait_for_table_data_to_load() self._verify_filtered_records_by_subject_name_or_id( project_name, submission_log_page) datasender_id = 'rep276' submission_log_page.filter_by_datasender(datasender_id) submission_log_page.wait_for_table_data_to_load() self._verify_filtered_records_by_datasender_name_or_id( datasender_id, submission_log_page) project_short_code = fetch_("short_code", from_(SUBJECT_DATA)) submission_log_page.filter_by_subject(project_short_code) submission_log_page.wait_for_table_data_to_load() self._verify_filtered_records_by_subject_name_or_id( project_short_code, submission_log_page) def _verify_filtered_records_by_datasender_name_or_id( self, datasender, submission_log_page): total_number_of_rows = submission_log_page.get_total_number_of_rows() for i in range(1, total_number_of_rows): self.assertIn(datasender, submission_log_page.get_cell_value(i, 2)) def _verify_filtered_records_by_subject_name_or_id(self, project, submission_log_page): total_number_of_rows = submission_log_page.get_total_number_of_records( ) for i in range(1, total_number_of_rows): self.assertIn(project, submission_log_page.get_cell_value(i, 5)) def assert_reporting_period_values(self, submission_log_page, total_number_of_rows, monthly=False): rp_column = 6 all_reporting_dates = [] dates = get_reporting_date_values(monthly) for i in range(1, total_number_of_rows + 1): all_reporting_dates.append( submission_log_page.get_cell_value(i, rp_column)) self.assertTrue(set(all_reporting_dates).issubset(dates)) @attr("functional_test") def test_date_filters(self): if not self.reporting_period_project_name: self.reporting_period_project_name = self.populate_data_for_date_range_filters( ) submission_log_page = self.go_to_submission_log_page( project_name=self.reporting_period_project_name) submission_log_page.filter_by_reporting_date(DAILY_DATE_RANGE) submission_log_page.wait_for_table_data_to_load() total_number_of_rows = submission_log_page.get_total_number_of_records( ) self.assertEqual(total_number_of_rows, 1) self.assert_reporting_period_values(submission_log_page, total_number_of_rows) submission_log_page.filter_by_reporting_date(CURRENT_MONTH) submission_log_page.wait_for_table_data_to_load() total_number_of_rows = submission_log_page.get_total_number_of_records( ) self.assertEqual(total_number_of_rows, 2) self.assert_reporting_period_values(submission_log_page, total_number_of_rows) submission_log_page.filter_by_reporting_date(LAST_MONTH) submission_log_page.wait_for_table_data_to_load() total_number_of_rows = submission_log_page.get_total_number_of_records( ) self.assertEqual(total_number_of_rows, 1) self.assert_reporting_period_values(submission_log_page, total_number_of_rows) submission_log_page.filter_by_reporting_date(YEAR_TO_DATE) now = datetime.now() year_to_date_expected = len([ d for d in get_reporting_date_values(False) if datetime.strptime(d, "%d.%m.%Y").year == now.year and datetime.strptime(d, "%d.%m.%Y") <= now ]) submission_log_page.wait_for_table_data_to_load() total_number_of_rows = submission_log_page.get_total_number_of_records( ) self.assertEqual(total_number_of_rows, year_to_date_expected) self.assert_reporting_period_values(submission_log_page, total_number_of_rows) submission_log_page.filter_by_reporting_date(ALL_PERIODS) submission_log_page.filter_by_submission_date(DAILY_DATE_RANGE) submission_log_page.wait_for_table_data_to_load() total_number_of_rows = submission_log_page.get_total_number_of_records( ) self.assertEqual(total_number_of_rows, 4) self.assert_reporting_period_values(submission_log_page, total_number_of_rows) submission_log_page.filter_by_submission_date(LAST_MONTH) submission_log_page.wait_for_table_data_to_load() total_number_of_rows = submission_log_page.get_total_number_of_records( ) self.assertEqual(total_number_of_rows, 0) self.assertEqual('No matching records found', submission_log_page.get_empty_datatable_text()) submission_log_page.filter_by_submission_date(YEAR_TO_DATE) submission_log_page.wait_for_table_data_to_load() total_number_of_rows = submission_log_page.get_total_number_of_records( ) self.assertEqual(total_number_of_rows, 4) self.assert_reporting_period_values(submission_log_page, total_number_of_rows) @attr("functional_test") def test_reporting_period_month_filters(self): monthly_rp_project_name = self.populate_data_for_date_range_filters( monthly=True) submission_log_page = self.go_to_submission_log_page( project_name=monthly_rp_project_name) submission_log_page.filter_by_reporting_month(MONTHLY_DATE_RANGE) submission_log_page.wait_for_table_data_to_load() total_number_of_rows = submission_log_page.get_total_number_of_records( ) self.assertEqual(total_number_of_rows, 2) self.assert_reporting_period_values(submission_log_page, total_number_of_rows, monthly=True) submission_log_page.filter_by_reporting_month(CURRENT_MONTH) submission_log_page.wait_for_table_data_to_load() total_number_of_rows = submission_log_page.get_total_number_of_records( ) self.assertEqual(total_number_of_rows, 2) self.assert_reporting_period_values(submission_log_page, total_number_of_rows, monthly=True) submission_log_page.filter_by_reporting_month(LAST_MONTH) submission_log_page.wait_for_table_data_to_load() total_number_of_rows = submission_log_page.get_total_number_of_records( ) self.assertEqual(total_number_of_rows, 1) self.assert_reporting_period_values(submission_log_page, total_number_of_rows, monthly=True) def verify_sort_data_by_date( self, submission_log_page, column, sort_predicate, date_format=SUBMISSION_DATE_FORMAT_FOR_SUBMISSION_LOG): TestSubmissionLog._create_screenshot("sort_dates_before") date_strings = submission_log_page.get_all_data_on_nth_column(column) self.assertTrue(len(date_strings) >= 3) dates = [] for date in date_strings: dates.append(datetime.strptime(date, date_format)) self.assertTrue(sort_predicate(dates[0], dates[1]), msg="Dates:" + str(dates)) self.assertTrue(sort_predicate(dates[1], dates[2]), msg="Dates:" + str(dates)) @classmethod def _create_screenshot(cls, file_name): if not os.path.exists("screenshots"): os.mkdir("screenshots") cls.driver.save_screenshot("screenshots/%s.png" % file_name) @attr('functional_test') def test_sorting_on_date_columns(self): if not self.reporting_period_project_name: self.reporting_period_project_name = self.populate_data_for_date_range_filters( ) submission_log_page = self.go_to_submission_log_page( project_name=self.reporting_period_project_name) submission_log_page.wait_for_table_data_to_load() #default sorting on submission date should be in descending order self.verify_sort_data_by_date(submission_log_page, 3, greater_than_equal) submission_log_page.click_on_nth_header(6) submission_log_page.wait_for_table_data_to_load() self.verify_sort_data_by_date(submission_log_page, 6, less_than_equal, date_format='%d.%m.%Y') @attr('functional_test') def test_should_delete_submission(self): self.driver.go_to(DATA_WINNER_SMS_TESTER_PAGE) sms_tester_page = SMSTesterPage(self.driver) sms_tester_page.send_valid_sms_with(VALID_DATA_FOR_DELETE) message = sms_tester_page.get_response_message() self.assertTrue( fetch_(SUCCESS_MESSAGE, VALID_DATA_FOR_DELETE) in message, "message:" + message) submission_log_page = self.go_to_submission_log_page() submission_log_page.search(unique_text) submission_log_page.wait_for_table_data_to_load() submission_log_page.check_submission_by_row_number(1) submission_log_page.choose_on_dropdown_action(DELETE_BUTTON) warning_dialog = WarningDialog(self.driver) warning_dialog.confirm() time.sleep(1) delete_success_text = self.driver.find_visible_element( by_css('#message_text')).text self.assertEqual(delete_success_text, "The selected records have been deleted") submission_log_page.wait_for_table_data_to_load() self.assertEquals( int(submission_log_page.get_total_number_of_records()), 0)
def goto_dashboard(self): self.driver.go_to(url("/dashboard/")) return DashboardPage(self.driver)