コード例 #1
0
    def test_get_lms_footer_timeout(self):
        """Verify behavior in the event of a timeout while retrieving LMS footer."""
        with mock.patch('requests.get', side_effect=requests.Timeout()):
            with mock.patch('ecommerce.extensions.api.data.logger.exception') as mock_logger:
                response = get_lms_footer()

                self.assertTrue(mock_logger.called)
                self.assertIsNone(response)
コード例 #2
0
ファイル: test_data.py プロジェクト: openfun/ecommerce
 def test_get_lms_footer_failure(self):
     """ Verify None is returned on a non-200 status code. """
     httpretty.register_uri(httpretty.GET,
                            self.footer_url,
                            status=404,
                            content_type='application/json')
     response = get_lms_footer()
     self.assertIsNone(response)
コード例 #3
0
 def test_get_lms_footer_success(self):
     """Verify footer information is retrieved."""
     content = {
         'footer': 'edX Footer'
     }
     content_json = json.dumps(content)
     httpretty.register_uri(httpretty.GET, self.footer_url, body=content_json, content_type='application/json')
     response = json.loads(get_lms_footer())
     self.assertEqual(response['footer'], 'edX Footer')
コード例 #4
0
ファイル: test_data.py プロジェクト: openfun/ecommerce
 def test_get_lms_footer_timeout(self):
     """ Verify proper logger message is displayed in case of a time out. """
     with mock.patch('requests.get', side_effect=requests.Timeout()):
         with LogCapture(LOGGER_NAME) as l:
             response = get_lms_footer()
             l.check((
                 LOGGER_NAME, 'ERROR',
                 u'Failed to retrieve data for {lms_url} provider, connection timeout'
                 .format(lms_url=settings.LMS_URL_ROOT)))
             self.assertIsNone(response)
コード例 #5
0
ファイル: test_data.py プロジェクト: openfun/ecommerce
 def test_get_lms_footer_success(self):
     """ Verify footer information is retrieved. """
     content = {'footer': 'edX Footer'}
     content_json = json.dumps(content)
     httpretty.register_uri(httpretty.GET,
                            self.footer_url,
                            body=content_json,
                            content_type='application/json')
     response = json.loads(get_lms_footer())
     self.assertEqual(response['footer'], 'edX Footer')
コード例 #6
0
 def get_context_data(self, **kwargs):
     context = super(CouponOfferView, self).get_context_data(**kwargs)
     footer = get_lms_footer()
     code = self.request.GET.get('code', None)
     if code is not None:
         voucher, product = get_voucher(code=code)
         valid_voucher, msg = voucher_is_valid(voucher, product,
                                               self.request)
         if valid_voucher:
             api = EdxRestApiClient(get_lms_url('api/courses/v1/'), )
             try:
                 course = api.courses(product.course_id).get()
             except SlumberHttpBaseException as e:
                 logger.exception('Could not get course information. [%s]',
                                  e)
                 return {
                     'error':
                     _('Could not get course information. [{error}]'.format(
                         error=e)),
                     'footer':
                     footer
                 }
             course['image_url'] = get_lms_url(
                 course['media']['course_image']['uri'])
             stock_records = voucher.offers.first(
             ).benefit.range.catalog.stock_records.first()
             benefit_type = voucher.offers.first().benefit.type
             benefit_value = voucher.offers.first().benefit.value
             price = stock_records.price_excl_tax
             if benefit_type == 'Percentage':
                 new_price = price - (price * (benefit_value / 100))
             else:
                 new_price = price - benefit_value
                 if new_price < 0:
                     new_price = 0.00
             context.update({
                 'benefit_type':
                 benefit_type,
                 'benefit_value':
                 benefit_value,
                 'course':
                 course,
                 'code':
                 code,
                 'price':
                 price,
                 'new_price':
                 "%.2f" % new_price,
                 'verified': (product.attr.certificate_type == 'verified'),
                 'footer':
                 footer
             })
             return context
         return {'error': msg, 'footer': footer}
     return {'error': _('This coupon code is invalid.'), 'footer': footer}
コード例 #7
0
ファイル: test_data.py プロジェクト: openfun/ecommerce
 def test_get_lms_footer_conn_error(self):
     """ Verify proper logger message is displayed in case of a connection error. """
     with mock.patch('requests.get',
                     side_effect=requests.exceptions.ConnectionError()):
         with LogCapture(LOGGER_NAME) as l:
             response = get_lms_footer()
             l.check((
                 LOGGER_NAME, 'ERROR',
                 u'Connection error occurred during getting data for {lms_url} provider'
                 .format(lms_url=settings.LMS_URL_ROOT)))
             self.assertIsNone(response)
