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
4067da49
Commit
4067da49
authored
Oct 26, 2016
by
Ivan Ivic
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
[SOL-1975] Code | Offer Page - Display in order of Course Launch Date
parent
fa4b18dd
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
27 additions
and
12 deletions
+27
-12
ecommerce/coupons/utils.py
+6
-4
ecommerce/extensions/api/v2/tests/views/test_vouchers.py
+15
-4
ecommerce/extensions/api/v2/views/vouchers.py
+6
-4
No files found.
ecommerce/coupons/utils.py
View file @
4067da49
...
...
@@ -8,7 +8,7 @@ from oscar.core.loading import get_model
Product
=
get_model
(
'catalogue'
,
'Product'
)
def
get_range_catalog_query_results
(
limit
,
query
,
site
,
offset
=
None
):
def
get_range_catalog_query_results
(
limit
,
query
,
site
,
offset
=
None
,
ordering
=
None
):
"""
Get catalog query results
...
...
@@ -17,20 +17,22 @@ def get_range_catalog_query_results(limit, query, site, offset=None):
query (str): ElasticSearch Query
site (Site): Site object containing Site Configuration data
offset (int): Page offset
ordering (str): Course Discovery results ordering (only start is enabled for now)
Returns:
dict: Query seach results received from Course Catalog API
dict: Query sea
r
ch results received from Course Catalog API
"""
partner_code
=
site
.
siteconfiguration
.
partner
.
short_code
cache_key
=
'course_runs_{}_{}_{}_{}
'
.
format
(
query
,
limit
,
offset
,
partner_code
)
cache_key
=
'course_runs_{}_{}_{}_{}
_{}'
.
format
(
query
,
limit
,
offset
,
partner_code
,
ordering
)
cache_hash
=
hashlib
.
md5
(
cache_key
)
.
hexdigest
()
response
=
cache
.
get
(
cache_hash
)
if
not
response
:
response
=
site
.
siteconfiguration
.
course_catalog_api_client
.
course_runs
.
get
(
limit
=
limit
,
offset
=
offset
,
ordering
=
ordering
,
partner
=
partner_code
,
q
=
query
,
partner
=
partner_code
)
cache
.
set
(
cache_hash
,
response
,
settings
.
COURSES_API_CACHE_TIMEOUT
)
return
response
...
...
ecommerce/extensions/api/v2/tests/views/test_vouchers.py
View file @
4067da49
...
...
@@ -82,28 +82,29 @@ class VoucherViewSetTests(CourseCatalogMockMixin, CourseCatalogTestMixin, LmsApi
'next'
:
'path/to/the/next/page'
,
'results'
:
[]
}
dates
=
[
'2015-05-01T00:00:00Z'
,
'2016-05-01T00:00:00Z'
,
'2014-05-01T00:00:00Z'
]
products
=
[]
new_range
,
__
=
Range
.
objects
.
get_or_create
(
catalog_query
=
'*:*'
,
course_seat_types
=
seat_type
)
if
seats
:
for
seat
in
seats
:
for
i
,
seat
in
enumerate
(
seats
)
:
course_run_info
[
'results'
]
.
append
({
'image'
:
{
'src'
:
'path/to/the/course/image'
},
'key'
:
seat
.
course_id
,
'start'
:
'2016-05-01T00:00:00Z'
,
'start'
:
dates
[
i
%
3
]
,
'title'
:
seat
.
title
,
})
new_range
.
add_product
(
seat
)
else
:
for
_
in
range
(
quantity
):
for
i
in
range
(
quantity
):
course
,
seat
=
self
.
create_course_and_seat
(
seat_type
=
seat_type
)
course_run_info
[
'results'
]
.
append
({
'image'
:
{
'src'
:
'path/to/the/course/image'
},
'key'
:
course
.
id
,
'start'
:
'2016-05-01T00:00:00Z'
,
'start'
:
dates
[
i
%
3
]
,
'title'
:
course
.
name
,
})
new_range
.
add_product
(
seat
)
...
...
@@ -122,6 +123,16 @@ class VoucherViewSetTests(CourseCatalogMockMixin, CourseCatalogTestMixin, LmsApi
@httpretty.activate
@mock_course_catalog_api_client
def
test_get_offers_return_sorted_offers
(
self
):
""" Verify get_offers sorts the offers returned by start date """
__
,
request
,
voucher
=
self
.
prepare_get_offers_response
(
quantity
=
3
)
offers
=
VoucherViewSet
()
.
get_offers
(
request
=
request
,
voucher
=
voucher
)[
'results'
]
self
.
assertTrue
(
offers
[
0
][
'course_start_date'
]
<
offers
[
1
][
'course_start_date'
]
<
offers
[
2
][
'course_start_date'
]
)
@httpretty.activate
@mock_course_catalog_api_client
def
test_omitting_unavailable_seats
(
self
):
""" Verify an unavailable seat is omitted from offer page results. """
products
,
request
,
voucher
=
self
.
prepare_get_offers_response
(
quantity
=
2
)
...
...
ecommerce/extensions/api/v2/views/vouchers.py
View file @
4067da49
...
...
@@ -109,13 +109,14 @@ class VoucherViewSet(NonDestroyableModelViewSet):
stock_records
=
StockRecord
.
objects
.
filter
(
product__in
=
products
)
return
products
,
stock_records
def
get_offers_from_query
(
self
,
request
,
voucher
,
catalog_query
):
def
get_offers_from_query
(
self
,
request
,
voucher
,
catalog_query
,
ordering
=
None
):
""" Helper method for collecting offers from catalog query.
Args:
request (WSGIRequest): Request data.
voucher (Voucher): Oscar Voucher for which the offers are returned.
catalog_query (str): The query for the Course Discovery.
ordering (str): Course Discovery results ordering (only start is enabled for now)
Returns:
A list of dictionaries with retrieved offers and a link to the next
...
...
@@ -130,8 +131,9 @@ class VoucherViewSet(NonDestroyableModelViewSet):
response
=
get_range_catalog_query_results
(
limit
=
request
.
GET
.
get
(
'limit'
,
DEFAULT_CATALOG_PAGE_SIZE
),
offset
=
request
.
GET
.
get
(
'offset'
),
ordering
=
ordering
,
query
=
catalog_query
,
site
=
request
.
site
site
=
request
.
site
,
)
next_page
=
response
[
'next'
]
products
,
stock_records
=
self
.
retrieve_course_objects
(
response
[
'results'
],
course_seat_types
)
...
...
@@ -189,7 +191,7 @@ class VoucherViewSet(NonDestroyableModelViewSet):
voucher
=
voucher
))
return
offers
,
next_page
return
sorted
(
offers
,
key
=
lambda
offer
:
offer
[
'course_start_date'
])
,
next_page
def
get_offers
(
self
,
request
,
voucher
):
"""
...
...
@@ -207,7 +209,7 @@ class VoucherViewSet(NonDestroyableModelViewSet):
offers
=
[]
if
catalog_query
:
offers
,
next_page
=
self
.
get_offers_from_query
(
request
,
voucher
,
catalog_query
)
offers
,
next_page
=
self
.
get_offers_from_query
(
request
,
voucher
,
catalog_query
,
ordering
=
'start'
)
else
:
product_range
=
voucher
.
offers
.
first
()
.
benefit
.
range
products
=
product_range
.
all_products
()
...
...
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