mirror of
https://github.com/narrrl/holy-flavor-rater.git
synced 2026-11-03 16:41:27 +01:00
filter flavor on hall of fame + setup categories for future new product lineups
This commit is contained in:
1 parent
f3ca748c55
commit
5e3474dd59
3 files changed
+136
-12
No files matched your search
+44
-2
@@ -1,3 +1,45 @@
|
||||
from django.test import TestCase
|
||||
from django.urls import reverse
|
||||
from rest_framework import status
|
||||
from rest_framework.test import APITestCase
|
||||
from .models import Category, Flavor, User, Rating
|
||||
|
||||
# Create your tests here.
|
||||
class FlavorTopTests(APITestCase):
|
||||
def setUp(self):
|
||||
self.category_energy = Category.objects.create(name='Energy', slug='energy')
|
||||
self.category_iced_tea = Category.objects.create(name='Iced Tea', slug='iced-tea')
|
||||
|
||||
self.user = User.objects.create_user(username='testuser', password='password')
|
||||
|
||||
# Create flavors
|
||||
self.flavor1 = Flavor.objects.create(name='Energy 1', category=self.category_energy)
|
||||
self.flavor2 = Flavor.objects.create(name='Iced Tea 1', category=self.category_iced_tea)
|
||||
|
||||
# Add ratings to make them appear in top (since we filter by ratings__isnull=False)
|
||||
Rating.objects.create(user=self.user, flavor=self.flavor1, score=5)
|
||||
Rating.objects.create(user=self.user, flavor=self.flavor2, score=4)
|
||||
|
||||
def test_top_flavors_all(self):
|
||||
url = reverse('flavor-top')
|
||||
response = self.client.get(url)
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(len(response.data), 2)
|
||||
|
||||
def test_top_flavors_filtered_energy(self):
|
||||
url = reverse('flavor-top')
|
||||
response = self.client.get(url, {'category': 'energy'})
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(len(response.data), 1)
|
||||
self.assertEqual(response.data[0]['name'], 'Energy 1')
|
||||
|
||||
def test_top_flavors_filtered_iced_tea(self):
|
||||
url = reverse('flavor-top')
|
||||
response = self.client.get(url, {'category': 'iced-tea'})
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(len(response.data), 1)
|
||||
self.assertEqual(response.data[0]['name'], 'Iced Tea 1')
|
||||
|
||||
def test_top_flavors_filtered_non_existent(self):
|
||||
url = reverse('flavor-top')
|
||||
response = self.client.get(url, {'category': 'non-existent'})
|
||||
self.assertEqual(response.status_code, status.HTTP_200_OK)
|
||||
self.assertEqual(len(response.data), 0)
|
||||
@@ -165,7 +165,11 @@ class FlavorViewSet(viewsets.ModelViewSet):
|
||||
|
||||
@action(detail=False, methods=['get'], permission_classes=[permissions.AllowAny])
|
||||
def top(self, request):
|
||||
top_flavors = self.get_queryset().filter(ratings__isnull=False).distinct()[:10]
|
||||
queryset = self.get_queryset().filter(ratings__isnull=False)
|
||||
category_slug = request.query_params.get('category')
|
||||
if category_slug:
|
||||
queryset = queryset.filter(category__slug=category_slug)
|
||||
top_flavors = queryset.distinct()[:10]
|
||||
serializer = self.get_serializer(top_flavors, many=True)
|
||||
return Response(serializer.data)
|
||||
|
||||
|
||||
Reference in new issue
Block a user