Skip to content
Projects
Groups
Snippets
Help
This project
Loading...
Sign in / Register
Toggle navigation
E
edx-platform
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
edx-platform
Commits
b4c66f57
Commit
b4c66f57
authored
Jan 28, 2015
by
stephensanchez
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Fix the redemption codes to allow upgrading course modes.
parent
e24d4d96
Hide whitespace changes
Inline
Side-by-side
Showing
2 changed files
with
51 additions
and
2 deletions
+51
-2
lms/djangoapps/shoppingcart/tests/test_views.py
+27
-0
lms/djangoapps/shoppingcart/views.py
+24
-2
No files found.
lms/djangoapps/shoppingcart/tests/test_views.py
View file @
b4c66f57
...
...
@@ -550,6 +550,33 @@ class ShoppingCartViewsTests(ModuleStoreTestCase):
self
.
assertEqual
(
resp
.
status_code
,
400
)
self
.
assertIn
(
"Oops! The code '{0}' you entered is either invalid or expired"
.
format
(
self
.
reg_code
),
resp
.
content
)
def
test_upgrade_from_valid_reg_code
(
self
):
"""Use a valid registration code to upgrade from honor to verified mode. """
# Ensure the course has a verified mode
course_key
=
self
.
course_key
.
to_deprecated_string
()
self
.
_add_course_mode
(
mode_slug
=
'verified'
)
self
.
add_reg_code
(
course_key
,
mode_slug
=
'verified'
)
# Enroll as honor in the course with the current user.
CourseEnrollment
.
enroll
(
self
.
user
,
self
.
course_key
)
self
.
login_user
()
current_enrollment
,
__
=
CourseEnrollment
.
enrollment_mode_for_user
(
self
.
user
,
self
.
course_key
)
self
.
assertEquals
(
'honor'
,
current_enrollment
)
redeem_url
=
reverse
(
'register_code_redemption'
,
args
=
[
self
.
reg_code
])
response
=
self
.
client
.
get
(
redeem_url
)
self
.
assertEquals
(
response
.
status_code
,
200
)
# check button text
self
.
assertTrue
(
'Activate Course Enrollment'
in
response
.
content
)
#now activate the user by enrolling him/her to the course
response
=
self
.
client
.
post
(
redeem_url
)
self
.
assertEquals
(
response
.
status_code
,
200
)
# Once upgraded, should be "verified"
current_enrollment
,
__
=
CourseEnrollment
.
enrollment_mode_for_user
(
self
.
user
,
self
.
course_key
)
self
.
assertEquals
(
'verified'
,
current_enrollment
)
@patch
(
'shoppingcart.views.log.debug'
)
def
test_non_existing_coupon_redemption_on_removing_item
(
self
,
debug_log
):
...
...
lms/djangoapps/shoppingcart/views.py
View file @
b4c66f57
...
...
@@ -24,7 +24,6 @@ from opaque_keys.edx.locations import SlashSeparatedCourseKey
from
opaque_keys.edx.locator
import
CourseLocator
from
opaque_keys
import
InvalidKeyError
from
courseware.courses
import
get_course_by_id
from
courseware.views
import
registered_for_course
from
config_models.decorators
import
require_config
from
shoppingcart.reports
import
RefundReport
,
ItemizedPurchaseReport
,
UniversityRevenueShareReport
,
CertificateStatusReport
from
student.models
import
CourseEnrollment
,
EnrollmentClosedError
,
CourseFullError
,
\
...
...
@@ -345,7 +344,7 @@ def register_code_redemption(request, registration_code):
'reg_code'
:
registration_code
,
'site_name'
:
site_name
,
'course'
:
course
,
'registered_for_course'
:
registered_for_course
(
course
,
request
.
user
)
'registered_for_course'
:
not
_is_enrollment_code_an_update
(
course
,
request
.
user
,
course_registration
)
}
return
render_to_response
(
template_to_render
,
context
)
elif
request
.
method
==
"POST"
:
...
...
@@ -401,6 +400,29 @@ def register_code_redemption(request, registration_code):
return
render_to_response
(
template_to_render
,
context
)
def
_is_enrollment_code_an_update
(
course
,
user
,
redemption_code
):
"""Checks to see if the user's enrollment can be updated by the code.
Check to see if the enrollment code and the user's enrollment match. If they are different, the code
may be used to alter the enrollment of the user. If the enrollment is inactive, will return True, since
the user may use the code to re-activate an enrollment as well.
Enrollment redemption codes must be associated with a paid course mode. If the current enrollment is a
different mode then the mode associated with the code, use of the code can be considered an upgrade.
Args:
course (CourseDescriptor): The course to check for enrollment.
user (User): The user that will be using the redemption code.
redemption_code (CourseRegistrationCode): The redemption code that will be used to update the user's enrollment.
Returns:
True if the redemption code can be used to upgrade the enrollment, or re-activate it.
"""
enrollment_mode
,
is_active
=
CourseEnrollment
.
enrollment_mode_for_user
(
user
,
course
.
id
)
return
not
is_active
or
enrollment_mode
!=
redemption_code
.
mode_slug
def
use_registration_code
(
course_reg
,
user
):
"""
This method utilize course registration code.
...
...
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