コード例 #8
0
ファイル: views.py プロジェクト: pjha1994/ecommerce-1
 def get_context_data(self, **kwargs):
     context = super(CouponOfferView, self).get_context_data(**kwargs)
     footer = get_lms_footer()
     code = self.request.GET.get('code', None)
     if code is not None:
         voucher, product = get_voucher_from_code(code=code)
         valid_voucher, msg = voucher_is_valid(voucher, product, self.request)
         if valid_voucher:
             api = EdxRestApiClient(
                 get_lms_url('api/courses/v1/'),
             )
             try:
                 course = api.courses(product.course_id).get()
             except SlumberHttpBaseException as e:
                 logger.exception('Could not get course information. [%s]', e)
                 return {
                     'error': _('Could not get course information. [{error}]'.format(error=e)),
                     'footer': footer
                 }
             course['image_url'] = get_lms_url(course['media']['course_image']['uri'])
             benefit = voucher.offers.first().benefit
             stock_record = benefit.range.catalog.stock_records.first()
             price = stock_record.price_excl_tax
             context.update(get_voucher_discount_info(benefit, price))
             if benefit.type == 'Percentage':
                 new_price = price - (price * (benefit.value / 100))
             else:
                 new_price = price - benefit.value
                 if new_price < 0:
                     new_price = Decimal(0)
             context.update({
                 'benefit': benefit,
                 'course': course,
                 'code': code,
                 'is_discount_value_percentage': benefit.type == 'Percentage',
                 'is_enrollment_code': benefit.type == Benefit.PERCENTAGE and benefit.value == 100.00,
                 'discount_value': "%.2f" % (price - new_price),
                 'price': price,
                 'new_price': "%.2f" % new_price,
                 'verified': (product.attr.certificate_type == 'verified'),
                 'verification_deadline': product.course.verification_deadline,
                 'footer': footer
             })
             return context
         return {
             'error': msg,
             'footer': footer
         }
     return {
         'error': _('This coupon code is invalid.'),
         'footer': footer
     }
コード例 #9
0
ファイル: test_data.py プロジェクト: openfun/ecommerce
 def test_get_lms_footer_timeout(self):
     """ Verify proper logger message is displayed in case of a time out. """
     with mock.patch('requests.get', side_effect=requests.Timeout()):
         with LogCapture(LOGGER_NAME) as l:
             response = get_lms_footer()
             l.check(
                 (
                     LOGGER_NAME, 'ERROR',
                     u'Failed to retrieve data for {lms_url} provider, connection timeout'.format(
                         lms_url=settings.LMS_URL_ROOT
                     )
                 )
             )
             self.assertIsNone(response)
コード例 #10
0
ファイル: test_data.py プロジェクト: openfun/ecommerce
 def test_get_lms_footer_conn_error(self):
     """ Verify proper logger message is displayed in case of a connection error. """
     with mock.patch('requests.get', side_effect=requests.exceptions.ConnectionError()):
         with LogCapture(LOGGER_NAME) as l:
             response = get_lms_footer()
             l.check(
                 (
                     LOGGER_NAME, 'ERROR',
                     u'Connection error occurred during getting data for {lms_url} provider'.format(
                         lms_url=settings.LMS_URL_ROOT
                     )
                 )
             )
             self.assertIsNone(response)
コード例 #11
0
ファイル: views.py プロジェクト: pjha1994/ecommerce-1
    def get_context_data(self, **kwargs):
        context = super(BasketSummaryView, self).get_context_data(**kwargs)
        lines = context.get('line_list', [])
        api = EdxRestApiClient(get_lms_url('api/courses/v1/'))
        for line in lines:
            course_id = line.product.course_id

            # Get each course type so we can display to the user at checkout.
            try:
                line.certificate_type = get_certificate_type_display_value(line.product.attr.certificate_type)
            except ValueError:
                line.certificate_type = None

            cache_key = 'courses_api_detail_{}'.format(course_id)
            cache_hash = hashlib.md5(cache_key).hexdigest()
            try:
                course = cache.get(cache_hash)
                if not course:
                    course = api.courses(course_id).get()
                    course['image_url'] = get_lms_url(course['media']['course_image']['uri'])
                    cache.set(cache_hash, course, settings.COURSES_API_CACHE_TIMEOUT)
                line.course = course
            except (ConnectionError, SlumberBaseException, Timeout):
                logger.exception('Failed to retrieve data from Course API for course [%s].', course_id)

            if line.has_discount:
                line.discount_percentage = line.discount_value / line.unit_price_incl_tax * Decimal(100)
            else:
                line.discount_percentage = 0

        context.update({
            'payment_processors': self.get_payment_processors(),
            'homepage_url': get_lms_url(''),
            'footer': get_lms_footer(),
            'lines': lines,
            'faq_url': get_lms_url('') + '/verified-certificate',
        })
        return context
コード例 #12
0
 def test_get_lms_footer_failure(self):
     """Verify None is returned on a non-200 status code while retrieving LMS footer."""
     httpretty.register_uri(httpretty.GET, self.footer_url, status=404, content_type='application/json')
     response = get_lms_footer()
     self.assertIsNone(response)