Exemplo n.º 1
0
class LoginTest(WebAppTest):
    """
    Tests for logging in and navigating to Courseware page
    """

    DEMO_COURSE_USER = os.environ.get('USER_LOGIN_EMAIL')
    DEMO_COURSE_PASSWORD = os.environ.get('USER_LOGIN_PASSWORD')

    def setUp(self):
        """
        Initialize the page object
        """
        super(LoginTest, self).setUp()
        self.login_page = LmsLogin(self.browser)
        self.dashboard_ext = DashboardPageExtended(self.browser)

    def test_login(self):
        """
        Verifies that user can Log in as a staff
        """
        self.login_page.visit()
        self.login_page.login(self.DEMO_COURSE_USER, self.DEMO_COURSE_PASSWORD)
        self.assertEqual(
            self.login_page.q(
                css='.wrapper-header-courses .header-courses').text[0].lower(),
            'my courses',
            msg='User not logged in as expected.')

    def test_remember_me(self):
        """
        Verifies that user can use Remember Me functionality
        """
        cookie_name = 'stage-edx-sessionid'

        if LMS_STAGE_BASE_URL != LMS_BASE_URL:
            cookie_name = 'sessionid'

        self.login_page.visit()
        self.login_page.provide_info(
            self.DEMO_COURSE_USER, self.DEMO_COURSE_PASSWORD
        )

        self.login_page.click_remember_me()
        self.login_page.submit()
        self.dashboard_ext.wait_for_page()
        # When we check the 'remember me' checkbox
        # then edx keeps the session alive for 7 days.
        # In which case, cookie has 'expiry' value of
        # 7 days. If we don't check the 'remember me'
        # then the value of 'expiry' key of cookie will
        # be none.
        self.assertIsNotNone(self.browser.get_cookie(cookie_name)['expiry'])
Exemplo n.º 2
0
class LoginTest(WebAppTest):
    """
    Tests for logging in and navigating to Courseware page
    """

    DEMO_COURSE_USER = os.environ.get('USER_LOGIN_EMAIL')
    DEMO_COURSE_PASSWORD = os.environ.get('USER_LOGIN_PASSWORD')

    def setUp(self):
        """
        Initialize the page object
        """
        super(LoginTest, self).setUp()
        self.login_page = LmsLogin(self.browser)
        self.dashboard_ext = DashboardPageExtended(self.browser)
        self.lms_home = LmsHome(self.browser)

    def test_login(self):
        """
        Verifies that user can Log in as a staff
        """
        self.login_page.visit()
        self.login_page.login(self.DEMO_COURSE_USER, self.DEMO_COURSE_PASSWORD)
        self.assertEqual(self.login_page.q(
            css='.wrapper-header-courses .header-courses').text[0].lower(),
                         'my courses',
                         msg='User not logged in as expected.')

    def test_remember_me(self):
        """
        Verifies that user can use Remember Me functionality
        """
        cookie_name = 'stage-edx-sessionid'

        if LMS_STAGE_BASE_URL != LMS_BASE_URL:
            cookie_name = 'sessionid'

        self.login_page.visit()
        self.login_page.provide_info(self.DEMO_COURSE_USER,
                                     self.DEMO_COURSE_PASSWORD)

        self.login_page.click_remember_me()
        self.login_page.submit()
        self.dashboard_ext.wait_for_page()
        # When we check the 'remember me' checkbox
        # then edx keeps the session alive for 7 days.
        # In which case, cookie has 'expiry' value of
        # 7 days. If we don't check the 'remember me'
        # then the value of 'expiry' key of cookie will
        # be none.
        self.assertIsNotNone(self.browser.get_cookie(cookie_name)['expiry'])
