Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
ecommerce
Overview
Overview
Details
Activity
Cycle Analytics
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Charts
Issues
0
Issues
0
List
Board
Labels
Milestones
Merge Requests
0
Merge Requests
0
CI / CD
CI / CD
Pipelines
Jobs
Schedules
Charts
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Charts
Create a new issue
Jobs
Commits
Issue Boards
Open sidebar
edx
ecommerce
Commits
49ca9db0
Commit
49ca9db0
authored
Jun 06, 2016
by
Vedran Karacic
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Remove deprecated get_course_catalog_api_client.
parent
8a514a63
Hide whitespace changes
Inline
Side-by-side
Showing
9 changed files
with
57 additions
and
85 deletions
+57
-85
ecommerce/core/tests/decorators.py
+43
-0
ecommerce/core/url_utils.py
+0
-18
ecommerce/coupons/tests/test_utils.py
+2
-10
ecommerce/coupons/utils.py
+1
-3
ecommerce/extensions/api/v2/tests/views/test_catalog.py
+3
-16
ecommerce/extensions/api/v2/tests/views/test_coupons.py
+2
-10
ecommerce/extensions/api/v2/views/catalog.py
+1
-3
ecommerce/extensions/offer/models.py
+1
-2
ecommerce/extensions/offer/tests/test_models.py
+4
-23
No files found.
ecommerce/core/tests/decorators.py
0 → 100644
View file @
49ca9db0
""" 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
)
ecommerce/core/url_utils.py
View file @
49ca9db0
...
...
@@ -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
ecommerce/coupons/tests/test_utils.py
View file @
49ca9db0
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
()
...
...
ecommerce/coupons/utils.py
View file @
49ca9db0
""" 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
:
...
...
ecommerce/extensions/api/v2/tests/views/test_catalog.py
View file @
49ca9db0
...
...
@@ -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*'
...
...
ecommerce/extensions/api/v2/tests/views/test_coupons.py
View file @
49ca9db0
...
...
@@ -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:*'
...
...
ecommerce/extensions/api/v2/views/catalog.py
View file @
49ca9db0
...
...
@@ -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.'
)
...
...
ecommerce/extensions/offer/models.py
View file @
49ca9db0
...
...
@@ -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
)
...
...
ecommerce/extensions/offer/tests/test_models.py
View file @
49ca9db0
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.
...
...
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment