Commit 542e5f48 by Jim Abramson

Merge pull request #56 from edx/jsa/xcom-218

Add endpoint to retrieve order by basket id.
parents f89ac74a 391acc8c
......@@ -50,15 +50,18 @@ class RetrieveOrderViewTests(ThrottlingMixin, UserMixin, TestCase):
def setUp(self):
super(RetrieveOrderViewTests, self).setUp()
user = self.create_user()
basket = factories.create_basket()
order_number = OrderNumberGenerator.order_number(basket)
self.order = factories.create_order(number=order_number)
self.basket = factories.create_basket()
order_number = OrderNumberGenerator.order_number(self.basket)
self.order = factories.create_order(number=order_number, basket=self.basket)
self.order.status = ORDER.PAID
self.order.user = user
self.order.save()
self.token = self.generate_jwt_token_header(user)
self.url = reverse('orders:retrieve', kwargs={'number': self.order.number})
@property
def url(self):
return reverse('orders:retrieve', kwargs={'number': self.order.number})
@ddt.data(ORDER.PAID, ORDER.COMPLETE, ORDER.REFUNDED, ORDER.FULFILLMENT_ERROR)
def test_get_order(self, order_status):
......@@ -67,8 +70,7 @@ class RetrieveOrderViewTests(ThrottlingMixin, UserMixin, TestCase):
self.order.save()
response = self.client.get(self.url, HTTP_AUTHORIZATION=self.token)
self.assertEqual(response.status_code, status.HTTP_200_OK)
result_order = json.loads(response.content)
self.assertEqual(OrderSerializer(self.order).data, result_order)
self.assertEqual(response.data, OrderSerializer(self.order).data)
@ddt.data(ORDER.OPEN, ORDER.BEING_PROCESSED, ORDER.ORDER_CANCELLED, ORDER.PAYMENT_CANCELLED)
def test_order_not_found(self, order_status):
......@@ -86,6 +88,15 @@ class RetrieveOrderViewTests(ThrottlingMixin, UserMixin, TestCase):
self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
@ddt.ddt
class RetrieveOrderByBasketViewTests(RetrieveOrderViewTests):
"""Test cases for getting orders using the basket id. """
@property
def url(self):
return reverse('order_by_basket', kwargs={'basket_id': self.basket.id})
class CreateOrderViewTests(TestCase):
USER_DATA = {
'username': 'sgoodman',
......
......@@ -4,6 +4,7 @@ from ecommerce.extensions.api import views
ORDER_NUMBER_PATTERN = r"(?P<number>[-\w]+)"
BASKET_ID_PATTERN = r"(?P<basket_id>[\w]+)"
ORDER_URLS = patterns(
'',
......@@ -23,5 +24,10 @@ ORDER_URLS = patterns(
urlpatterns = patterns(
'',
url(r'^processors/$', views.PaymentProcessorsView.as_view(), name='payment_processors'),
url(r'^orders/', include(ORDER_URLS, namespace='orders'))
url(r'^orders/', include(ORDER_URLS, namespace='orders')),
url(
r'^baskets/{basket_id}/order/$'.format(basket_id=BASKET_ID_PATTERN),
views.RetrieveOrderByBasketView.as_view(),
name='order_by_basket'
),
)
......@@ -91,6 +91,15 @@ class RetrieveOrderView(RetrieveAPIView):
raise Http404
class RetrieveOrderByBasketView(RetrieveOrderView):
""" Allow the viewing of Orders by Basket.
Works exactly the same as RetrieveOrderView, except that orders are looked
up via the id of the related basket.
"""
lookup_field = 'basket_id'
class OrderListCreateAPIView(FulfillmentMixin, ListCreateAPIView):
"""
Endpoint for listing or creating orders.
......
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