class DonationsTest(WebAppTest):
    """
    Regression tests of Donations
    """
    def setUp(self):
        super(DonationsTest, self).setUp()
        self.register_page = RegisterPageExtended(self.browser)
        self.dashboard_page = DashboardPageExtended(self.browser)
        self.drupal_course_page = DemoCourseSelectionPage(self.browser)
        self.payment_page = PaymentPage(self.browser)
        self.payment_confirmation_page = PaymentConfirmationPage(self.browser)

        # Navigate to the registration page
        self.register_page.visit()

        # Create random email and register
        username = "******".format(uuid=self.unique_id[0:6])
        email = "{user}@example.com".format(user=username)
        self.register_page.register(email=email,
                                    password="******",
                                    username=username,
                                    full_name="Test User",
                                    country="US",
                                    favorite_movie="Some Movie",
                                    terms_of_service=True)
        self.dashboard_page.wait_for_page()

    @skipIf(LMS_BASE_URL != LMS_STAGE_BASE_URL,
            "donations only work at stage")  # LT-64
    def test_user_donations(self):
        """
        Verifies that user can Donate after selecting a course for audit
        """
        self.drupal_course_page.visit()
        self.drupal_course_page.click_enroll_now()
        self.dashboard_page.wait_for_page()
        self.dashboard_page.visit()
        self.dashboard_page.click_donate_button()
        self.payment_page.wait_for_page()
        checkout_url = self.browser.current_url
        if checkout_url == THIRD_PARTY_PAYMENTS_BASE_URL + '/pay':
            pass
        elif checkout_url == THIRD_PARTY_PAYMENTS_BASE_URL + '/checkout':
            self.payment_page.wait_for_page()
            self.payment_page.make_test_payment()
            self.payment_confirmation_page.wait_for_page()
        else:
            raise Exception("User is unable to donate to edX")
