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
79990379
Commit
79990379
authored
May 26, 2016
by
Matt Drayer
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
mattdrayer/add-enrollment-active-check: Include "is_active" in enrollment checks
parent
53a56b3c
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
48 additions
and
8 deletions
+48
-8
ecommerce/extensions/basket/tests/test_views.py
+47
-7
ecommerce/extensions/basket/views.py
+1
-1
No files found.
ecommerce/extensions/basket/tests/test_views.py
View file @
79990379
...
@@ -58,15 +58,31 @@ class BasketSingleItemViewTests(CouponMixin, CourseCatalogTestMixin, LmsApiMockM
...
@@ -58,15 +58,31 @@ class BasketSingleItemViewTests(CouponMixin, CourseCatalogTestMixin, LmsApiMockM
self
.
catalog
=
Catalog
.
objects
.
create
(
partner
=
self
.
partner
)
self
.
catalog
=
Catalog
.
objects
.
create
(
partner
=
self
.
partner
)
self
.
catalog
.
stock_records
.
add
(
self
.
stock_record
)
self
.
catalog
.
stock_records
.
add
(
self
.
stock_record
)
def
mock_enrollment_api_success
(
self
,
course_id
,
mode
=
'audit'
):
def
mock_enrollment_api_success_enrolled
(
self
,
course_id
,
mode
=
'audit'
):
""" Returns a successful response indicating self.user is enrolled in the specified course mode. """
"""
Returns a successful Enrollment API response indicating self.user is enrolled in the specified course mode.
"""
self
.
assertTrue
(
httpretty
.
is_enabled
())
self
.
assertTrue
(
httpretty
.
is_enabled
())
url
=
'{host}/{username},{course_id}'
.
format
(
url
=
'{host}/{username},{course_id}'
.
format
(
host
=
get_lms_enrollment_api_url
(),
host
=
get_lms_enrollment_api_url
(),
username
=
self
.
user
.
username
,
username
=
self
.
user
.
username
,
course_id
=
course_id
course_id
=
course_id
)
)
httpretty
.
register_uri
(
httpretty
.
GET
,
url
,
body
=
json
.
dumps
({
'mode'
:
mode
}),
content_type
=
'application/json'
)
json_body
=
json
.
dumps
({
'mode'
:
mode
,
'is_active'
:
True
})
httpretty
.
register_uri
(
httpretty
.
GET
,
url
,
body
=
json_body
,
content_type
=
'application/json'
)
def
mock_enrollment_api_success_unenrolled
(
self
,
course_id
,
mode
=
'audit'
):
"""
Returns a successful Enrollment API response indicating self.user is unenrolled in the specified course mode.
"""
self
.
assertTrue
(
httpretty
.
is_enabled
())
url
=
'{host}/{username},{course_id}'
.
format
(
host
=
get_lms_enrollment_api_url
(),
username
=
self
.
user
.
username
,
course_id
=
course_id
)
json_body
=
json
.
dumps
({
'mode'
:
mode
,
'is_active'
:
False
})
httpretty
.
register_uri
(
httpretty
.
GET
,
url
,
body
=
json_body
,
content_type
=
'application/json'
)
def
mock_enrollment_api_error
(
self
,
error
):
def
mock_enrollment_api_error
(
self
,
error
):
""" Mock Enrollment api call which raises error when called """
""" Mock Enrollment api call which raises error when called """
...
@@ -107,7 +123,7 @@ class BasketSingleItemViewTests(CouponMixin, CourseCatalogTestMixin, LmsApiMockM
...
@@ -107,7 +123,7 @@ class BasketSingleItemViewTests(CouponMixin, CourseCatalogTestMixin, LmsApiMockM
@httpretty.activate
@httpretty.activate
def
test_unavailable_product
(
self
):
def
test_unavailable_product
(
self
):
""" The view should return HTTP 400 if the product is not available for purchase. """
""" The view should return HTTP 400 if the product is not available for purchase. """
self
.
mock_enrollment_api_success
(
self
.
course
.
id
)
self
.
mock_enrollment_api_success
_enrolled
(
self
.
course
.
id
)
product
=
self
.
stock_record
.
product
product
=
self
.
stock_record
.
product
product
.
expires
=
pytz
.
utc
.
localize
(
datetime
.
datetime
.
min
)
product
.
expires
=
pytz
.
utc
.
localize
(
datetime
.
datetime
.
min
)
product
.
save
()
product
.
save
()
...
@@ -124,7 +140,7 @@ class BasketSingleItemViewTests(CouponMixin, CourseCatalogTestMixin, LmsApiMockM
...
@@ -124,7 +140,7 @@ class BasketSingleItemViewTests(CouponMixin, CourseCatalogTestMixin, LmsApiMockM
"""
"""
Verify the view redirects to the basket summary page, and that the user's basket is prepared for checkout.
Verify the view redirects to the basket summary page, and that the user's basket is prepared for checkout.
"""
"""
self
.
mock_enrollment_api_success
(
self
.
course
.
id
)
self
.
mock_enrollment_api_success
_enrolled
(
self
.
course
.
id
)
self
.
create_coupon
(
catalog
=
self
.
catalog
,
code
=
COUPON_CODE
,
benefit_value
=
5
)
self
.
create_coupon
(
catalog
=
self
.
catalog
,
code
=
COUPON_CODE
,
benefit_value
=
5
)
self
.
mock_course_api_response
(
course
=
self
.
course
)
self
.
mock_course_api_response
(
course
=
self
.
course
)
...
@@ -143,12 +159,13 @@ class BasketSingleItemViewTests(CouponMixin, CourseCatalogTestMixin, LmsApiMockM
...
@@ -143,12 +159,13 @@ class BasketSingleItemViewTests(CouponMixin, CourseCatalogTestMixin, LmsApiMockM
@httpretty.activate
@httpretty.activate
@ddt.data
((
'verified'
,
False
),
(
'professional'
,
True
),
(
'no-id-professional'
,
False
))
@ddt.data
((
'verified'
,
False
),
(
'professional'
,
True
),
(
'no-id-professional'
,
False
))
@ddt.unpack
@ddt.unpack
def
test_
already
_verified_student
(
self
,
mode
,
id_verification
):
def
test_
enrolled
_verified_student
(
self
,
mode
,
id_verification
):
"""
"""
Verify the view return HTTP 400 if the student is already enrolled as verified student in the course
Verify the view return HTTP 400 if the student is already enrolled as verified student in the course
(The Enrollment API call being used returns an active enrollment record in this case)
"""
"""
course
=
CourseFactory
()
course
=
CourseFactory
()
self
.
mock_enrollment_api_success
(
course
.
id
,
mode
=
mode
)
self
.
mock_enrollment_api_success
_enrolled
(
course
.
id
,
mode
=
mode
)
product
=
course
.
create_or_update_seat
(
mode
,
id_verification
,
0
,
self
.
partner
)
product
=
course
.
create_or_update_seat
(
mode
,
id_verification
,
0
,
self
.
partner
)
stock_record
=
StockRecordFactory
(
product
=
product
,
partner
=
self
.
partner
)
stock_record
=
StockRecordFactory
(
product
=
product
,
partner
=
self
.
partner
)
catalog
=
Catalog
.
objects
.
create
(
partner
=
self
.
partner
)
catalog
=
Catalog
.
objects
.
create
(
partner
=
self
.
partner
)
...
@@ -161,6 +178,29 @@ class BasketSingleItemViewTests(CouponMixin, CourseCatalogTestMixin, LmsApiMockM
...
@@ -161,6 +178,29 @@ class BasketSingleItemViewTests(CouponMixin, CourseCatalogTestMixin, LmsApiMockM
self
.
assertEqual
(
response
.
content
,
expected_content
)
self
.
assertEqual
(
response
.
content
,
expected_content
)
@httpretty.activate
@httpretty.activate
@ddt.data
((
'verified'
,
False
),
(
'professional'
,
True
),
(
'no-id-professional'
,
False
))
@ddt.unpack
def
test_unenrolled_verified_student
(
self
,
mode
,
id_verification
):
"""
Verify the view return HTTP 303 if the student is unenrolled as verified student in the course
(The Enrollment API call being used returns an inactive enrollment record in this case)
"""
course
=
CourseFactory
()
self
.
mock_enrollment_api_success_unenrolled
(
course
.
id
,
mode
=
mode
)
product
=
course
.
create_or_update_seat
(
mode
,
id_verification
,
0
,
self
.
partner
)
stock_record
=
StockRecordFactory
(
product
=
product
,
partner
=
self
.
partner
)
catalog
=
Catalog
.
objects
.
create
(
partner
=
self
.
partner
)
catalog
.
stock_records
.
add
(
stock_record
)
sku
=
stock_record
.
partner_sku
url
=
'{path}?sku={sku}'
.
format
(
path
=
self
.
path
,
sku
=
sku
)
response
=
self
.
client
.
get
(
url
)
self
.
assertEqual
(
response
.
status_code
,
303
)
self
.
assertEqual
(
response
.
reason_phrase
,
"SEE OTHER"
)
self
.
assertEqual
(
response
.
wsgi_request
.
path_info
,
'/basket/single-item/'
)
self
.
assertEqual
(
response
.
wsgi_request
.
GET
[
'sku'
],
sku
)
@httpretty.activate
@ddt.data
(
ConnectionError
,
SlumberBaseException
,
Timeout
)
@ddt.data
(
ConnectionError
,
SlumberBaseException
,
Timeout
)
def
test_enrollment_api_failure
(
self
,
error
):
def
test_enrollment_api_failure
(
self
,
error
):
"""
"""
...
...
ecommerce/extensions/basket/views.py
View file @
79990379
...
@@ -64,7 +64,7 @@ class BasketSingleItemView(View):
...
@@ -64,7 +64,7 @@ class BasketSingleItemView(View):
status
=
api
.
enrollment
(
','
.
join
([
request
.
user
.
username
,
course_key
]))
.
get
()
status
=
api
.
enrollment
(
','
.
join
([
request
.
user
.
username
,
course_key
]))
.
get
()
username
=
request
.
user
.
username
username
=
request
.
user
.
username
seat_type
=
mode_for_seat
(
product
)
seat_type
=
mode_for_seat
(
product
)
if
status
and
status
.
get
(
'mode'
)
==
seat_type
:
if
status
and
status
.
get
(
'mode'
)
==
seat_type
and
status
.
get
(
'is_active'
)
:
logger
.
warning
(
logger
.
warning
(
'User [
%
s] attempted to repurchase the [
%
s] seat of course [
%
s]'
,
'User [
%
s] attempted to repurchase the [
%
s] seat of course [
%
s]'
,
username
,
username
,
...
...
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