diff --git a/django_shop_payer_backend/backends.py b/django_shop_payer_backend/backends.py index 0dd260b..07fb53c 100644 --- a/django_shop_payer_backend/backends.py +++ b/django_shop_payer_backend/backends.py @@ -14,7 +14,12 @@ from shop.order_signals import confirmed, completed from forms import PayerRedirectForm -from helper import payer_order_item_from_order_item, buyer_details_from_user, payer_order_item_from_extra_order_price +from helper import ( + payer_order_item_from_order_item, + buyer_details_from_user, + payer_order_item_from_extra_order_price, + string_chunks, +) from payer_api.postapi import PayerPostAPI from payer_api.xml import PayerXMLDocument from payer_api.order import PayerProcessingControl, PayerOrder @@ -113,14 +118,8 @@ def payer_redirect_view(self, request): for extra_order_price in order.extraorderpricefield_set.all(): payer_order.add_order_item(payer_order_item_from_extra_order_price(extra_order_price)) - def chunks(l, n): - """ Yield successive n-sized chunks from l. - """ - for i in xrange(0, len(l), n): - yield l[i:i + n] - for info in order.extra_info.all(): - for t in list(chunks(info.text, 255)): + for t in list(string_chunks(info.text, 255)): payer_order.add_info_line(t) self.api.set_processing_control(self.get_processing_control(request)) diff --git a/django_shop_payer_backend/helper.py b/django_shop_payer_backend/helper.py index 23257cb..5bb22ee 100644 --- a/django_shop_payer_backend/helper.py +++ b/django_shop_payer_backend/helper.py @@ -26,6 +26,13 @@ class AddressParsingFailedException(Exception): "extra_order_price"]) +def string_chunks(l, n): + """ Yield successive n-sized chunks from l. + """ + for i in xrange(0, len(l), n): + yield l[i:i + n] + + def payer_order_item_from_order_item(order_item): order_item_dict = { diff --git a/django_shop_payer_backend/tests.py b/django_shop_payer_backend/tests.py index 2d53344..91cc9a2 100644 --- a/django_shop_payer_backend/tests.py +++ b/django_shop_payer_backend/tests.py @@ -8,6 +8,7 @@ from shop.models.ordermodel import ( Order, OrderItem, + OrderExtraInfo, ExtraOrderItemPriceField, ExtraOrderPriceField, ) @@ -403,6 +404,11 @@ class Mock(object): self.orderitem.line_total = Decimal('110') self.orderitem.save() + oi = OrderExtraInfo() + oi.order = self.order + oi.text = "buffalo " * 64 + oi.save() + eoif = ExtraOrderItemPriceField() eoif.order_item = self.orderitem eoif.label = 'Fake extra field' @@ -561,36 +567,37 @@ def test_processing_control(self): self.assertEqual(pc.settle_notification_url, urljoin(base_url, reverse('%s-%s' % ("payer", "settle",)))) self.assertEqual(pc.redirect_back_to_shop_url, urljoin(base_url, self.shop.get_cancel_url())) + def assertOrderDetails(self, request): + order = self.backend.shop.get_order(request) + order_id = self.backend.shop.get_order_unique_id(order) + + try: + assert order + except: + self.fail("payer_redirect_view could not fetch order from request.") + + self.assertEqual(order_id, order_id) + + response = self.backend.payer_redirect_view(request) + self.assertEqual(response.status_code, 200) + self.assertIn("text/html", response['Content-Type']) + def test_redirect_view_with_user(self): request = self.factory.get("/") request.user = self.user self.assertTrue(request.user.is_authenticated()) - - view = self.backend.payer_redirect_view(request) - order = self.backend.shop.get_order(request) - - # TODO: Make some assertions + self.assertOrderDetails(request) def test_redirect_view_with_anonymous_user(self): request = self.factory.get("/") request.user = AnonymousUser() - self.assertFalse(request.user.is_authenticated()) - - view = self.backend.payer_redirect_view(request) - order = self.backend.shop.get_order(request) + setattr(request, 'session', {'order_id': self.order.id}) + self.assertEqual(request.session.get('order_id', None), self.order.id) - # TODO: Make some assertions - - def test_redirect_view_without_user(self): - request = self.factory.get("/") - request.user = None - - view = self.backend.payer_redirect_view(request) - order = self.backend.shop.get_order(request) - - # TODO: Make some assertions + self.assertFalse(request.user.is_authenticated()) + self.assertOrderDetails(request) def test_ip_validation(self): @@ -718,7 +725,8 @@ def test_handle_order_notifications(self): order = Order.objects.get(pk=self.order.id) self.assertEqual(order.status, Order.CONFIRMED) - test_cart = lambda: Cart.objects.get(pk=order.cart_pk) + def test_cart(): + Cart.objects.get(pk=order.cart_pk) self.assertRaises(Cart.DoesNotExist, test_cart) # Settle notification