Skip to content

Commit

Permalink
added recipe detail serializer
Browse files Browse the repository at this point in the history
  • Loading branch information
iameraj committed Feb 5, 2024
1 parent 70cb30c commit 9c14d1b
Show file tree
Hide file tree
Showing 4 changed files with 36 additions and 8 deletions.
9 changes: 8 additions & 1 deletion app/recipe/serializers.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,10 +3,17 @@
from rest_framework import serializers
from core.models import Recipe


class RecipeSerializer(serializers.ModelSerializer):
"""Serializer for Recipe"""

class Meta:
model = Recipe
fields = ["id", "title", "time_minutes", "price" ]
fields = ["id", "title", "time_minutes", "price"]
read_only_fields = ["id"]

class RecipeDetailSerializer(RecipeSerializer):
"""Serializer for Recipe detail view"""

class Meta(RecipeSerializer.Meta):
fields = RecipeSerializer.Meta.fields + ['description']
16 changes: 14 additions & 2 deletions app/recipe/test/testRecipeAPI.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,14 +7,17 @@
from django.test import TestCase
from django.urls import reverse
from rest_framework import status
from rest_framework.authtoken.serializers import serializers
from rest_framework.test import APIClient
from core.models import Recipe, User
from recipe.serializers import RecipeSerializer
from recipe.serializers import RecipeSerializer, RecipeDetailSerializer

RECIPE_URL = reverse("recipe:recipe-list")


def detail_url(recipe_id):
return reverse("recipe:recipe-detail", args=[recipe_id])


def create_recipe(user, **params):
"""Create and return a sample recipe"""
defaults = {
Expand Down Expand Up @@ -73,3 +76,12 @@ def test_retrieve_recipes(self):
self.assertEqual(status.HTTP_200_OK, res.status_code)
self.assertEqual(serializer.data, res.data)

def test_get_recipe_detail(self):
"""Test getting recipe details"""

recipe = create_recipe(user=self.user)
url = detail_url(recipe_id=recipe.id)
res = self.client.get(url)

serializer = RecipeDetailSerializer(recipe)
self.assertEqual(res.data, serializer.data)
2 changes: 1 addition & 1 deletion app/recipe/urls.py
Original file line number Diff line number Diff line change
Expand Up @@ -10,5 +10,5 @@
app_name = "recipe"

urlpatterns = [
path("", include(router.urls)),
path("", include(router.urls)),
]
17 changes: 13 additions & 4 deletions app/recipe/views.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,17 +7,26 @@
from rest_framework.permissions import IsAuthenticated

from core.models import Recipe
from recipe.serializers import RecipeSerializer
from recipe.serializers import RecipeDetailSerializer, RecipeSerializer


class RecipeViewSet(viewsets.ModelViewSet):
"""Views to manage Recipe API endpoints"""

serializer_class = RecipeSerializer
serializer_class = RecipeDetailSerializer
queryset = Recipe.objects.all()
authentication_classes = [TokenAuthentication]
permission_classes = [IsAuthenticated]
authentication_classes = [TokenAuthentication]
permission_classes = [IsAuthenticated]

def get_queryset(self):
"""Retrieve recipe for authenticated user"""

return self.queryset.filter(user=self.request.user).order_by("-id")

def get_serializer_class(self):
"""Return the serializer class for request"""

if self.action == 'list':
return RecipeSerializer

return self.serializer_class

0 comments on commit 9c14d1b

Please sign in to comment.