filter flavor on hall of fame + setup categories for future new product lineups

This commit is contained in:
nvrl committed 2026-04-11 02:28:20 +02:00
1 parent f3ca748c55
commit 5e3474dd59
3 files changed
+136 -12

No files matched your search

+44 -2
View File
@@ -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)
+5 -1
View File
@@ -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)