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
70ad954e
Commit
70ad954e
authored
Feb 24, 2016
by
Michael Frey
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #11648 from edx/patch/2016-02-24
Only allow ecommerce checkout if user is also activated
parents
44c27bb1
c63dcf0d
Hide whitespace changes
Inline
Side-by-side
Showing
19 changed files
with
46 additions
and
26 deletions
+46
-26
cms/static/cms/js/require-config.js
+1
-1
cms/static/coffee/spec/main.coffee
+1
-1
cms/static/coffee/spec/main_squire.coffee
+1
-1
common/djangoapps/course_modes/views.py
+1
-1
common/djangoapps/student/views.py
+1
-1
common/djangoapps/terrain/ui_helpers.py
+1
-1
common/lib/capa/capa/templates/formulaequationinput.html
+1
-1
common/static/js/capa/spec/formula_equation_preview_spec.js
+2
-2
common/static/js/capa/src/formula_equation_preview.js
+1
-1
common/templates/mathjax_include.html
+1
-1
common/test/acceptance/pages/lms/discussion.py
+1
-1
common/test/acceptance/pages/lms/problem.py
+2
-2
common/test/acceptance/pages/lms/tab_nav.py
+1
-1
common/test/acceptance/tests/discussion/test_discussion.py
+2
-0
lms/djangoapps/commerce/tests/test_utils.py
+9
-3
lms/djangoapps/commerce/utils.py
+4
-3
lms/djangoapps/courseware/tests/test_views.py
+13
-2
lms/djangoapps/courseware/views.py
+2
-2
lms/static/js/spec/main.js
+1
-1
No files found.
cms/static/cms/js/require-config.js
View file @
70ad954e
...
...
@@ -91,7 +91,7 @@
// end of Annotation tool files
// externally hosted files
"mathjax"
:
"//cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-MML-AM_
CHTML
&delayStartupUntil=configured"
,
// jshint ignore:line
"mathjax"
:
"//cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-MML-AM_
SVG
&delayStartupUntil=configured"
,
// jshint ignore:line
"youtube"
:
[
// youtube URL does not end in ".js". We add "?noext" to the path so
// that require.js adds the ".js" to the query component of the URL,
...
...
cms/static/coffee/spec/main.coffee
View file @
70ad954e
...
...
@@ -51,7 +51,7 @@ requirejs.config({
"URI"
:
"xmodule_js/common_static/js/vendor/URI.min"
,
"mock-ajax"
:
"xmodule_js/common_static/js/vendor/mock-ajax"
,
"mathjax"
:
"//cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-MML-AM_
CHTML
&delayStartupUntil=configured"
,
"mathjax"
:
"//cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-MML-AM_
SVG
&delayStartupUntil=configured"
,
"youtube"
:
"//www.youtube.com/player_api?noext"
,
"coffee/src/ajax_prefix"
:
"xmodule_js/common_static/coffee/src/ajax_prefix"
,
...
...
cms/static/coffee/spec/main_squire.coffee
View file @
70ad954e
...
...
@@ -42,7 +42,7 @@ requirejs.config({
"domReady"
:
"xmodule_js/common_static/js/vendor/domReady"
,
"URI"
:
"xmodule_js/common_static/js/vendor/URI.min"
,
"mathjax"
:
"//cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-MML-AM_
CHTML
&delayStartupUntil=configured"
,
"mathjax"
:
"//cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-MML-AM_
SVG
&delayStartupUntil=configured"
,
"youtube"
:
"//www.youtube.com/player_api?noext"
,
"coffee/src/ajax_prefix"
:
"xmodule_js/common_static/coffee/src/ajax_prefix"
...
...
common/djangoapps/course_modes/views.py
View file @
70ad954e
...
...
@@ -151,7 +151,7 @@ class ChooseModeView(View):
if
verified_mode
.
sku
:
ecommerce_service
=
EcommerceService
()
context
[
"use_ecommerce_payment_flow"
]
=
ecommerce_service
.
is_enabled
()
context
[
"use_ecommerce_payment_flow"
]
=
ecommerce_service
.
is_enabled
(
request
)
context
[
"ecommerce_payment_page"
]
=
ecommerce_service
.
payment_page_url
()
context
[
"sku"
]
=
verified_mode
.
sku
...
...
common/djangoapps/student/views.py
View file @
70ad954e
...
...
@@ -739,7 +739,7 @@ def dashboard(request):
}
ecommerce_service
=
EcommerceService
()
if
ecommerce_service
.
is_enabled
():
if
ecommerce_service
.
is_enabled
(
request
):
context
.
update
({
'use_ecommerce_payment_flow'
:
True
,
'ecommerce_payment_page'
:
ecommerce_service
.
payment_page_url
(),
...
...
common/djangoapps/terrain/ui_helpers.py
View file @
70ad954e
...
...
@@ -346,7 +346,7 @@ def css_contains_text(css_selector, partial_text, index=0):
# If we're expecting a non-empty string, give the page
# a chance to fill in text fields.
if
partial_text
:
wait_for
(
lambda
_
:
css_html
(
css_selector
,
index
=
index
))
wait_for
(
lambda
_
:
css_html
(
css_selector
,
index
=
index
)
,
timeout
=
8
)
actual_text
=
css_html
(
css_selector
,
index
=
index
)
...
...
common/lib/capa/capa/templates/formulaequationinput.html
View file @
70ad954e
...
...
@@ -20,7 +20,7 @@
<p
id=
"answer_${id}"
class=
"answer"
></p>
<div
id=
"input_${id}_preview"
class=
"equation"
>
\
[\]
\
(\)
<img
src=
"${STATIC_URL}images/spinner.gif"
class=
"loading"
alt=
"Loading"
/>
</div>
</div>
...
...
common/static/js/capa/spec/formula_equation_preview_spec.js
View file @
70ad954e
...
...
@@ -139,7 +139,7 @@ describe("Formula Equation Preview", function () {
// Either it makes a request or jumps straight into displaying ''.
waitsFor
(
function
()
{
// (Short circuit if `inputAjax` is indeed called)
return
Problem
.
inputAjax
.
wasCalled
||
return
Problem
.
inputAjax
.
wasCalled
||
// jshint ignore:line
MathJax
.
Hub
.
Queue
.
wasCalled
;
},
"AJAX never called on user input"
,
1000
);
...
...
@@ -266,7 +266,7 @@ describe("Formula Equation Preview", function () {
// We should look in the preview div for the MathJax.
var
previewElement
=
$
(
"#input_THE_ID_preview"
)[
0
];
expect
(
previewElement
.
firstChild
.
data
).
toEqual
(
"
\\
[THE_FORMULA
\\
]
"
);
expect
(
previewElement
.
firstChild
.
data
).
toEqual
(
"
\\
(THE_FORMULA
\\
)
"
);
// Refresh the MathJax.
expect
(
MathJax
.
Hub
.
Queue
).
toHaveBeenCalledWith
(
...
...
common/static/js/capa/src/formula_equation_preview.js
View file @
70ad954e
...
...
@@ -145,7 +145,7 @@ formulaEquationPreview.enable = function () {
console
.
log
(
"[FormulaEquationInput] Oops no mathjax for "
,
latex
);
// Fall back to modifying the actual element.
var
textNode
=
previewElement
.
childNodes
[
0
];
textNode
.
data
=
"
\\
["
+
latex
+
"
\\
]
"
;
textNode
.
data
=
"
\\
("
+
latex
+
"
\\
)
"
;
MathJax
.
Hub
.
Queue
([
"Typeset"
,
MathJax
.
Hub
,
previewElement
]);
}
});
...
...
common/templates/mathjax_include.html
View file @
70ad954e
...
...
@@ -76,4 +76,4 @@
<!-- This must appear after all mathjax-config blocks, so it is after the imports from the other templates.
It can't be run through static.url because MathJax uses crazy url introspection to do lazy loading of
MathJax extension libraries -->
<script
type=
"text/javascript"
src=
"https://cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-MML-AM_
CHTML
"
></script>
<script
type=
"text/javascript"
src=
"https://cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-MML-AM_
SVG
"
></script>
common/test/acceptance/pages/lms/discussion.py
View file @
70ad954e
...
...
@@ -126,7 +126,7 @@ class DiscussionThreadPage(PageObject, DiscussionPageMixin):
def
verify_mathjax_rendered
(
self
):
""" Checks that MathJax css class is present """
self
.
wait_for
(
lambda
:
self
.
_is_element_visible
(
".MathJax_
CHTML
"
),
lambda
:
self
.
_is_element_visible
(
".MathJax_
SVG
"
),
description
=
"MathJax Preview is rendered"
)
...
...
common/test/acceptance/pages/lms/problem.py
View file @
70ad954e
...
...
@@ -49,7 +49,7 @@ class ProblemPage(PageObject):
"""
def
mathjax_present
():
""" Returns True if MathJax css is present in the problem body """
mathjax_container
=
self
.
q
(
css
=
"div.problem p .MathJax_
CHTML
"
)
mathjax_container
=
self
.
q
(
css
=
"div.problem p .MathJax_
SVG
"
)
return
mathjax_container
.
visible
and
mathjax_container
.
present
self
.
wait_for
(
...
...
@@ -63,7 +63,7 @@ class ProblemPage(PageObject):
"""
def
mathjax_present
():
""" Returns True if MathJax css is present in the problem body """
mathjax_container
=
self
.
q
(
css
=
"div.problem div.problem-hint .MathJax_
CHTML
"
)
mathjax_container
=
self
.
q
(
css
=
"div.problem div.problem-hint .MathJax_
SVG
"
)
return
mathjax_container
.
visible
and
mathjax_container
.
present
self
.
wait_for
(
...
...
common/test/acceptance/pages/lms/tab_nav.py
View file @
70ad954e
...
...
@@ -40,7 +40,7 @@ class TabNavPage(PageObject):
"""
Check that MathJax has rendered in tab content
"""
mathjax_container
=
self
.
q
(
css
=
".static_tab_wrapper .MathJax_
CHTML
"
)
mathjax_container
=
self
.
q
(
css
=
".static_tab_wrapper .MathJax_
SVG
"
)
EmptyPromise
(
lambda
:
mathjax_container
.
present
and
mathjax_container
.
visible
,
"MathJax is not visible"
...
...
common/test/acceptance/tests/discussion/test_discussion.py
View file @
70ad954e
...
...
@@ -5,6 +5,7 @@ Tests for discussion pages
import
datetime
from
uuid
import
uuid4
from
flaky
import
flaky
from
nose.plugins.attrib
import
attr
from
pytz
import
UTC
...
...
@@ -400,6 +401,7 @@ class DiscussionCommentDeletionTest(BaseDiscussionTestCase):
)
view
.
push
()
@flaky
# TODO: TNL-4151
def
test_comment_deletion_as_student
(
self
):
self
.
setup_user
()
self
.
setup_view
()
...
...
lms/djangoapps/commerce/tests/test_utils.py
View file @
70ad954e
...
...
@@ -5,6 +5,8 @@ from mock import patch
from
commerce.utils
import
audit_log
,
EcommerceService
from
commerce.models
import
CommerceConfiguration
from
django.test.client
import
RequestFactory
from
student.tests.factories
import
UserFactory
class
AuditLogTests
(
TestCase
):
...
...
@@ -25,6 +27,10 @@ class EcommerceServiceTests(TestCase):
SKU
=
'TESTSKU'
def
setUp
(
self
):
self
.
request_factory
=
RequestFactory
()
self
.
user
=
UserFactory
.
create
()
self
.
request
=
self
.
request_factory
.
get
(
"foo"
)
self
.
request
.
user
=
self
.
user
CommerceConfiguration
.
objects
.
create
(
checkout_on_ecommerce_service
=
True
,
single_course_checkout_page
=
'/test_basket/'
...
...
@@ -33,20 +39,20 @@ class EcommerceServiceTests(TestCase):
def
test_is_enabled
(
self
):
"""Verify that is_enabled() returns True when ecomm checkout is enabled. """
is_enabled
=
EcommerceService
()
.
is_enabled
()
is_enabled
=
EcommerceService
()
.
is_enabled
(
self
.
request
)
self
.
assertTrue
(
is_enabled
)
config
=
CommerceConfiguration
.
current
()
config
.
checkout_on_ecommerce_service
=
False
config
.
save
()
is_not_enabled
=
EcommerceService
()
.
is_enabled
()
is_not_enabled
=
EcommerceService
()
.
is_enabled
(
self
.
request
)
self
.
assertFalse
(
is_not_enabled
)
@patch
(
'openedx.core.djangoapps.theming.helpers.is_request_in_themed_site'
)
def
test_is_enabled_for_microsites
(
self
,
is_microsite
):
"""Verify that is_enabled() returns False if used for a microsite."""
is_microsite
.
return_value
=
True
is_not_enabled
=
EcommerceService
()
.
is_enabled
()
is_not_enabled
=
EcommerceService
()
.
is_enabled
(
self
.
request
)
self
.
assertFalse
(
is_not_enabled
)
@override_settings
(
ECOMMERCE_PUBLIC_URL_ROOT
=
'http://ecommerce_url'
)
...
...
lms/djangoapps/commerce/utils.py
View file @
70ad954e
...
...
@@ -44,9 +44,10 @@ class EcommerceService(object):
def
__init__
(
self
):
self
.
config
=
CommerceConfiguration
.
current
()
def
is_enabled
(
self
):
""" Check if the service is enabled and that the site is not a microsite. """
return
self
.
config
.
checkout_on_ecommerce_service
and
not
helpers
.
is_request_in_themed_site
()
def
is_enabled
(
self
,
request
):
""" Check if the user is activated, if the service is enabled and that the site is not a microsite. """
return
(
request
.
user
.
is_active
and
self
.
config
.
checkout_on_ecommerce_service
and
not
helpers
.
is_request_in_themed_site
())
def
payment_page_url
(
self
):
""" Return the URL for the checkout page.
...
...
lms/djangoapps/courseware/tests/test_views.py
View file @
70ad954e
...
...
@@ -39,6 +39,7 @@ from courseware.testutils import RenderXBlockTestMixin
from
courseware.tests.factories
import
StudentModuleFactory
from
courseware.user_state_client
import
DjangoXBlockUserStateClient
from
edxmako.tests
import
mako_middleware_process_request
from
lms.djangoapps.commerce.utils
import
EcommerceService
# pylint: disable=import-error
from
milestones.tests.utils
import
MilestonesTestCaseMixin
from
openedx.core.djangoapps.self_paced.models
import
SelfPacedConfiguration
from
openedx.core.lib.gating
import
api
as
gating_api
...
...
@@ -271,13 +272,23 @@ class ViewsTestCase(ModuleStoreTestCase):
@ddt.data
(
True
,
False
)
def
test_ecommerce_checkout
(
self
,
is_anonymous
):
self
.
assert_enrollment_link_present
(
is_anonymous
=
is_anonymous
)
if
not
is_anonymous
:
self
.
assert_enrollment_link_present
(
is_anonymous
=
is_anonymous
)
else
:
request
=
self
.
request_factory
.
get
(
"foo"
)
request
.
user
=
AnonymousUser
()
self
.
assertEqual
(
EcommerceService
()
.
is_enabled
(
request
),
False
)
@ddt.data
(
True
,
False
)
@unittest.skipUnless
(
settings
.
FEATURES
.
get
(
'ENABLE_SHOPPING_CART'
),
'Shopping Cart not enabled in settings'
)
@patch.dict
(
settings
.
FEATURES
,
{
'ENABLE_PAID_COURSE_REGISTRATION'
:
True
})
def
test_ecommerce_checkout_shopping_cart_enabled
(
self
,
is_anonymous
):
self
.
assert_enrollment_link_present
(
is_anonymous
=
is_anonymous
,
_id
=
True
)
if
not
is_anonymous
:
self
.
assert_enrollment_link_present
(
is_anonymous
=
is_anonymous
,
_id
=
True
)
else
:
request
=
self
.
request_factory
.
get
(
"foo"
)
request
.
user
=
AnonymousUser
()
self
.
assertEqual
(
EcommerceService
()
.
is_enabled
(
request
),
False
)
def
test_user_groups
(
self
):
# depreciated function
...
...
lms/djangoapps/courseware/views.py
View file @
70ad954e
...
...
@@ -906,7 +906,7 @@ def course_about(request, course_id):
ecommerce_checkout_link
=
''
professional_mode
=
''
ecomm_service
=
EcommerceService
()
if
ecomm_service
.
is_enabled
()
and
(
if
ecomm_service
.
is_enabled
(
request
)
and
(
CourseMode
.
PROFESSIONAL
in
modes
or
CourseMode
.
NO_ID_PROFESSIONAL_MODE
in
modes
):
professional_mode
=
modes
.
get
(
CourseMode
.
PROFESSIONAL
,
''
)
or
\
...
...
@@ -944,7 +944,7 @@ def course_about(request, course_id):
'is_cosmetic_price_enabled'
:
settings
.
FEATURES
.
get
(
'ENABLE_COSMETIC_DISPLAY_PRICE'
),
'course_price'
:
course_price
,
'in_cart'
:
in_cart
,
'ecommerce_checkout'
:
ecomm_service
.
is_enabled
(),
'ecommerce_checkout'
:
ecomm_service
.
is_enabled
(
request
),
'ecommerce_checkout_link'
:
ecommerce_checkout_link
,
'professional_mode'
:
professional_mode
,
'reg_then_add_to_cart_link'
:
reg_then_add_to_cart_link
,
...
...
lms/static/js/spec/main.js
View file @
70ad954e
...
...
@@ -49,7 +49,7 @@
'jasmine.async'
:
'xmodule_js/common_static/js/vendor/jasmine.async'
,
'draggabilly'
:
'xmodule_js/common_static/js/vendor/draggabilly.pkgd'
,
'domReady'
:
'xmodule_js/common_static/js/vendor/domReady'
,
'mathjax'
:
'//cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-MML-AM_
CHTML
&delayStartupUntil=configured'
,
// jshint ignore:line
'mathjax'
:
'//cdn.mathjax.org/mathjax/2.6-latest/MathJax.js?config=TeX-MML-AM_
SVG
&delayStartupUntil=configured'
,
// jshint ignore:line
'youtube'
:
'//www.youtube.com/player_api?noext'
,
'coffee/src/ajax_prefix'
:
'xmodule_js/common_static/coffee/src/ajax_prefix'
,
'coffee/src/instructor_dashboard/student_admin'
:
'coffee/src/instructor_dashboard/student_admin'
,
...
...
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