def get_course_discount_info(self): """ Get course discount info Returns: dict: A dictionary with keys for course price, discount value, benefit type and discounted price. """ course_price_str = self.q( css=self.course_tile_css + ' .discount-mc-price-group .course-price>span' ).text[0] benefit_value_str = self.q( css=self.course_tile_css + ' .discount-percentage>p' ).text[0] discounted_price_str = self.q( css=self.course_tile_css + ' .discount-mc-price-group .course-new-price>span' ).text[0] return { 'course_price': extract_numerical_value_from_price_string( course_price_str ), 'benefit_value': extract_numerical_value_from_price_string( benefit_value_str ), 'discounted_price': extract_numerical_value_from_price_string( discounted_price_str ), 'benefit_type': self.benefit_type }
def get_course_discount_info(self): """ Get course discount info Returns: dict: A dictionary with keys for course price, discount value, benefit type and discounted price. """ course_price_str = self.q( css=self.course_tile_css + ' .discount-mc-price-group .course-price>span').text[0] benefit_value_str = self.q(css=self.course_tile_css + ' .discount-percentage>p').text[0] discounted_price_str = self.q( css=self.course_tile_css + ' .discount-mc-price-group .course-new-price>span').text[0] return { 'course_price': extract_numerical_value_from_price_string(course_price_str), 'benefit_value': extract_numerical_value_from_price_string(benefit_value_str), 'discounted_price': extract_numerical_value_from_price_string(discounted_price_str), 'benefit_type': self.benefit_type }
def test_enterprise_percentage_offer(self): """ Scenario: To verify that user sees the correct discount percentage info and detail on enterprise landing page, basket page and on receipt page. """ # Login user to LMS using staff credentials self.login_user_lms_using_api() # Get all enterprise offers data using api request offers_response = self.login_api.get_offer_request(self.target_url) # Get discount value from response against catalog UUID discount_value = extract_discount_value_from_response( ENT_CUSTOMER_CATALOG_UUID, offers_response ) discounted_course_price = self.course_price - \ (self.course_price * discount_value) / 100 self.logout_from_lms_using_api() self.ecommerce_courses_page.visit() self.register_and_go_to_course_enrollment_page() # Call the fixture to unlink existing account for the user self.addCleanup(self.unlink_account) # Get course original price and course discounted price price_details = \ self.ent_course_enrollment.get_course_price_details().split() # extract_numerical_value_from_price_string(price_details) self.assertEqual( self.course_price, extract_numerical_value_from_price_string(price_details[1]) ) self.assertEqual( discounted_course_price, extract_numerical_value_from_price_string(price_details[3]) ) self.assertIn( self.DISCOUNT_MSG + ENTERPRISE_NAME, self.ent_course_enrollment.get_course_price_details() ) self.ent_course_enrollment.go_to_data_consent_page() self.ent_data_sharing_consent.wait_for_page() # Verify that accepting data consent takes user to basket page self.ent_data_sharing_consent.accept_data_sharing_consent() SingleSeatBasketPage(self.browser).wait_for_page() self.verify_info_is_populated_on_basket( discounted_course_price ) self.verify_receipt_info_for_discounted_course()
def total_price(self): """ Get the total price Returns: float: total price """ raw_price = self.q(css='#basket-total .price').text[0] return extract_numerical_value_from_price_string(raw_price)
def course_price(self): """ Get the course price Returns: float: course price """ raw_price = self.q(css='#line-price .price').text[0] return extract_numerical_value_from_price_string(raw_price)
def total_price_after_discount(self): """ Get the total price after discount Returns: float: price after discount. """ raw_price = self.q(css='#basket-total .price').text[0] return extract_numerical_value_from_price_string(raw_price)
def test_extract_numerical_value_from_price_string_invalid(self, value): """ Test that in case the regex search is not successful a meaningful message is displayed Args: value: """ self.assertEqual(extract_numerical_value_from_price_string(value), 'No numerical value found in search string')
def total_amount(self): """ Get the total amount Returns: total amount. """ total_amount = self.q( css='.order-total:nth-of-type(2)>.price' ).text[0] return extract_numerical_value_from_price_string(total_amount)
def order_amount(self): """ Get the order amount from receipt Returns: order amount. """ amount = self.q( css='.line-price.price' ).text[0] return extract_numerical_value_from_price_string(amount)
def test_extract_numerical_value_from_price_string_with_floats( self, price_strings, result): """ Test that regex is correctly extracting the floating point value from the string in different cases. Also test that in case the regex search is not successful a meaningful message is displayed Args: price_strings: result: """ self.assertEqual( extract_numerical_value_from_price_string(price_strings), result)
def test_extract_numerical_value_from_price_string_invalid( self, value ): """ Test that in case the regex search is not successful a meaningful message is displayed Args: value: """ self.assertEqual( extract_numerical_value_from_price_string(value), 'No numerical value found in search string' )
def test_extract_numerical_value_from_price_string_with_floats( self, price_strings, result ): """ Test that regex is correctly extracting the floating point value from the string in different cases. Also test that in case the regex search is not successful a meaningful message is displayed Args: price_strings: result: """ self.assertEqual( extract_numerical_value_from_price_string(price_strings), result )