Exemplo n.º 4
0
class EnterpriseTestBase(WebAppTest):
    """
    Test Enterprise Login
    """
    def setUp(self):
        """
        Initialize all page objects
        """
        super(EnterpriseTestBase, self).setUp()
        self.browser.maximize_window()
        self.ent_portal_login = EnterprisePortalLogin(self.browser)
        self.ent_portal_home = EnterprisePortalHome(self.browser)
        self.ent_portal_course_start = \
            EnterprisePortalCourseStart(self.browser)
        self.ent_portal_course_structure = \
            EnterprisePortalCourseStructure(self.browser)
        self.ent_course_enrollment = \
            EnterpriseCourseEnrollment(self.browser)
        self.ent_data_sharing_consent = \
            EnterpriseDataSharingConsentPage(self.browser)
        self.ecommerce_courses_page = \
            EcommerceCoursesPage(self.browser)
        self.lms_login = LmsLogin(self.browser)
        self.ent_edx_registration = EnterpriseEdxRegistration(self.browser)
        self.ent_edx_login = EnterpriseEdxLogin(self.browser)
        self.dashboard = DashboardPageExtended(self.browser)
        self.courses_page = CoursesPage(self.browser)
        self.course_about_page = CourseAboutPageExtended(self.browser)
        self.track_selection_page = TrackSelectionPage(self.browser)
        self.user_account = UserAccountSettings(self.browser)
        self.cyber_source_page = CyberSourcePage(self.browser)
        self.single_seat_basket = SingleSeatBasketPage(self.browser)
        self.receipt_page = ReceiptPage(self.browser)
        self.lms_api_client = LmsApiClient()
        self.login_api = LmsLoginApi()
        self.logout_api = LogoutApi()

    def unlink_account(self):
        """
        Unlink IDP Account
        This serves as a fixture for unlinked user test case, it unlinks the
        user after running the tests to make sure that the precondition
        of test is true
        """
        # Visit account setting page
        self.user_account.visit()
        self.user_account.switch_account_settings_tabs('accounts-tab')
        # If linked account is found, unlink it
        if self.user_account.is_idp_account_linked(IDP_CSS_ID):
            self.user_account.unlink_idp_account(IDP_CSS_ID)
        # Logout using api
        self.logout_from_lms_using_api()

    def login_to_ent_portal(self, ent_portal_username, ent_portal_password):
        """
        Login to enterprise portal and find the course and click on it
        """
        # Open portal
        self.ent_portal_login.visit()
        # Login
        self.ent_portal_login.login_to_portal(ent_portal_username,
                                              ent_portal_password)
        self.ent_portal_home.wait_for_page()

    def access_course(self):
        """
        Access the course from portal
        """
        # Open the course pop up and look for the desired course
        self.ent_portal_home.open_courses_popup()
        course_titles = self.ent_portal_home.fetch_course_titles_list()
        self.assert_(ENT_COURSE_TITLE in course_title
                     for course_title in course_titles)
        # Go to course page and then use the link there to go to edX
        self.ent_portal_home.open_enterprise_course_page(ENT_COURSE_TITLE)
        self.ent_portal_course_start.wait_for_page()
        self.ent_portal_course_start.start_or_continue_course()
        self.ent_portal_course_structure.wait_for_page()
        self.ent_portal_course_structure.open_course_on_edx()
        # Get handle of newly opened edx window and switch control to it
        edx_window = self.driver.window_handles[1]
        self.driver.switch_to_window(edx_window)

    def login_ent_edx_user(self):
        """
        Login the user using edX customized logistration page
        """

        # edx credentials
        self.ent_edx_login.wait_for_page()
        self.assertEqual(ENTERPRISE_NAME,
                         self.ent_edx_login.get_enterprise_name())
        self.ent_edx_login.login(LOGIN_EMAIL, LOGIN_PASSWORD)

    def register_ent_edx_user(self):
        """
        Register the enterprise user using edX customized logistration page
        """
        __, email = get_random_credentials()
        self.ent_edx_registration.visit()
        self.assertEqual(ENTERPRISE_NAME,
                         self.ent_edx_registration.get_enterprise_name())
        self.ent_edx_registration.register(email=email,
                                           full_name='Enterprise Test User',
                                           country="US")

    def logout_from_lms_using_api(self):
        """
        Get cookies from browser and send these cookie to python request to
        logout using api
        """

        self.logout_api.logout_url = '{}://{}/{}'.format(
            LMS_PROTOCOL, LMS_BASE_URL, 'logout')
        self.logout_api.cookies = self.browser.get_cookies()
        self.logout_api.logout()

    def login_user_lms_using_api(self):
        """
        Login user to LMS using login API
        """

        self.login_api.authenticate(self.browser)

    def login_and_go_to_course_enrollment_page(self):
        """
        Flow which covers the user login on enterprise portal, selecting the
        course and then login to edx course enrollment page
        """
        # The edX site is visited just to make sure that when user jumps to
        # edX from portal we don't have to handle authentication popup
        self.lms_login.visit()
        # Enterprise portal flow
        self.login_to_ent_portal(ENT_PORTAL_USERNAME, ENT_PORTAL_PASSWORD)
        self.access_course()
        self.login_ent_edx_user()
        # Verify that user is on course enrollment page
        self.ent_course_enrollment.wait_for_page()

    def register_and_go_to_course_enrollment_page(self):
        """
        Flow which covers the user login on enterprise portal, selecting the
        course and then register to edx course enrollment page
        """
        # The edX site is visited just to make sure that when user jumps to
        # edX from portal we don't have to handle authentication popup
        self.lms_login.visit()
        # Enterprise portal flow
        self.login_to_ent_portal(ENT_PORTAL_USERNAME, ENT_PORTAL_PASSWORD)
        self.access_course()
        self.ent_edx_login.wait_for_page()
        self.register_ent_edx_user()
        # Verify that user is on course enrollment page
        self.ent_course_enrollment.wait_for_page()

    def payment_using_cyber_source(self):
        """
        Make payment for course by providing Billing Info and Payment details
        in respected areas.
        """
        self.cyber_source_page.set_card_holder_info(CARD_HOLDER_INFO)
        self.cyber_source_page.set_billing_info(BILLING_INFO)
        self.cyber_source_page.click_payment_button()
        self.receipt_page.wait_for_page()

    def register_edx_user(self):
        """
        Register the user using edX registration page
        """
        username, email = get_random_credentials()
        self.ent_edx_registration.visit()
        self.ent_edx_registration.register(email=email,
                                           full_name='Test User',
                                           username=username,
                                           password='******',
                                           country="US")
        self.dashboard.wait_for_page()

    def verify_info_is_populated_on_basket(self, discounted_price):
        """
        After User accept data sharing consent from landing pag
        verify that following information is
        displayed correctly on basket page:
        i) Enterprise offer is applied
        ii) Discounted amount

        Arguments:
            discounted_price(float): Discounted price of the course.
        """
        self.assertTrue(self.single_seat_basket.is_offer_applied())
        self.assertEqual(self.single_seat_basket.total_price_after_discount,
                         discounted_price)
        self.payment_using_cyber_source()

    def verify_receipt_info_for_discounted_course(self):
        """
        Verify that info on receipt page is correct.

        Verify
        i) Course title.
        ii) Order date
        """
        self.assertIn(ENT_COURSE_TITLE, self.receipt_page.order_desc)
        self.assertEqual(datetime.utcnow().strftime("%Y-%m-%d"),
                         self.receipt_page.order_date)
