enabled per-company products filtering

This commit is contained in:
Sam
2021-02-23 13:40:49 +00:00
parent e945bd72a3
commit 4f39963691
2 changed files with 22 additions and 7 deletions

View File

@@ -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)

View File

@@ -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)