Ejemplo n.º 1
0
def setup_driver():
    driver = DriverWrapper()
    driver.implicitly_wait(WAIT)
    driver.execute_script(
        "window.innerWidth = screen.width;window.innerHeight = screen.height;window.screenX = 0;window.screenY = 0;alwaysLowered = false;"
    )
    return driver
Ejemplo n.º 2
0
def setup_driver(browser=None):
    driver = DriverWrapper(browser)
    return driver
 def setUp(self):
     self.driver = DriverWrapper(browser="phantom")
     self.driver.set_window_size(1600, 900)
     self.driver.implicitly_wait(WAIT)
 def __init__(self):
     """ Create Firefox Driver Wrapper"""
     WebDriver.__init__(self)
     DriverWrapper.__init__(self)
class TestApplicationEndToEnd(unittest.TestCase):
    def setUp(self):
        self.driver = DriverWrapper(browser="phantom")
        self.driver.set_window_size(1600, 900)
        self.driver.implicitly_wait(WAIT)

    def tearDown(self):
        import sys
        exception_info = sys.exc_info()
        if exception_info != (None, None, None):
            import os

            if not os.path.exists("screenshots"):
                os.mkdir("screenshots")
            self.driver.get_screenshot_as_file(
                "screenshots/screenshot-%s-%s.png" %
                (self.__class__.__name__, self._testMethodName))

        try:
            if self.email is not None:
                email = self.email
                dbmanager = DatabaseManager()
                dbname = dbmanager.delete_organization_all_details(
                    email.lower())
                couchwrapper = CouchHttpWrapper()
                couchwrapper.deleteDb(dbname)
        except TypeError as e:
            pass

        teardown_driver(self.driver)

    def set_organization_number(self):
        dbmanager = DatabaseManager()
        organization_sms_tel_number = get_epoch_last_ten_digit()
        dbmanager.set_sms_telephone_number(organization_sms_tel_number,
                                           self.email.lower())
        return organization_sms_tel_number

    def do_org_registartion(self):
        registration_confirmation_page, self.email = register_and_get_email(
            self.driver)
        self.assertEquals(
            registration_confirmation_page.registration_success_message(),
            fetch_(SUCCESS_MESSAGE,
                   from_(REGISTRATION_DATA_FOR_SUCCESSFUL_REGISTRATION)))
        activate_account(self.driver, self.email.lower())
        return self.set_organization_number()

    def do_login(self):
        global_navigation = do_login(self.driver, self.email,
                                     REGISTRATION_PASSWORD)
        self.assertEqual(global_navigation.welcome_message(),
                         "Welcome Mickey!")
        return global_navigation

    def add_subject_type(self, create_project_page, entity_type):
        add_subject_type_page = AddSubjectTypePage(self.driver)
        add_subject_type_page.click_on_accordian_link()
        add_subject_type_page.add_entity_type_with(entity_type)
        self.assertEqual(create_project_page.get_selected_subject(),
                         entity_type.lower())

    def create_project(self, create_project_page):
        create_project_page.create_project_with(VALID_DATA_FOR_PROJECT)
        create_project_page.continue_create_project()
        return CreateQuestionnairePage(self.driver)

    def create_questionnaire(self, create_questionnaire_page):
        create_questionnaire_page.create_questionnaire_with(QUESTIONNAIRE_DATA)
        index = 3
        for question in fetch_(QUESTIONS, from_(QUESTIONNAIRE_DATA)):
            question_link_text = fetch_(QUESTION, from_(question))
            self.assertEquals(
                create_questionnaire_page.get_question_link_text(index),
                question_link_text)
            index += 1
        project_overview_page = create_questionnaire_page.save_and_create_project_successfully(
        )
        return project_overview_page.get_project_title()

    def send_sms(self, organization_sms_tel_number, sms):
        sms_tester_page = SMSTesterPage(self.driver)
        sms_tester_data = sms
        sms_tester_data[RECEIVER] = str(organization_sms_tel_number)
        sms_tester_page.send_sms_with(sms_tester_data)
        self.assertIn(fetch_(SUCCESS_MESSAGE, from_(sms_tester_data)),
                      sms_tester_page.get_response_message())
        return sms_tester_page

    def verify_submission(self, sms_log, project_name):
        global_navigation = GlobalNavigationPage(self.driver)
        view_all_project_page = global_navigation.navigate_to_view_all_project_page(
        )
        project_overview_project = view_all_project_page.navigate_to_project_overview_page(
            project_name)
        data_page = project_overview_project.navigate_to_data_page()
        submission_log_page = data_page.navigate_to_all_data_record_page()
        self.assertRegexpMatches(
            submission_log_page.get_submission_message(sms_log),
            fetch_(SUBMISSION, from_(sms_log)))

    def review_project_summary(self, review_page):
        self.assertEqual(
            fetch_(PROJECT_PROFILE, from_(VALID_DATA_REVIEW_AND_TEST)),
            review_page.get_project_profile_details())
        review_page.open_subject_accordion()
        self.assertEqual(
            fetch_(SUBJECT_DETAILS, from_(VALID_DATA_REVIEW_AND_TEST)),
            review_page.get_subject_details())
        # unreliable in firefox in CI, works fine locally
        review_page.open_data_sender_accordion()
        self.assertEqual(
            fetch_(DATA_SENDER_COUNT, from_(VALID_DATA_REVIEW_AND_TEST)),
            review_page.get_data_sender_count())
        review_page.open_questionnaire_accordion()
        self.assertEqual(
            fetch_(QUESTIONNAIRE, from_(VALID_DATA_REVIEW_AND_TEST)),
            review_page.get_questionnaire())

    def verify_individual_report_project_creation(self):
        global_navigation = GlobalNavigationPage(self.driver)
        dashboard_page = global_navigation.navigate_to_dashboard_page()
        create_project_page = dashboard_page.navigate_to_create_project_page()
        create_project_page.select_report_type(VALID_DATA_FOR_PROJECT)
        self.add_subject_type(create_project_page,
                              VALID_SUBJECT_TYPE2[ENTITY_TYPE])
        self.add_subject_type(create_project_page,
                              VALID_SUBJECT_TYPE1[ENTITY_TYPE])
        create_questionnaire_page = self.create_project(create_project_page)
        self.project_name = self.create_questionnaire(
            create_questionnaire_page)

    def add_subject(self):
        global_navigation = GlobalNavigationPage(self.driver)
        global_navigation.navigate_to_all_subject_page()
        all_subject_type_page = AllSubjectTypePage(self.driver)
        add_subject_page = all_subject_type_page.select_subject_type(
            'Waterpoint').navigate_to_register_subject_page()
        add_subject_page.add_subject_with(VALID_DATA_FOR_SUBJECT)
        add_subject_page.submit_subject()
        self.assertIn(fetch_(SUCCESS_MESSAGE, from_(VALID_DATA_FOR_SUBJECT)),
                      add_subject_page.get_flash_message())

    def add_edit_datasender(self):
        global_navigation = GlobalNavigationPage(self.driver)
        all_data_sender_page = global_navigation.navigate_to_all_data_sender_page(
        )
        add_data_sender_page = all_data_sender_page.navigate_to_add_a_data_sender_page(
        )
        email = generate_random_email_id()
        add_data_sender_page.enter_data_sender_details_from(
            VALID_DATA_WITH_EMAIL, email=email)
        success_msg = add_data_sender_page.get_success_message()
        self.assertIn(fetch_(SUCCESS_MESSAGE, from_(VALID_DATA_WITH_EMAIL)),
                      success_msg)
        add_data_sender_page.navigate_to_datasender_page()
        all_data_sender_page = AllDataSendersPage(self.driver)

        rep_id = success_msg.replace(VALID_DATA_WITH_EMAIL[SUCCESS_MESSAGE],
                                     '')
        all_data_sender_page.select_a_data_sender_by_id(rep_id)

        all_data_sender_page.select_edit_action()
        time.sleep(2)
        edit_datasender_page = AddDataSenderPage(self.driver)
        edit_datasender_page.enter_data_sender_details_from(
            VALID_DATA_WITH_EMAIL_FOR_EDIT)
        self.assertRegexpMatches(
            edit_datasender_page.get_success_message(),
            fetch_(SUCCESS_MSG, from_(VALID_DATA_WITH_EMAIL_FOR_EDIT)))

        edit_datasender_page.navigate_to_datasender_page()
        all_data_sender_page = AllDataSendersPage(self.driver)
        all_data_sender_page.associate_datasender_to_projects(
            rep_id, [self.project_name])
        return email

    def verify_admin_present_in_my_datasenders_page(self):
        global_navigation = GlobalNavigationPage(self.driver)
        all_project_page = global_navigation.navigate_to_view_all_project_page(
        )
        project_overview_page = all_project_page.navigate_to_project_overview_page(
            self.project_name)
        my_datasenders_page = project_overview_page.navigate_to_datasenders_page(
        )
        my_datasenders_page.search_with(self.email)
        self.assertTrue(
            self.driver.is_element_present(
                my_datasenders_page.get_checkbox_selector_for_datasender_row(
                    1)))

    def verify_submission_via_sms(self, organization_sms_tel_number):
        self.driver.go_to(DATA_WINNER_SMS_TESTER_PAGE)
        VALID_DATA_FOR_SMS[SENDER] = VALID_DATA_WITH_EMAIL[MOBILE_NUMBER]
        self.send_sms(organization_sms_tel_number, VALID_DATA_FOR_SMS)
        self.driver.go_to(DATA_WINNER_DASHBOARD_PAGE)
        self.verify_submission(SMS_DATA_LOG, self.project_name)

    def verify_project_activation(self):
        global_navigation = GlobalNavigationPage(self.driver)
        all_projects_page = global_navigation.navigate_to_view_all_project_page(
        )
        project_overview_page = all_projects_page.navigate_to_project_overview_page(
            self.project_name)
        project_overview_page.activate_project()
        self.assertEqual(project_overview_page.get_status_of_the_project(),
                         "Active")

    def verify_submission_via_web(self, ds_email):
        self.driver.go_to(LOGOUT)
        user = User.objects.get(username=ds_email)
        token = default_token_generator.make_token(user)
        self.driver.go_to(
            url(DS_ACTIVATION_URL % (int_to_base36(user.id), token)))
        activation_page = ResetPasswordPage(self.driver)
        activation_page.type_same_password(NEW_PASSWORD)
        activation_page.click_submit()
        self.driver.wait_for_page_with_title(UI_TEST_TIMEOUT,
                                             "Data Submission")
        self.assertEqual(self.driver.get_title(), "Data Submission")
        self.driver.go_to(LOGOUT)
        self.driver.go_to(DATA_WINNER_LOGIN_PAGE)
        login_page = LoginPage(self.driver)
        login_page.login_with({USERNAME: ds_email, PASSWORD: NEW_PASSWORD})
        data_sender_page = DataSenderPage(self.driver)
        submission_page = data_sender_page.send_in_data()
        submission_page.fill_and_submit_answer(WEB_ANSWERS)
        self.driver.go_to(LOGOUT)
        self.do_login()
        self.verify_submission(WEB_ANSWER_LOG, self.project_name)

    def admin_edit_delete_submissions(self):
        submission_log_page = SubmissionLogPage(self.driver)
        submission_log_page.check_submission_by_row_number(1)
        submission_log_page.choose_on_dropdown_action(EDIT_BUTTON)

        submission_page = WebSubmissionPage(self.driver)
        submission_page.fill_and_submit_answer(EDITED_WEB_ANSWERS)
        self.verify_submission(EDITED_WEB_ANSWER_LOG, self.project_name)

        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()
        submission_log_page.wait_for_table_data_to_load()
        self.assertTrue(submission_log_page.empty_help_text())

    def add_edit_delete_subject(self):
        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()
        self.assertIn(message, flash_message)
        subject_short_code = flash_message.replace(message, '')

        add_subject_page.navigate_to_subject_list()
        all_subjects_list_page = AllSubjectsListPage(self.driver)
        all_subjects_list_page.select_subject_by_id(subject_short_code)
        edit_subject_page = all_subjects_list_page.click_edit_action_button()
        edit_subject_page.add_subject_with(VALID_DATA_FOR_EDIT)
        edit_subject_page.submit_subject()
        self.assertEquals(edit_subject_page.get_flash_message(),
                          VALID_DATA_FOR_EDIT[SUCCESS_MESSAGE])

        edit_subject_page.navigate_to_subject_list()
        all_subjects_page = AllSubjectsListPage(self.driver)
        all_subjects_page.select_subject_by_id(subject_short_code)
        all_subjects_page.click_delete_action_button()
        self.driver.find(CONFIRM_DELETE).click()
        self.assertEquals(all_subjects_page.get_successfully_deleted_message(),
                          'Subject(s) successfully deleted.')
        self.assertFalse(
            all_subjects_page.is_subject_present(subject_short_code))

    def delete_project(self):
        global_navigation = GlobalNavigationPage(self.driver)
        project_page = global_navigation.navigate_to_view_all_project_page()
        self.assertTrue(project_page.is_project_present(self.project_name))

        project_page.delete_project(self.project_name)
        self.assertFalse(project_page.is_project_present(self.project_name))

    def verify_summary_report_project_creation(self):
        self.driver.wait_for_element(UI_TEST_TIMEOUT,
                                     by_css('#global_dashboard_link'))
        global_navigation_page = GlobalNavigationPage(self.driver)
        dashboard_page = global_navigation_page.navigate_to_dashboard_page()
        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()
        questionnaire_page = CreateQuestionnairePage(self.driver)
        overview_page = questionnaire_page.save_and_create_project_successfully(
        )
        self.summary_project_name = overview_page.get_project_title()
        self.summary_project_questionnaire_code = overview_page.get_questionnaire_code(
        )
        return overview_page

    @attr('smoke')
    def test_end_to_end(self):
        self.email = None
        organization_sms_tel_number = self.do_org_registartion()
        self.verify_individual_report_project_creation()
        self.add_subject()
        self.add_edit_delete_subject()
        ds_email = self.add_edit_datasender()
        self.verify_admin_present_in_my_datasenders_page()
        self.verify_submission_via_sms(organization_sms_tel_number)
        self.verify_project_activation()
        self.verify_submission_via_web(ds_email)
        self.admin_edit_delete_submissions()
        self.delete_project()

        project_overview_page = self.verify_summary_report_project_creation()
        project_overview_page.navigate_to_web_questionnaire_page(
        ).fill_and_submit_answer(ANSWER_FOR_SUMMARY_PROJECT)
        self.verify_submission(SUMMARY_DATA_LOG, self.summary_project_name)
Ejemplo n.º 6
0
 def __init__(self):
     """ Create Chrome Driver Wrapper"""
     WebDriver.__init__(self)
     DriverWrapper.__init__(self)
Ejemplo n.º 7
0
 def __init__(self):
     """ Create IE Driver Wrapper"""
     WebDriver.__init__(self)
     DriverWrapper.__init__(self)
Ejemplo n.º 8
0
 def __init__(self, timeout=30):
     """ Create htmlunit Driver Wrapper"""
     WebDriver.__init__(self,
                        command_executor="http://127.0.0.1:4444/wd/hub",
                        browser_name="htmlunit")
     DriverWrapper.__init__(self)
Ejemplo n.º 9
0
 def __init__(self, timeout=30):
     """ Create htmlunit Driver Wrapper"""
     WebDriver.__init__(self,
                        command_executor="http://127.0.0.1:4444/wd/hub",
                        browser_name="htmlunit")
     DriverWrapper.__init__(self)
Ejemplo n.º 10
0
def setup_driver():
    driver = DriverWrapper()
    driver.implicitly_wait(WAIT)
    return driver