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
3e3ca2da
Commit
3e3ca2da
authored
Sep 02, 2015
by
Awais Qureshi
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #303 from edx/awais786/XCOM-554-expired-course-price
Adding new strategy for admin users.
parents
91de6da5
5478e680
Hide whitespace changes
Inline
Side-by-side
Showing
3 changed files
with
40 additions
and
9 deletions
+40
-9
ecommerce/extensions/api/serializers.py
+3
-2
ecommerce/extensions/partner/strategy.py
+10
-5
ecommerce/extensions/partner/tests/test_strategy.py
+27
-2
No files found.
ecommerce/extensions/api/serializers.py
View file @
3e3ca2da
...
@@ -70,8 +70,9 @@ class ProductSerializer(serializers.HyperlinkedModelSerializer):
...
@@ -70,8 +70,9 @@ class ProductSerializer(serializers.HyperlinkedModelSerializer):
return
None
return
None
def
_get_info
(
self
,
product
):
def
_get_info
(
self
,
product
):
info
=
Selector
()
.
strategy
()
.
fetch_for_product
(
product
)
return
Selector
()
.
strategy
(
return
info
request
=
self
.
context
.
get
(
'request'
)
)
.
fetch_for_product
(
product
)
def
get_is_available_to_buy
(
self
,
product
):
def
get_is_available_to_buy
(
self
,
product
):
info
=
self
.
_get_info
(
product
)
info
=
self
.
_get_info
(
product
)
...
...
ecommerce/extensions/partner/strategy.py
View file @
3e3ca2da
...
@@ -18,12 +18,17 @@ class CourseSeatAvailabilityPolicyMixin(strategy.StockRequired):
...
@@ -18,12 +18,17 @@ class CourseSeatAvailabilityPolicyMixin(strategy.StockRequired):
return
ProductClass
.
objects
.
get
(
slug
=
'seat'
)
return
ProductClass
.
objects
.
get
(
slug
=
'seat'
)
def
availability_policy
(
self
,
product
,
stockrecord
):
def
availability_policy
(
self
,
product
,
stockrecord
):
""" A seat is unavailable if the current date is beyond the seat's expiration date. """
""" A product is unavailable for non-admin users if the current date is
if
product
.
expires
and
timezone
.
now
()
>
product
.
expires
:
beyond the product's expiration date. Products are always available for admin users.
"""
is_staff
=
getattr
(
self
.
user
,
'is_staff'
,
False
)
is_available
=
product
.
expires
is
None
or
(
product
.
expires
>=
timezone
.
now
())
if
is_staff
or
is_available
:
return
super
(
CourseSeatAvailabilityPolicyMixin
,
self
)
.
availability_policy
(
product
,
stockrecord
)
else
:
return
availability
.
Unavailable
()
return
availability
.
Unavailable
()
return
super
(
CourseSeatAvailabilityPolicyMixin
,
self
)
.
availability_policy
(
product
,
stockrecord
)
class
DefaultStrategy
(
strategy
.
UseFirstStockRecord
,
CourseSeatAvailabilityPolicyMixin
,
class
DefaultStrategy
(
strategy
.
UseFirstStockRecord
,
CourseSeatAvailabilityPolicyMixin
,
strategy
.
NoTax
,
strategy
.
Structured
):
strategy
.
NoTax
,
strategy
.
Structured
):
...
@@ -32,4 +37,4 @@ class DefaultStrategy(strategy.UseFirstStockRecord, CourseSeatAvailabilityPolicy
...
@@ -32,4 +37,4 @@ class DefaultStrategy(strategy.UseFirstStockRecord, CourseSeatAvailabilityPolicy
class
Selector
(
object
):
class
Selector
(
object
):
def
strategy
(
self
,
request
=
None
,
user
=
None
,
**
kwargs
):
# pylint: disable=unused-argument
def
strategy
(
self
,
request
=
None
,
user
=
None
,
**
kwargs
):
# pylint: disable=unused-argument
return
DefaultStrategy
()
return
DefaultStrategy
(
request
if
hasattr
(
request
,
'user'
)
else
None
)
ecommerce/extensions/partner/tests/test_strategy.py
View file @
3e3ca2da
import
datetime
import
datetime
import
ddt
from
django.test
import
TestCase
from
django.test
import
TestCase
,
RequestFactory
from
oscar.apps.partner
import
availability
from
oscar.apps.partner
import
availability
import
pytz
import
pytz
from
ecommerce.courses.models
import
Course
from
ecommerce.courses.models
import
Course
from
ecommerce.extensions.catalogue.tests.mixins
import
CourseCatalogTestMixin
from
ecommerce.extensions.catalogue.tests.mixins
import
CourseCatalogTestMixin
from
ecommerce.extensions.partner.strategy
import
DefaultStrategy
,
Selector
from
ecommerce.extensions.partner.strategy
import
DefaultStrategy
,
Selector
from
ecommerce.tests.mixins
import
UserMixin
class
DefaultStrategyTests
(
CourseCatalogTestMixin
,
TestCase
):
@ddt.ddt
class
DefaultStrategyTests
(
CourseCatalogTestMixin
,
UserMixin
,
TestCase
):
def
setUp
(
self
):
def
setUp
(
self
):
super
(
DefaultStrategyTests
,
self
)
.
setUp
()
super
(
DefaultStrategyTests
,
self
)
.
setUp
()
self
.
strategy
=
DefaultStrategy
()
self
.
strategy
=
DefaultStrategy
()
...
@@ -40,6 +43,28 @@ class DefaultStrategyTests(CourseCatalogTestMixin, TestCase):
...
@@ -40,6 +43,28 @@ class DefaultStrategyTests(CourseCatalogTestMixin, TestCase):
actual
=
self
.
strategy
.
availability_policy
(
product
,
stock_record
)
actual
=
self
.
strategy
.
availability_policy
(
product
,
stock_record
)
self
.
assertIsInstance
(
actual
,
availability
.
Unavailable
)
self
.
assertIsInstance
(
actual
,
availability
.
Unavailable
)
@ddt.unpack
@ddt.data
(
(
True
,
availability
.
Available
),
(
False
,
availability
.
Unavailable
),
)
def
test_expired_seats_availability_for_users
(
self
,
is_staff
,
available
):
""" A product is unavailable for students if the current date
is beyond the product's expiration date. But for Admin products
are always available.
"""
self
.
assert_expired_product_availability
(
is_staff
,
available
)
def
assert_expired_product_availability
(
self
,
is_staff
,
available
):
request
=
RequestFactory
()
request
.
user
=
self
.
create_user
(
is_staff
=
is_staff
)
strategy
=
DefaultStrategy
(
request
)
product
=
self
.
honor_seat
product
.
expires
=
pytz
.
utc
.
localize
(
datetime
.
datetime
.
min
)
stock_record
=
product
.
stockrecords
.
first
()
actual
=
strategy
.
availability_policy
(
product
,
stock_record
)
self
.
assertIsInstance
(
actual
,
available
)
class
SelectorTests
(
TestCase
):
class
SelectorTests
(
TestCase
):
def
test_strategy
(
self
):
def
test_strategy
(
self
):
...
...
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