Commit 844f93cf by Marko Jevtic Committed by Marko Jevtić

[SOL-2165] Fix voucher remove error

parent 911eb125
...@@ -6,6 +6,7 @@ from oscar.core.loading import get_class ...@@ -6,6 +6,7 @@ from oscar.core.loading import get_class
class BasketApplication(app.BasketApplication): class BasketApplication(app.BasketApplication):
add_voucher_view = get_class('basket.views', 'VoucherAddMessagesView') add_voucher_view = get_class('basket.views', 'VoucherAddMessagesView')
remove_voucher_view = get_class('basket.views', 'VoucherRemoveMessagesView')
single_item_view = get_class('basket.views', 'BasketSingleItemView') single_item_view = get_class('basket.views', 'BasketSingleItemView')
summary_view = get_class('basket.views', 'BasketSummaryView') summary_view = get_class('basket.views', 'BasketSummaryView')
......
...@@ -30,7 +30,7 @@ from ecommerce.core.url_utils import get_lms_url ...@@ -30,7 +30,7 @@ from ecommerce.core.url_utils import get_lms_url
from ecommerce.coupons.tests.mixins import CouponMixin, CourseCatalogMockMixin from ecommerce.coupons.tests.mixins import CouponMixin, CourseCatalogMockMixin
from ecommerce.courses.tests.factories import CourseFactory from ecommerce.courses.tests.factories import CourseFactory
from ecommerce.extensions.basket.utils import get_basket_switch_data from ecommerce.extensions.basket.utils import get_basket_switch_data
from ecommerce.extensions.basket.views import VoucherAddMessagesView from ecommerce.extensions.basket.views import VoucherAddMessagesView, VoucherRemoveMessagesView
from ecommerce.extensions.catalogue.tests.mixins import CourseCatalogTestMixin from ecommerce.extensions.catalogue.tests.mixins import CourseCatalogTestMixin
from ecommerce.extensions.offer.utils import format_benefit_value from ecommerce.extensions.offer.utils import format_benefit_value
from ecommerce.extensions.payment.constants import CLIENT_SIDE_CHECKOUT_FLAG_NAME from ecommerce.extensions.payment.constants import CLIENT_SIDE_CHECKOUT_FLAG_NAME
...@@ -544,7 +544,7 @@ class VoucherAddMessagesViewTests(TestCase): ...@@ -544,7 +544,7 @@ class VoucherAddMessagesViewTests(TestCase):
self.voucher_add_view.request = self.request self.voucher_add_view.request = self.request
self.voucher_add_view.form_valid(self.form) self.voucher_add_view.form_valid(self.form)
request_message = self.get_error_message_from_request() request_message = self.get_error_message_from_request()
self.assertEqual(request_message, message) self.assertEqual(str(request_message), message)
def test_no_voucher_error_msg(self): def test_no_voucher_error_msg(self):
""" Verify correct error message is returned when voucher can't be found. """ """ Verify correct error message is returned when voucher can't be found. """
...@@ -587,3 +587,38 @@ class VoucherAddMessagesViewTests(TestCase): ...@@ -587,3 +587,38 @@ class VoucherAddMessagesViewTests(TestCase):
order = factories.OrderFactory() order = factories.OrderFactory()
VoucherApplication.objects.create(voucher=voucher, user=self.user, order=order) VoucherApplication.objects.create(voucher=voucher, user=self.user, order=order)
self.assertMessage(_("Coupon code '{code}' is invalid.").format(code=COUPON_CODE)) self.assertMessage(_("Coupon code '{code}' is invalid.").format(code=COUPON_CODE))
class VoucherRemoveMessagesViewTests(CouponMixin, CourseCatalogTestMixin, TestCase):
""" VoucherRemoveMessagesView view tests. """
def setUp(self):
super(VoucherRemoveMessagesViewTests, self).setUp()
self.user = self.create_user()
self.client.login(username=self.user.username, password=self.password)
self.course = CourseFactory()
self.course.create_or_update_seat('verified', True, 50, self.partner)
self.product = self.course.create_or_update_seat('verified', False, 0, self.partner)
self.voucher, __ = prepare_voucher(code=COUPON_CODE)
self.request = RequestFactory().request()
# Fallback storage is needed in tests with messages
setattr(self.request, 'session', 'session')
messages = FallbackStorage(self.request)
setattr(self.request, '_messages', messages)
self.request.user = self.user
basket = factories.BasketFactory(owner=self.user, site=self.site)
basket.add_product(self.product, 1)
self.request.basket = basket
self.voucher_remove_view = VoucherRemoveMessagesView()
def test_remove_voucher_pk_conversion(self):
""" Verify that voucher primary key is converted to integer """
self.voucher_remove_view.post(self.request, pk=self.voucher.id)
request_message = list(get_messages(self.request))[-1].message
self.assertEqual(
str(request_message),
"No voucher found with id '{0}'".format(self.voucher.id)
)
...@@ -333,3 +333,11 @@ class VoucherAddMessagesView(VoucherAddView): ...@@ -333,3 +333,11 @@ class VoucherAddMessagesView(VoucherAddView):
) )
return redirect_to_referrer(self.request, 'basket:summary') return redirect_to_referrer(self.request, 'basket:summary')
class VoucherRemoveMessagesView(VoucherRemoveView):
def post(self, request, *args, **kwargs):
# This will fix the bug in Django Oscar
# Expected Primary Key to be integer, but it's Unicode instead
kwargs['pk'] = int(kwargs['pk'])
return super(VoucherRemoveMessagesView, self).post(request, *args, **kwargs)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment