Commit d714b56f by Vedran Karačić

Merge pull request #503 from edx/vkaracic/vouchers-api

Voucher API endpoint
parents 669c5180 acee272a
from __future__ import unicode_literals
import json
from django.core.urlresolvers import reverse
from oscar.test.factories import ConditionalOfferFactory, VoucherFactory
from ecommerce.tests.testcases import TestCase
class VoucherViewSetTests(TestCase):
""" Tests for the VoucherViewSet view set. """
coupon_code = 'COUPONCODE'
path = reverse('api:v2:vouchers-list')
def setUp(self):
super(VoucherViewSetTests, self).setUp()
self.user = self.create_user(is_staff=True)
self.client.login(username=self.user.username, password=self.password)
voucher1 = VoucherFactory()
voucher1.offers.add(ConditionalOfferFactory())
self.voucher = VoucherFactory(code=self.coupon_code)
self.voucher.offers.add(ConditionalOfferFactory(name='test2'))
def test_voucher_listing(self):
""" Verify the endpoint lists out all vouchers. """
response = self.client.get(self.path)
response_data = json.loads(response.content)
self.assertEqual(response_data['count'], 2)
self.assertEqual(response_data['results'][1]['code'], self.coupon_code)
def test_voucher_filtering(self):
""" Verify the endpoint filters by code. """
filter_path = '{}?code={}'.format(self.path, self.coupon_code)
response = self.client.get(filter_path)
response_data = json.loads(response.content)
self.assertEqual(response_data['count'], 1)
self.assertEqual(response_data['results'][0]['code'], self.coupon_code)
...@@ -8,7 +8,7 @@ from ecommerce.extensions.api.v2.views import (baskets as basket_views, ...@@ -8,7 +8,7 @@ from ecommerce.extensions.api.v2.views import (baskets as basket_views,
products as product_views, courses as course_views, products as product_views, courses as course_views,
publication as publication_views, partners as partner_views, publication as publication_views, partners as partner_views,
catalog as catalog_views, stockrecords as stockrecords_views, catalog as catalog_views, stockrecords as stockrecords_views,
coupons as coupon_views) coupons as coupon_views, vouchers as voucher_views)
from ecommerce.extensions.voucher.views import CouponReportCSVView from ecommerce.extensions.voucher.views import CouponReportCSVView
ORDER_NUMBER_PATTERN = r'(?P<number>[-\w]+)' ORDER_NUMBER_PATTERN = r'(?P<number>[-\w]+)'
...@@ -85,4 +85,6 @@ router.register(r'catalogs', catalog_views.CatalogViewSet) \ ...@@ -85,4 +85,6 @@ router.register(r'catalogs', catalog_views.CatalogViewSet) \
router.register(r'coupons', coupon_views.CouponViewSet, base_name='coupons') router.register(r'coupons', coupon_views.CouponViewSet, base_name='coupons')
router.register(r'orders', order_views.OrderViewSet) router.register(r'orders', order_views.OrderViewSet)
router.register(r'vouchers', voucher_views.VoucherViewSet, base_name='vouchers')
urlpatterns += router.urls urlpatterns += router.urls
"""HTTP endpoints for interacting with vouchers."""
import django_filters
from oscar.core.loading import get_model
from rest_framework import filters
from rest_framework.permissions import IsAuthenticated, IsAdminUser
from ecommerce.extensions.api import serializers
from ecommerce.extensions.api.v2.views import NonDestroyableModelViewSet
Voucher = get_model('voucher', 'Voucher')
class VoucherFilter(django_filters.FilterSet):
"""
Filter for vouchers via query string parameters.
Currently supports filtering via the voucher's code.
"""
code = django_filters.CharFilter(name='code', lookup_type='exact')
class Meta(object):
model = Voucher
fields = ('code', )
class VoucherViewSet(NonDestroyableModelViewSet):
""" View set for vouchers. """
queryset = Voucher.objects.all()
serializer_class = serializers.VoucherSerializer
permission_classes = (IsAuthenticated, IsAdminUser,)
filter_backends = (filters.DjangoFilterBackend, )
filter_class = VoucherFilter
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