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
e5cda013
Commit
e5cda013
authored
Oct 17, 2013
by
Jason Bau
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #1357 from edx/jbau/shoppingcart-user-middleware
Jbau/shoppingcart user middleware
parents
0138322c
7223bb12
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
109 additions
and
5 deletions
+109
-5
lms/djangoapps/shoppingcart/context_processor.py
+23
-0
lms/djangoapps/shoppingcart/tests/test_context_processor.py
+82
-0
lms/envs/common.py
+3
-0
lms/templates/navigation.html
+1
-5
No files found.
lms/djangoapps/shoppingcart/context_processor.py
0 → 100644
View file @
e5cda013
"""
This is the shoppingcart context_processor module.
Currently the only context_processor detects whether request.user has a cart that should be displayed in the
navigation. We want to do this in the context_processor to
1) keep database accesses out of templates (this led to a transaction bug with user email changes)
2) because navigation.html is "called" by being included in other templates, there's no "views.py" to put this.
"""
from
django.conf
import
settings
import
shoppingcart
def
user_has_cart_context_processor
(
request
):
"""
Checks if request has an authenticated user. If so, checks if request.user has a cart that should
be displayed. Anonymous users don't.
Adds `display_shopping_cart` to the context
"""
return
{
'display_shopping_cart'
:
(
request
.
user
.
is_authenticated
()
and
# user is logged in and
settings
.
MITX_FEATURES
.
get
(
'ENABLE_PAID_COURSE_REGISTRATION'
)
and
# settings enable paid course reg and
settings
.
MITX_FEATURES
.
get
(
'ENABLE_SHOPPING_CART'
)
and
# settings enable shopping cart and
shoppingcart
.
models
.
Order
.
user_cart_has_items
(
request
.
user
)
# user's cart has items
)}
lms/djangoapps/shoppingcart/tests/test_context_processor.py
0 → 100644
View file @
e5cda013
"""
Unit tests for shoppingcart context_processor
"""
from
mock
import
patch
,
Mock
from
django.conf
import
settings
from
django.contrib.auth.models
import
AnonymousUser
from
django.test.utils
import
override_settings
from
courseware.tests.tests
import
TEST_DATA_MONGO_MODULESTORE
from
xmodule.modulestore.tests.django_utils
import
ModuleStoreTestCase
from
xmodule.modulestore.tests.factories
import
CourseFactory
from
student.tests.factories
import
UserFactory
from
course_modes.tests.factories
import
CourseModeFactory
from
shoppingcart.models
import
Order
,
PaidCourseRegistration
from
shoppingcart.context_processor
import
user_has_cart_context_processor
@override_settings
(
MODULESTORE
=
TEST_DATA_MONGO_MODULESTORE
)
class
UserCartContextProcessorUnitTest
(
ModuleStoreTestCase
):
"""
Unit test for shoppingcart context_processor
"""
def
setUp
(
self
):
self
.
user
=
UserFactory
.
create
()
self
.
request
=
Mock
()
def
add_to_cart
(
self
):
"""
Adds content to self.user's cart
"""
course
=
CourseFactory
.
create
(
org
=
'MITx'
,
number
=
'999'
,
display_name
=
'Robot Super Course'
)
CourseModeFactory
(
course_id
=
course
.
id
)
cart
=
Order
.
get_cart_for_user
(
self
.
user
)
PaidCourseRegistration
.
add_to_order
(
cart
,
course
.
id
)
@patch.dict
(
settings
.
MITX_FEATURES
,
{
'ENABLE_SHOPPING_CART'
:
False
,
'ENABLE_PAID_COURSE_REGISTRATION'
:
True
})
def
test_no_enable_shoppingcart
(
self
):
"""
Tests when MITX_FEATURES['ENABLE_SHOPPING_CART'] is not set
"""
self
.
add_to_cart
()
self
.
request
.
user
=
self
.
user
context
=
user_has_cart_context_processor
(
self
.
request
)
self
.
assertFalse
(
context
[
'display_shopping_cart'
])
@patch.dict
(
settings
.
MITX_FEATURES
,
{
'ENABLE_SHOPPING_CART'
:
True
,
'ENABLE_PAID_COURSE_REGISTRATION'
:
False
})
def
test_no_enable_paid_course_registration
(
self
):
"""
Tests when MITX_FEATURES['ENABLE_PAID_COURSE_REGISTRATION'] is not set
"""
self
.
add_to_cart
()
self
.
request
.
user
=
self
.
user
context
=
user_has_cart_context_processor
(
self
.
request
)
self
.
assertFalse
(
context
[
'display_shopping_cart'
])
@patch.dict
(
settings
.
MITX_FEATURES
,
{
'ENABLE_SHOPPING_CART'
:
True
,
'ENABLE_PAID_COURSE_REGISTRATION'
:
True
})
def
test_anonymous_user
(
self
):
"""
Tests when request.user is anonymous
"""
self
.
request
.
user
=
AnonymousUser
()
context
=
user_has_cart_context_processor
(
self
.
request
)
self
.
assertFalse
(
context
[
'display_shopping_cart'
])
@patch.dict
(
settings
.
MITX_FEATURES
,
{
'ENABLE_SHOPPING_CART'
:
True
,
'ENABLE_PAID_COURSE_REGISTRATION'
:
True
})
def
test_no_items_in_cart
(
self
):
"""
Tests when request.user doesn't have a cart with items
"""
self
.
request
.
user
=
self
.
user
context
=
user_has_cart_context_processor
(
self
.
request
)
self
.
assertFalse
(
context
[
'display_shopping_cart'
])
@patch.dict
(
settings
.
MITX_FEATURES
,
{
'ENABLE_SHOPPING_CART'
:
True
,
'ENABLE_PAID_COURSE_REGISTRATION'
:
True
})
def
test_items_in_cart
(
self
):
"""
Tests when request.user has a cart with items
"""
self
.
add_to_cart
()
self
.
request
.
user
=
self
.
user
context
=
user_has_cart_context_processor
(
self
.
request
)
self
.
assertTrue
(
context
[
'display_shopping_cart'
])
lms/envs/common.py
View file @
e5cda013
...
@@ -272,6 +272,9 @@ TEMPLATE_CONTEXT_PROCESSORS = (
...
@@ -272,6 +272,9 @@ TEMPLATE_CONTEXT_PROCESSORS = (
# Hack to get required link URLs to password reset templates
# Hack to get required link URLs to password reset templates
'mitxmako.shortcuts.marketing_link_context_processor'
,
'mitxmako.shortcuts.marketing_link_context_processor'
,
# Shoppingcart processor (detects if request.user has a cart)
'shoppingcart.context_processor.user_has_cart_context_processor'
,
)
)
# use the ratelimit backend to prevent brute force attacks
# use the ratelimit backend to prevent brute force attacks
...
...
lms/templates/navigation.html
View file @
e5cda013
...
@@ -9,8 +9,6 @@ from django.utils.translation import ugettext as _
...
@@ -9,8 +9,6 @@ from django.utils.translation import ugettext as _
import
branding
import
branding
#
app
that
handles
site
status
messages
#
app
that
handles
site
status
messages
from
status
.
status
import
get_site_status_msg
from
status
.
status
import
get_site_status_msg
#
shopping
cart
import
shoppingcart
%
>
%
>
## Provide a hook for themes to inject branding on top.
## Provide a hook for themes to inject branding on top.
...
@@ -83,9 +81,7 @@ site_status_msg = get_site_status_msg(course_id)
...
@@ -83,9 +81,7 @@ site_status_msg = get_site_status_msg(course_id)
</ul>
</ul>
</li>
</li>
</ol>
</ol>
% if settings.MITX_FEATURES.get('ENABLE_PAID_COURSE_REGISTRATION') and \
% if display_shopping_cart: # see shoppingcart.context_processor.user_has_cart_context_processor
settings.MITX_FEATURES.get('ENABLE_SHOPPING_CART') and \
shoppingcart.models.Order.user_cart_has_items(user):
<ol
class=
"user"
>
<ol
class=
"user"
>
<li
class=
"primary"
>
<li
class=
"primary"
>
<a
class=
"shopping-cart"
href=
"${reverse('shoppingcart.views.show_cart')}"
>
<a
class=
"shopping-cart"
href=
"${reverse('shoppingcart.views.show_cart')}"
>
...
...
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