enabled per-company products filtering
This commit is contained in:
@@ -83,8 +83,8 @@ class ProductViewSetTest(APITestCase):
|
|||||||
|
|
||||||
def test_anon_user_can_filter_name(self):
|
def test_anon_user_can_filter_name(self):
|
||||||
# create instances
|
# create instances
|
||||||
self.factory(name='product1', tags="zapatos, verdes")
|
expected = self.factory(name='product1', tags="zapatos, verdes")
|
||||||
self.factory(name='product2', tags="rojos")
|
unexpected = self.factory(name='product2', tags="rojos")
|
||||||
|
|
||||||
url = f"{self.endpoint}?name=product1"
|
url = f"{self.endpoint}?name=product1"
|
||||||
|
|
||||||
@@ -96,12 +96,14 @@ class ProductViewSetTest(APITestCase):
|
|||||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
# Assert number of instnaces in response
|
# Assert number of instnaces in response
|
||||||
self.assertEquals(1, len(payload))
|
self.assertEquals(1, len(payload))
|
||||||
|
self.assertEquals(payload[0]['tags'], expected.tags)
|
||||||
|
|
||||||
def test_anon_user_can_filter_tags(self):
|
def test_anon_user_can_filter_tags(self):
|
||||||
# create instances
|
# create instances
|
||||||
expected_instance = [
|
expected_instance = [
|
||||||
self.factory(name='product1', tags="zapatos, rojos"),
|
self.factory(name='product1', tags="zapatos, rojos"),
|
||||||
self.factory(name='product2', tags="rojos")
|
self.factory(name='product2', tags="rojos"),
|
||||||
|
self.factory(name='product2', tags="colores, rojos")
|
||||||
]
|
]
|
||||||
unexpected_instance = [
|
unexpected_instance = [
|
||||||
self.factory(name='sadfdsa', tags="zapatos, azules"),
|
self.factory(name='sadfdsa', tags="zapatos, azules"),
|
||||||
@@ -123,7 +125,8 @@ class ProductViewSetTest(APITestCase):
|
|||||||
# create instances
|
# create instances
|
||||||
expected_instance = [
|
expected_instance = [
|
||||||
self.factory(attributes='xxl', tags="zapatos, rojos"),
|
self.factory(attributes='xxl', tags="zapatos, rojos"),
|
||||||
self.factory(attributes='blue, xxl', tags="rojos")
|
self.factory(attributes='blue, xxl', tags="rojos"),
|
||||||
|
self.factory(attributes='sizes xxl', tags="rojos")
|
||||||
]
|
]
|
||||||
unexpected_instance = [
|
unexpected_instance = [
|
||||||
self.factory(name='sadfdsa', tags="zapatos, azules"),
|
self.factory(name='sadfdsa', tags="zapatos, azules"),
|
||||||
@@ -145,7 +148,8 @@ class ProductViewSetTest(APITestCase):
|
|||||||
# create instances
|
# create instances
|
||||||
expected_instance = [
|
expected_instance = [
|
||||||
self.factory(category='ropa', tags="zapatos, rojos"),
|
self.factory(category='ropa', tags="zapatos, rojos"),
|
||||||
self.factory(category='ropa', tags="rojos")
|
self.factory(category='ropa', tags="rojos"),
|
||||||
|
self.factory(category='ropa', tags="colores/rojos"),
|
||||||
]
|
]
|
||||||
unexpected_instance = [
|
unexpected_instance = [
|
||||||
self.factory(category='roperos', tags="zapatos, azules"),
|
self.factory(category='roperos', tags="zapatos, azules"),
|
||||||
@@ -181,7 +185,6 @@ class ProductViewSetTest(APITestCase):
|
|||||||
# Request list
|
# Request list
|
||||||
response = self.client.get(url)
|
response = self.client.get(url)
|
||||||
payload = response.json()
|
payload = response.json()
|
||||||
import ipdb; ipdb.set_trace()
|
|
||||||
|
|
||||||
# Assert access is granted
|
# Assert access is granted
|
||||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||||
|
|||||||
@@ -15,7 +15,9 @@ from rest_framework import viewsets
|
|||||||
from rest_framework.response import Response
|
from rest_framework.response import Response
|
||||||
from rest_framework.permissions import IsAuthenticatedOrReadOnly, IsAdminUser, IsAuthenticated
|
from rest_framework.permissions import IsAuthenticatedOrReadOnly, IsAdminUser, IsAuthenticated
|
||||||
from rest_framework.decorators import api_view, permission_classes, action
|
from rest_framework.decorators import api_view, permission_classes, action
|
||||||
|
from rest_framework.filters import OrderingFilter
|
||||||
|
|
||||||
|
from django_filters.rest_framework import DjangoFilterBackend
|
||||||
import requests
|
import requests
|
||||||
|
|
||||||
from products.models import Product
|
from products.models import Product
|
||||||
@@ -38,11 +40,21 @@ logging.basicConfig(
|
|||||||
|
|
||||||
|
|
||||||
class ProductViewSet(viewsets.ModelViewSet):
|
class ProductViewSet(viewsets.ModelViewSet):
|
||||||
queryset = Product.objects.all()
|
# queryset = Product.objects.all()
|
||||||
serializer_class = ProductSerializer
|
serializer_class = ProductSerializer
|
||||||
permission_classes = [IsAuthenticatedOrReadOnly, IsCreator]
|
permission_classes = [IsAuthenticatedOrReadOnly, IsCreator]
|
||||||
|
filter_backends = [DjangoFilterBackend, OrderingFilter]
|
||||||
filterset_class = ProductTagFilter
|
filterset_class = ProductTagFilter
|
||||||
filterset_fields = ['name', 'tags', 'category', 'attributes', 'company', 'created']
|
filterset_fields = ['name', 'tags', 'category', 'attributes', 'company', 'created']
|
||||||
|
# TODO: figure out why cant use filterset for company filter
|
||||||
|
def get_queryset(self):
|
||||||
|
try:
|
||||||
|
company_id = self.request.GET.get('company')
|
||||||
|
company_id = int(company_id)
|
||||||
|
queryset = Product.objects.filter(company__id=company_id)
|
||||||
|
except:
|
||||||
|
queryset = Product.objects.all()
|
||||||
|
return queryset
|
||||||
|
|
||||||
def perform_create(self, serializer):
|
def perform_create(self, serializer):
|
||||||
serializer.save(creator=self.request.user)
|
serializer.save(creator=self.request.user)
|
||||||
|
|||||||
Reference in New Issue
Block a user