Commit 49ca9db0 by Vedran Karacic

Remove deprecated get_course_catalog_api_client.

parent 8a514a63
""" Custom test decorators. """
import functools
import mock
from django.conf import settings
from edx_rest_api_client.client import EdxRestApiClient
def mock_course_catalog_api_client(test):
"""
Custom decorator for mocking the course_catalog_api_client property of siteconfiguration
to return a new instance of EdxRestApiClient with a dummy jwt value.
"""
def decorate_class(klass):
for attr in dir(klass):
# Decorate only callable unit tests.
if not attr.startswith('test_'):
continue
attr_value = getattr(klass, attr)
if not hasattr(attr_value, "__call__"):
continue
setattr(klass, attr, decorate_callable(attr_value))
return klass
def decorate_callable(test):
@functools.wraps(test)
def wrapper(*args, **kw):
with mock.patch(
'ecommerce.core.models.SiteConfiguration.course_catalog_api_client',
mock.PropertyMock(return_value=EdxRestApiClient(
settings.COURSE_CATALOG_API_URL,
jwt='auth-token'
))
):
return test(*args, **kw)
return wrapper
if isinstance(test, type):
return decorate_class(test)
return decorate_callable(test)
......@@ -75,21 +75,3 @@ def get_lms_url(path=''):
def get_oauth2_provider_url():
site_configuration = _get_site_configuration()
return site_configuration.oauth2_provider_url
def get_course_catalog_api_client(site):
"""
Returns an API client to access the Course Catalog service.
This function is deprecated. Use site.siteconfiguration.course_catalog_api_client.
Arguments:
site (Site): The site for which to retrieve settings.
Returns:
EdxRestApiClient: The client to access the Course Catalog service.
"""
warnings.warn('Usage of get_course_catalog_api_client is deprecated. '
'Use SiteConfiguration.course_catalog_api_client.', DeprecationWarning)
return site.siteconfiguration.course_catalog_api_client
import httpretty
import mock
from django.conf import settings
from edx_rest_api_client.client import EdxRestApiClient
from ecommerce.core.tests.decorators import mock_course_catalog_api_client
from ecommerce.coupons.tests.mixins import CatalogPreviewMockMixin, CouponMixin
from ecommerce.coupons.utils import get_seats_from_query
from ecommerce.extensions.catalogue.tests.mixins import CourseCatalogTestMixin
......@@ -10,13 +8,7 @@ from ecommerce.tests.testcases import TestCase
@httpretty.activate
@mock.patch(
'ecommerce.coupons.utils.get_course_catalog_api_client',
mock.Mock(return_value=EdxRestApiClient(
settings.COURSE_CATALOG_API_URL,
jwt='auth-token'
))
)
@mock_course_catalog_api_client
class CouponUtilsTests(CouponMixin, CourseCatalogTestMixin, CatalogPreviewMockMixin, TestCase):
def setUp(self):
super(CouponUtilsTests, self).setUp()
......
""" Coupon related utility functions. """
from oscar.core.loading import get_model
from ecommerce.core.url_utils import get_course_catalog_api_client
Product = get_model('catalogue', 'Product')
......@@ -18,7 +16,7 @@ def get_seats_from_query(site, query, seat_types):
Returns:
List of seat products retrieved from the course catalog query.
"""
response = get_course_catalog_api_client(site).course_runs.get(q=query)
response = site.siteconfiguration.course_catalog_api_client.course_runs.get(q=query)
query_products = []
for result in response['results']:
try:
......
......@@ -2,15 +2,14 @@ import json
import ddt
import httpretty
import mock
from django.conf import settings
from django.core.urlresolvers import reverse
from django.test import RequestFactory
from edx_rest_api_client.client import EdxRestApiClient
from oscar.core.loading import get_model
from requests.exceptions import ConnectionError, Timeout
from slumber.exceptions import SlumberBaseException
from ecommerce.core.tests.decorators import mock_course_catalog_api_client
from ecommerce.coupons.tests.mixins import CatalogPreviewMockMixin
from ecommerce.extensions.api.serializers import ProductSerializer
from ecommerce.extensions.api.v2.tests.views.mixins import CatalogMixin
......@@ -108,13 +107,7 @@ class CatalogViewSetTest(CatalogMixin, CatalogPreviewMockMixin, ApiMockMixin, Te
('/api/v2/coupons/preview/?query=id:course*', 200)
)
@ddt.unpack
@mock.patch(
'ecommerce.extensions.api.v2.views.catalog.get_course_catalog_api_client',
mock.Mock(return_value=EdxRestApiClient(
settings.COURSE_CATALOG_API_URL,
jwt='auth-token'
))
)
@mock_course_catalog_api_client
def test_preview_catalog_query_results(self, url, status_code):
"""Test catalog query preview."""
self.mock_dynamic_catalog_course_runs_api()
......@@ -125,13 +118,7 @@ class CatalogViewSetTest(CatalogMixin, CatalogPreviewMockMixin, ApiMockMixin, Te
self.assertEqual(response.status_code, status_code)
@ddt.data(ConnectionError, SlumberBaseException, Timeout)
@mock.patch(
'ecommerce.extensions.api.v2.views.catalog.get_course_catalog_api_client',
mock.Mock(return_value=EdxRestApiClient(
settings.COURSE_CATALOG_API_URL,
jwt='auth-token'
))
)
@mock_course_catalog_api_client
def test_preview_catalog_course_discovery_service_not_available(self, error):
"""Test catalog query preview when course discovery is not available."""
url = '/api/v2/coupons/preview/?query=id:course*'
......
......@@ -6,17 +6,15 @@ from decimal import Decimal
import ddt
import httpretty
import mock
from django.conf import settings
from django.core.urlresolvers import reverse
from django.db.utils import IntegrityError
from django.test import RequestFactory
from edx_rest_api_client.client import EdxRestApiClient
from oscar.apps.catalogue.categories import create_from_breadcrumbs
from oscar.core.loading import get_class, get_model
from oscar.test import factories
from rest_framework import status
from ecommerce.core.tests.decorators import mock_course_catalog_api_client
from ecommerce.coupons.tests.mixins import CatalogPreviewMockMixin, CouponMixin
from ecommerce.courses.tests.factories import CourseFactory
from ecommerce.extensions.api.constants import APIConstants as AC
......@@ -508,13 +506,7 @@ class CouponViewSetFunctionalTest(CouponMixin, CourseCatalogTestMixin, CatalogPr
self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
@httpretty.activate
@mock.patch(
'ecommerce.coupons.utils.get_course_catalog_api_client',
mock.Mock(return_value=EdxRestApiClient(
settings.COURSE_CATALOG_API_URL,
jwt='auth-token'
))
)
@mock_course_catalog_api_client
def test_dynamic_catalog_coupon(self):
""" Verify dynamic range values are returned. """
catalog_query = 'key:*'
......
......@@ -11,7 +11,6 @@ from rest_framework_extensions.mixins import NestedViewSetMixin
from slumber.exceptions import SlumberBaseException
from ecommerce.extensions.api import serializers
from ecommerce.core.url_utils import get_course_catalog_api_client
Catalog = get_model('catalogue', 'Catalog')
......@@ -40,8 +39,7 @@ class CatalogViewSet(NestedViewSetMixin, ReadOnlyModelViewSet):
query = request.GET.get('query', '')
if query:
try:
api = get_course_catalog_api_client(request.site)
response = api.course_runs.get(q=query)
response = request.site.siteconfiguration.course_catalog_api_client.course_runs.get(q=query)
return Response(response)
except (ConnectionError, SlumberBaseException, Timeout):
logger.error('Unable to connect to Course Catalog service.')
......
......@@ -3,7 +3,6 @@ from django.db import models
from oscar.apps.offer.abstract_models import AbstractRange
from threadlocals.threadlocals import get_current_request
from ecommerce.core.url_utils import get_course_catalog_api_client
from ecommerce.coupons.utils import get_seats_from_query
......@@ -18,7 +17,7 @@ class Range(AbstractRange):
"""
request = get_current_request()
try:
response = get_course_catalog_api_client(request.site).course_runs.contains.get(
response = request.site.siteconfiguration.course_catalog_api_client.course_runs.contains.get(
query=self.catalog_query,
course_run_ids=product.course_id
)
......
import httpretty
import mock
from django.conf import settings
from django.test import RequestFactory
from edx_rest_api_client.client import EdxRestApiClient
from oscar.core.loading import get_model
from oscar.test import factories
from ecommerce.core.tests.decorators import mock_course_catalog_api_client
from ecommerce.coupons.tests.mixins import CatalogPreviewMockMixin, CouponMixin
from ecommerce.extensions.catalogue.tests.mixins import CourseCatalogTestMixin
from ecommerce.tests.testcases import TestCase
......@@ -65,13 +64,7 @@ class RangeTests(CouponMixin, CourseCatalogTestMixin, CatalogPreviewMockMixin, T
self.range.run_catalog_query(self.product)
@httpretty.activate
@mock.patch(
'ecommerce.extensions.offer.models.get_course_catalog_api_client',
mock.Mock(return_value=EdxRestApiClient(
settings.COURSE_CATALOG_API_URL,
jwt='auth-token'
))
)
@mock_course_catalog_api_client
def test_run_catalog_query(self):
"""
run_course_query() should return True for included course run ID's.
......@@ -86,13 +79,7 @@ class RangeTests(CouponMixin, CourseCatalogTestMixin, CatalogPreviewMockMixin, T
self.assertTrue(response['course_runs'][course.id])
@httpretty.activate
@mock.patch(
'ecommerce.extensions.offer.models.get_course_catalog_api_client',
mock.Mock(return_value=EdxRestApiClient(
settings.COURSE_CATALOG_API_URL,
jwt='auth-token'
))
)
@mock_course_catalog_api_client
def test_query_range_contains_product(self):
"""
contains_product() should return the correct boolean if a product is in it's range.
......@@ -108,13 +95,7 @@ class RangeTests(CouponMixin, CourseCatalogTestMixin, CatalogPreviewMockMixin, T
self.assertTrue(response)
@httpretty.activate
@mock.patch(
'ecommerce.coupons.utils.get_course_catalog_api_client',
mock.Mock(return_value=EdxRestApiClient(
settings.COURSE_CATALOG_API_URL,
jwt='auth-token'
))
)
@mock_course_catalog_api_client
def test_query_range_all_products(self):
"""
all_products() should return seats from the query.
......
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment