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
3ecc2b95
Commit
3ecc2b95
authored
May 12, 2016
by
Malik Shahzad
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #724 from edx/malikshahzad228/MAYN-256
Extra Footer removed
parents
a95332ce
a9700578
Hide whitespace changes
Inline
Side-by-side
Showing
11 changed files
with
1 additions
and
140 deletions
+1
-140
.gitignore
+1
-0
ecommerce/coupons/tests/test_views.py
+0
-1
ecommerce/coupons/views.py
+0
-8
ecommerce/extensions/api/data.py
+0
-32
ecommerce/extensions/api/tests/test_data.py
+0
-54
ecommerce/extensions/basket/tests/test_views.py
+0
-7
ecommerce/extensions/basket/views.py
+0
-2
ecommerce/templates/coupons/coupon_app.html
+0
-10
ecommerce/templates/coupons/offer.html
+0
-8
ecommerce/templates/oscar/basket/basket.html
+0
-9
ecommerce/tests/mixins.py
+0
-9
No files found.
.gitignore
View file @
3ecc2b95
...
...
@@ -61,6 +61,7 @@ conf/locale/messages.mo
.mr.developer.cfg
.project
.pydevproject
.pycharm_helpers
# QA
coverage.xml
...
...
ecommerce/coupons/tests/test_views.py
View file @
3ecc2b95
...
...
@@ -168,7 +168,6 @@ class CouponOfferViewTests(CourseCatalogTestMixin, LmsApiMockMixin, TestCase):
def
setUp
(
self
):
super
(
CouponOfferViewTests
,
self
)
.
setUp
()
self
.
mock_footer_api_response
()
self
.
user
=
self
.
create_user
()
self
.
client
.
login
(
username
=
self
.
user
.
username
,
password
=
self
.
password
)
...
...
ecommerce/coupons/views.py
View file @
3ecc2b95
...
...
@@ -20,7 +20,6 @@ from ecommerce.core.views import StaffOnlyMixin
from
ecommerce.extensions.api
import
exceptions
from
ecommerce.extensions.analytics.utils
import
prepare_analytics_data
from
ecommerce.extensions.api.constants
import
APIConstants
as
AC
from
ecommerce.extensions.api.data
import
get_lms_footer
from
ecommerce.extensions.basket.utils
import
prepare_basket
from
ecommerce.extensions.checkout.mixins
import
EdxOrderPlacementMixin
from
ecommerce.extensions.offer.utils
import
format_benefit_value
...
...
@@ -118,7 +117,6 @@ class CouponOfferView(TemplateView):
def
get_context_data
(
self
,
**
kwargs
):
context
=
super
(
CouponOfferView
,
self
)
.
get_context_data
(
**
kwargs
)
footer
=
get_lms_footer
()
code
=
self
.
request
.
GET
.
get
(
'code'
,
None
)
if
code
is
not
None
:
try
:
...
...
@@ -126,12 +124,10 @@ class CouponOfferView(TemplateView):
except
Voucher
.
DoesNotExist
:
return
{
'error'
:
_
(
'Coupon does not exist'
),
'footer'
:
footer
,
}
except
exceptions
.
ProductNotFoundError
:
return
{
'error'
:
_
(
'The voucher is not applicable to your current basket.'
),
'footer'
:
footer
,
}
valid_voucher
,
msg
=
voucher_is_valid
(
voucher
,
product
,
self
.
request
)
if
valid_voucher
:
...
...
@@ -144,7 +140,6 @@ class CouponOfferView(TemplateView):
logger
.
exception
(
'Could not get course information. [
%
s]'
,
e
)
return
{
'error'
:
_
(
'Could not get course information. [{error}]'
.
format
(
error
=
e
)),
'footer'
:
footer
}
course
[
'image_url'
]
=
get_lms_url
(
course
[
'media'
][
'course_image'
][
'uri'
])
benefit
=
voucher
.
offers
.
first
()
.
benefit
...
...
@@ -174,16 +169,13 @@ class CouponOfferView(TemplateView):
'new_price'
:
"
%.2
f"
%
new_price
,
'verified'
:
(
product
.
attr
.
certificate_type
==
'verified'
),
'verification_deadline'
:
product
.
course
.
verification_deadline
,
'footer'
:
footer
})
return
context
return
{
'error'
:
msg
,
'footer'
:
footer
}
return
{
'error'
:
_
(
'This coupon code is invalid.'
),
'footer'
:
footer
}
def
get
(
self
,
request
,
*
args
,
**
kwargs
):
...
...
ecommerce/extensions/api/data.py
View file @
3ecc2b95
"""Functions used for data retrieval and manipulation by the API."""
import
logging
import
requests
from
oscar.core.loading
import
get_model
,
get_class
from
ecommerce.core.url_utils
import
get_lms_url
from
ecommerce.extensions.api
import
exceptions
from
ecommerce.extensions.api.constants
import
APIConstants
as
AC
...
...
@@ -48,33 +46,3 @@ def get_order_metadata(basket):
}
return
metadata
def
get_lms_footer
():
"""
Retrieve LMS footer via branding API.
Returns:
str: HTML representation of the footer.
"""
try
:
footer_api_url
=
get_lms_url
(
'api/branding/v1/footer'
)
response
=
requests
.
get
(
footer_api_url
,
data
=
{
'language'
:
'en'
}
)
if
response
.
status_code
==
200
:
return
response
.
text
else
:
logger
.
error
(
'Unable to retrieve footer from
%
s. Branding API returned status code
%
d.'
,
footer_api_url
,
response
.
status_code
)
return
None
except
requests
.
exceptions
.
ConnectionError
:
logger
.
exception
(
'Connection error occurred while retrieving footer from
%
s.'
,
get_lms_url
())
return
None
except
requests
.
Timeout
:
logger
.
exception
(
'Connection timed out while retrieving footer from
%
s.'
,
get_lms_url
())
return
None
ecommerce/extensions/api/tests/test_data.py
deleted
100644 → 0
View file @
a95332ce
import
json
import
httpretty
import
mock
import
requests
from
ecommerce.core.url_utils
import
get_lms_url
from
ecommerce.extensions.api.data
import
get_lms_footer
from
ecommerce.tests.testcases
import
TestCase
# TODO: test get_product() and get_order_metadata()
class
DataFunctionsTests
(
TestCase
):
"""Tests for API data helpers."""
def
setUp
(
self
):
super
(
DataFunctionsTests
,
self
)
.
setUp
()
self
.
footer_url
=
get_lms_url
(
'api/branding/v1/footer'
)
@httpretty.activate
def
test_get_lms_footer_success
(
self
):
"""Verify footer information is retrieved."""
content
=
{
'footer'
:
'edX Footer'
}
content_json
=
json
.
dumps
(
content
)
httpretty
.
register_uri
(
httpretty
.
GET
,
self
.
footer_url
,
body
=
content_json
,
content_type
=
'application/json'
)
response
=
json
.
loads
(
get_lms_footer
())
self
.
assertEqual
(
response
[
'footer'
],
'edX Footer'
)
@httpretty.activate
def
test_get_lms_footer_failure
(
self
):
"""Verify None is returned on a non-200 status code while retrieving LMS footer."""
httpretty
.
register_uri
(
httpretty
.
GET
,
self
.
footer_url
,
status
=
404
,
content_type
=
'application/json'
)
response
=
get_lms_footer
()
self
.
assertIsNone
(
response
)
def
test_get_lms_footer_connection_error
(
self
):
"""Verify behavior in the event of a connection error while retrieving LMS footer."""
with
mock
.
patch
(
'requests.get'
,
side_effect
=
requests
.
exceptions
.
ConnectionError
()):
with
mock
.
patch
(
'ecommerce.extensions.api.data.logger.exception'
)
as
mock_logger
:
response
=
get_lms_footer
()
self
.
assertTrue
(
mock_logger
.
called
)
self
.
assertIsNone
(
response
)
def
test_get_lms_footer_timeout
(
self
):
"""Verify behavior in the event of a timeout while retrieving LMS footer."""
with
mock
.
patch
(
'requests.get'
,
side_effect
=
requests
.
Timeout
()):
with
mock
.
patch
(
'ecommerce.extensions.api.data.logger.exception'
)
as
mock_logger
:
response
=
get_lms_footer
()
self
.
assertTrue
(
mock_logger
.
called
)
self
.
assertIsNone
(
response
)
ecommerce/extensions/basket/tests/test_views.py
View file @
3ecc2b95
import
datetime
import
hashlib
import
json
import
ddt
from
django.conf
import
settings
...
...
@@ -99,7 +98,6 @@ class BasketSingleItemViewTests(CouponMixin, CourseCatalogTestMixin, LmsApiMockM
"""
self
.
create_coupon
(
catalog
=
self
.
catalog
,
code
=
COUPON_CODE
,
benefit_value
=
5
)
self
.
mock_footer_api_response
()
self
.
mock_course_api_response
(
course
=
self
.
course
)
url
=
'{path}?sku={sku}&code={code}'
.
format
(
path
=
self
.
path
,
sku
=
self
.
stock_record
.
partner_sku
,
code
=
COUPON_CODE
)
...
...
@@ -164,7 +162,6 @@ class BasketSummaryViewTests(CourseCatalogTestMixin, LmsApiMockMixin, TestCase):
@ddt.data
(
ConnectionError
,
SlumberBaseException
,
Timeout
)
def
test_course_api_failure
(
self
,
error
):
""" Verify a connection error and timeout are logged when they happen. """
self
.
mock_footer_api_response
()
seat
=
self
.
create_seat
(
self
.
course
)
basket
=
self
.
create_basket_and_add_product
(
seat
)
self
.
assertEqual
(
basket
.
lines
.
count
(),
1
)
...
...
@@ -190,7 +187,6 @@ class BasketSummaryViewTests(CourseCatalogTestMixin, LmsApiMockMixin, TestCase):
enrollment_code
=
Product
.
objects
.
get
(
product_class__name
=
ENROLLMENT_CODE_PRODUCT_CLASS_NAME
)
self
.
create_basket_and_add_product
(
enrollment_code
)
self
.
mock_course_api_response
(
course
)
self
.
mock_footer_api_response
()
response
=
self
.
client
.
get
(
self
.
path
)
self
.
assertEqual
(
response
.
status_code
,
200
)
line_data
=
response
.
context
[
'formset_lines_data'
][
0
][
1
]
...
...
@@ -210,7 +206,6 @@ class BasketSummaryViewTests(CourseCatalogTestMixin, LmsApiMockMixin, TestCase):
self
.
assertEqual
(
basket
.
lines
.
count
(),
1
)
self
.
mock_course_api_response
(
self
.
course
)
self
.
mock_footer_api_response
()
benefit
,
__
=
Benefit
.
objects
.
get_or_create
(
type
=
benefit_type
,
value
=
benefit_value
)
...
...
@@ -223,7 +218,6 @@ class BasketSummaryViewTests(CourseCatalogTestMixin, LmsApiMockMixin, TestCase):
self
.
assertEqual
(
line_data
[
'course_name'
],
self
.
course
.
name
)
self
.
assertFalse
(
line_data
[
'enrollment_code'
])
self
.
assertEqual
(
response
.
context
[
'payment_processors'
][
0
]
.
NAME
,
DummyProcessor
.
NAME
)
self
.
assertEqual
(
json
.
loads
(
response
.
context
[
'footer'
]),
{
'footer'
:
'edX Footer'
})
def
test_no_basket_response
(
self
):
""" Verify there are no form and line data in the context for a non-existing basket. """
...
...
@@ -253,7 +247,6 @@ class BasketSummaryViewTests(CourseCatalogTestMixin, LmsApiMockMixin, TestCase):
basket
=
self
.
create_basket_and_add_product
(
seat
)
self
.
assertEqual
(
basket
.
lines
.
count
(),
1
)
self
.
mock_course_api_response
(
self
.
course
)
self
.
mock_footer_api_response
()
cache_key
=
'courses_api_detail_{}'
.
format
(
self
.
course
.
id
)
cache_hash
=
hashlib
.
md5
(
cache_key
)
.
hexdigest
()
...
...
ecommerce/extensions/basket/views.py
View file @
3ecc2b95
...
...
@@ -18,7 +18,6 @@ from ecommerce.core.constants import ENROLLMENT_CODE_PRODUCT_CLASS_NAME, SEAT_PR
from
ecommerce.core.url_utils
import
get_lms_url
from
ecommerce.coupons.views
import
get_voucher_from_code
from
ecommerce.extensions.analytics.utils
import
prepare_analytics_data
from
ecommerce.extensions.api.data
import
get_lms_footer
from
ecommerce.extensions.basket.utils
import
get_certificate_type_display_value
,
prepare_basket
from
ecommerce.extensions.offer.utils
import
format_benefit_value
from
ecommerce.extensions.partner.shortcuts
import
get_partner_for_site
...
...
@@ -127,7 +126,6 @@ class BasketSummaryView(BasketView):
'free_basket'
:
context
[
'order_total'
]
.
incl_tax
==
0
,
'payment_processors'
:
self
.
request
.
site
.
siteconfiguration
.
get_payment_processors
(),
'homepage_url'
:
get_lms_url
(
''
),
'footer'
:
get_lms_footer
(),
'formset_lines_data'
:
zip
(
formset
,
lines_data
),
})
return
context
ecommerce/templates/coupons/coupon_app.html
View file @
3ecc2b95
...
...
@@ -64,16 +64,6 @@
<div
id=
"app"
class=
"container"
></div>
{% endblock %}
{% block footer %}
{% if footer %}
<footer
class=
"footer"
>
<div
class=
"container"
>
{{ footer }}
</div>
</footer>
{% endif %}
{% endblock footer %}
{% block javascript %}
<script
src=
"{% static 'js/apps/coupon_admin_app.js' %}"
></script>
{% endblock %}
ecommerce/templates/coupons/offer.html
View file @
3ecc2b95
...
...
@@ -28,14 +28,6 @@
{% endif %}
{% endblock %}
{% block footer %}
{% if footer %}
{% autoescape off %}
{{ footer }}
{% endautoescape %}
{% endif %}
{% endblock footer %}
{% block javascript %}
<script
src=
"{% static 'js/apps/coupon_offer_app.js' %}"
></script>
{% endblock javascript %}
ecommerce/templates/oscar/basket/basket.html
View file @
3ecc2b95
...
...
@@ -29,12 +29,3 @@
</script>
{% endif %}
{% endblock content %}
{% block footer %}
{% if footer %}
{% autoescape off %}
{{ footer }}
{% endautoescape %}
{% endif %}
{% endblock footer %}
ecommerce/tests/mixins.py
View file @
3ecc2b95
...
...
@@ -298,15 +298,6 @@ class LmsApiMockMixin(object):
course_url
=
get_lms_url
(
'api/courses/v1/courses/{}/'
.
format
(
course_id
))
httpretty
.
register_uri
(
httpretty
.
GET
,
course_url
,
body
=
course_info_json
,
content_type
=
'application/json'
)
def
mock_footer_api_response
(
self
):
""" Helper function to register an API endpoint for the footer information. """
footer_url
=
get_lms_url
(
'api/branding/v1/footer'
)
footer_content
=
{
'footer'
:
'edX Footer'
}
content_json
=
json
.
dumps
(
footer_content
)
httpretty
.
register_uri
(
httpretty
.
GET
,
footer_url
,
body
=
content_json
,
content_type
=
'application/json'
)
class
CouponMixin
(
object
):
""" Mixin for preparing data for coupons and creating coupons. """
...
...
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