Exemplo n.º 5
0
class EnterpriseTestBase(WebAppTest):
    """
    Test Enterprise Login
    """

    def setUp(self):
        """
        Initialize all page objects
        """
        super(EnterpriseTestBase, self).setUp()
        self.browser.maximize_window()
        self.ent_portal_login = EnterprisePortalLogin(self.browser)
        self.ent_portal_home = EnterprisePortalHome(self.browser)
        self.ent_portal_course_start = \
            EnterprisePortalCourseStart(self.browser)
        self.ent_portal_course_structure = \
            EnterprisePortalCourseStructure(self.browser)
        self.ent_course_enrollment = \
            EnterpriseCourseEnrollment(self.browser)
        self.ent_data_sharing_consent = \
            EnterpriseDataSharingConsentPage(self.browser)
        self.ecommerce_courses_page = \
            EcommerceCoursesPage(self.browser)
        self.lms_login = LmsLogin(self.browser)
        self.ent_edx_registration = EnterpriseEdxRegistration(self.browser)
        self.ent_edx_login = EnterpriseEdxLogin(self.browser)
        self.dashboard = DashboardPageExtended(self.browser)
        self.courses_page = CoursesPage(self.browser)
        self.course_about_page = CourseAboutPageExtended(self.browser)
        self.track_selection_page = TrackSelectionPage(self.browser)
        self.user_account = UserAccountSettings(self.browser)
        self.cyber_source_page = CyberSourcePage(self.browser)
        self.single_seat_basket = SingleSeatBasketPage(self.browser)
        self.receipt_page = ReceiptPage(self.browser)
        self.lms_api_client = LmsApiClient()
        self.login_api = LmsLoginApi()
        self.logout_api = LogoutApi()

    def unlink_account(self):
        """
        Unlink IDP Account
        This serves as a fixture for unlinked user test case, it unlinks the
        user after running the tests to make sure that the precondition
        of test is true
        """
        # Visit account setting page
        self.user_account.visit()
        self.user_account.switch_account_settings_tabs('accounts-tab')
        # If linked account is found, unlink it
        if self.user_account.is_idp_account_linked(IDP_CSS_ID):
            self.user_account.unlink_idp_account(IDP_CSS_ID)
        # Logout using api
        self.logout_from_lms_using_api()

    def add_recovery_email(self, email):
        """
        Add secondary email address for enterprise learner
        """
        self.user_account.visit()
        self.user_account.fill_secondary_email_field(email)

    def login_to_ent_portal(self, ent_portal_username, ent_portal_password):
        """
        Login to enterprise portal and find the course and click on it
        """
        # Open portal
        self.ent_portal_login.visit()
        # Login
        self.ent_portal_login.login_to_portal(
            ent_portal_username,
            ent_portal_password)
        self.ent_portal_home.wait_for_page()

    def access_course(self):
        """
        Access the course from portal
        """
        # Open the course pop up and look for the desired course
        self.ent_portal_home.open_courses_popup()
        course_titles = self.ent_portal_home.fetch_course_titles_list()
        self.assert_(
            ENT_COURSE_TITLE in course_title
            for course_title in course_titles
        )
        # Go to course page and then use the link there to go to edX
        self.ent_portal_home.open_enterprise_course_page(
            ENT_COURSE_TITLE
        )
        self.ent_portal_course_start.wait_for_page()
        self.ent_portal_course_start.start_or_continue_course()
        self.ent_portal_course_structure.wait_for_page()
        self.ent_portal_course_structure.open_course_on_edx()
        # Get handle of newly opened edx window and switch control to it
        edx_window = self.driver.window_handles[1]
        self.driver.switch_to_window(edx_window)

    def login_ent_edx_user(self):
        """
        Login the user using edX customized logistration page
        """

        # edx credentials
        self.ent_edx_login.wait_for_page()
        self.assertEqual(
            ENTERPRISE_NAME,
            self.ent_edx_login.get_enterprise_name()
        )
        self.ent_edx_login.login(
            LOGIN_EMAIL,
            LOGIN_PASSWORD
        )

    def register_ent_edx_user(self):
        """
        Register the enterprise user using edX customized logistration page
        """
        __, email = get_random_credentials()
        self.ent_edx_registration.visit()
        self.assertEqual(
            ENTERPRISE_NAME,
            self.ent_edx_registration.get_enterprise_name()
        )
        self.ent_edx_registration.register(
            email=email,
            full_name='Enterprise Test User',
            country="US"
        )

    def logout_from_lms_using_api(self):
        """
        Get cookies from browser and send these cookie to python request to
        logout using api
        """

        self.logout_api.logout_url = '{}://{}/{}'.format(
            LMS_PROTOCOL,
            LMS_BASE_URL,
            'logout'
            )
        self.logout_api.cookies = self.browser.get_cookies()
        self.logout_api.logout()

    def login_user_lms_using_api(self):
        """
        Login user to LMS using login API
        """

        self.login_api.authenticate(self.browser)

    def login_and_go_to_course_enrollment_page(self):
        """
        Flow which covers the user login on enterprise portal, selecting the
        course and then login to edx course enrollment page
        """
        # The edX site is visited just to make sure that when user jumps to
        # edX from portal we don't have to handle authentication popup
        self.lms_login.visit()
        # Enterprise portal flow
        self.login_to_ent_portal(
            ENT_PORTAL_USERNAME,
            ENT_PORTAL_PASSWORD)
        self.access_course()
        self.login_ent_edx_user()
        # Verify that user is on course enrollment page
        self.ent_course_enrollment.wait_for_page()

    def register_and_go_to_course_enrollment_page(self):
        """
        Flow which covers the user login on enterprise portal, selecting the
        course and then register to edx course enrollment page
        """
        # The edX site is visited just to make sure that when user jumps to
        # edX from portal we don't have to handle authentication popup
        self.lms_login.visit()
        # Enterprise portal flow
        self.login_to_ent_portal(
            ENT_PORTAL_USERNAME,
            ENT_PORTAL_PASSWORD)
        self.access_course()
        self.ent_edx_login.wait_for_page()
        self.register_ent_edx_user()
        # Verify that user is on course enrollment page
        self.ent_course_enrollment.wait_for_page()

    def payment_using_cyber_source(self):
        """
        Make payment for course by providing Billing Info and Payment details
        in respected areas.
        """
        self.cyber_source_page.set_card_holder_info(CARD_HOLDER_INFO)
        self.cyber_source_page.set_billing_info(BILLING_INFO)
        self.cyber_source_page.click_payment_button()
        self.receipt_page.wait_for_page()

    def register_edx_user(self):
        """
        Register the user using edX registration page
        """
        username, email = get_random_credentials()
        self.ent_edx_registration.visit()
        self.ent_edx_registration.register(
            email=email,
            full_name='Test User',
            username=username,
            password='******',
            country="US"
        )
        self.dashboard.wait_for_page()

    def verify_info_is_populated_on_basket(self, discounted_price):
        """
        After User accept data sharing consent from landing pag
        verify that following information is
        displayed correctly on basket page:
        i) Enterprise offer is applied
        ii) Discounted amount

        Arguments:
            discounted_price(float): Discounted price of the course.
        """
        self.assertTrue(self.single_seat_basket.is_offer_applied())
        self.assertEqual(
            self.single_seat_basket.total_price_after_discount,
            discounted_price
        )
        self.payment_using_cyber_source()

    def verify_receipt_info_for_discounted_course(self):
        """
        Verify that info on receipt page is correct.

        Verify
        i) Course title.
        ii) Order date
        """
        self.assertIn(ENT_COURSE_TITLE, self.receipt_page.order_desc)
        self.assertEqual(
            datetime.utcnow().strftime("%Y-%m-%d"),
            self.receipt_page.order_date
        )