Пример #1
0
    def test_view_recipe_detail(self):
        """
            Test viewing a recipe detail.
        """
        # Add a sample recipe with a tag and ingredient
        recipe = sample_recipe(user=self.user)
        recipe.tags.add(sample_tag(user=self.user))
        recipe.ingredients.add(sample_ingredient(user=self.user))

        # Generate the url & make a GET Request
        url = detail_url(recipe.id)
        res = self.client.get(url)

        # Serialize the data
        serializer = RecipeDetailSerializer(recipe)

        # Assertion
        self.assertEqual(res.data, serializer.data)
Пример #2
0
    def test_successful_recipe_detail_retrieve(self):
        """Testing if recipe detail retrieval is successful."""

        tag = sample_tag(user=self.user, name='Dessert')

        ingredient = sample_ingredient(user=self.user, name='Onion')

        recipe = sample_recipe(user=self.user)
        recipe.tags.add(tag)
        recipe.ingredients.add(ingredient)

        url = detail_url(recipe.id)

        res = self.client.get(url)

        serializer = RecipeDetailSerializer(recipe)

        self.assertEqual(res.status_code, status.HTTP_200_OK)
        self.assertEqual(res.data, serializer.data)
Пример #3
0
    def test_view_recipe_detail(self):
        recipe = sample_recipe(user=self.user)
        # adding data to many to many field
        recipe.tags.add(sample_tag(user=self.user))
        recipe.ingredients.add(sample_ingredient(user=self.user))

        res = self.client.get(detail_url(recipe.id))

        # we dont need many=True as this is a single object
        serializer = RecipeDetailSerializer(recipe)
        # print(serializer.data)
        # {'id': 6,
        # 'title': 'Sample recipe',
        # 'ingredients': [OrderedDict([('id', 8),
        #                              ('name', 'sample ingredient')])],
        # 'tags': [OrderedDict([('id', 2), ('name', 'main course')])],
        # 'time_miniutes': 10, 'price': '5.00', 'link': ''}

        self.assertEqual(res.data, serializer.data)
Пример #4
0
    def test_recipe_detail(self):
        """Test retrieving recipe detail data."""
        recipe = Recipe.objects.create(title='Recipe 1',
                                       user=self.user,
                                       time_minutes=6,
                                       price=4.00)
        tag = Tag.objects.create(user=self.user, name='Tag 1')
        ingredient = Ingredient.objects.create(user=self.user,
                                               name='Ingredient 1')
        recipe.tags.add(tag)
        recipe.ingredients.add(ingredient)
        serializer = RecipeDetailSerializer(recipe)

        url = get_recipe_detail_url(recipe.id)
        res = self.client.get(url)

        self.assertEqual(res.status_code, status.HTTP_200_OK)
        self.assertEqual(res.data, serializer.data)
        self.assertEqual(res.data['tags'][0]['name'], tag.name)
        self.assertEqual(res.data['ingredients'][0]['name'], ingredient.name)
Пример #5
0
    def test_create_recipe_with_tags(self):
        """Test creating recipe with associated tags"""
        tag1 = sample_tag(self.user)
        tag2 = sample_tag(self.user, name='Fatty food')
        payload = {
            'title': 'Cheescake',
            'time_minutes': 49,
            'price': 30,
            'tags': [tag1.id, tag2.id]
        }
        res = self.client.post(RECIPE_URL, payload)

        self.assertEqual(res.status_code, status.HTTP_201_CREATED)
        recipe = Recipe.objects.get(id=res.data['id'])
        tags = recipe.tags.all()
        self.assertEqual(tags.count(), 2)
        self.assertIn(tag1, tags)
        self.assertIn(tag2, tags)
        #  Remove probably
        serializer = RecipeDetailSerializer(recipe)
        res = self.client.get(detail_url(recipe.id))
        self.assertEqual(res.data, serializer.data)
Пример #6
0
    def test_view_recipe_detail(self):
        """Test viewing a recipe detail"""

        # create a sample recipe using the sample_recipe() mtd
        recipe = sample_recipe(user=self.user)

        # add a tag to the recipe
        # this is how to add in a many-to-many relationship
        recipe.tags.add(sample_tag(user=self.user))

        # add an ingredient to the recipe
        recipe.ingredients.add(sample_ingredient(user=self.user))

        # generate the url we are going to call
        url = detail_url(recipe.id)

        # HTTP GET call
        response = self.client.get(url)

        # serielizer
        serializer = RecipeDetailSerializer(recipe)

        # assert that response.data is equals to serializer.data
        self.assertEqual(response.data, serializer.data)
Пример #7
0
    def test_view_recipe_detail(self):
        """Test viewing a recipe detail"""
        recipe = sample_recipe(user=self.user)
        recipe.tags.add(sample_tag(user=self.user))
        recipe.ingredients.add(sample_ingredient(user=self.user))

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

        serializer = RecipeDetailSerializer(recipe)
        self.assertEqual(res.data, serializer.data)

        def test_create_basic_recipe(self):
            """Test creating recipe"""
            payload = {
                'title': 'Chocolate Cheesecake',
                'time_minutes': 30,
                'price': 5.00
            }
            res = self.client.post(RECIPES_URL, payload)

            self.assertEqual(res.status_code, status.HTTP_201_CREATED)
            recipe = Recipe.objects.get(id=res.data['id'])
            for key in payload.keys():
                self.assertEqual(payload[key], getattr(recipe, key))

        def test_create_recipe_with_tags(self):
            """Test creating a recipe with tags"""
            tag1 = sample_tag(user=self.user, name='Vegan')
            tag2 = sample_tag(user=self.user, name='Dessert')
            payload = {
                'title': 'Avacado Lime Cheesecake',
                'tags': [tag1.id, tag2.id],
                'time_minutes': 60,
                'price': 20.00
            }
            res = self.client.post(RECIPES_URL, payload)

            self.assertEqual(res.status_code, status.HTTP_201_CREATED)
            recipe = Recipe.objects.get(id=res.data['id'])
            tags = recipe.tags.all()
            self.assertEqaul(tags.count(), 2)
            self.assertIn(tag1, tags)
            self.assertIn(tag2, tags)

        def test_create_recipe_with_ingredients(self):
            """Test creating recipe with ingredients"""
            ingredient1 = sample_ingredient(user=self.user, name='Prawns')
            ingredient2 = sample_ingredient(user=self.user, name='Ginger')
            payload = {
                'title': 'Thai Prawn Red Curry',
                'ingredients': [ingredient1, ingredient2],
                'time_minutes': 20,
                'price': 7.00
            }
            res = self.client.post(RECIPES_URL, payload)

            self.assertEqual(res.status_code, status.HTTP_201_CREATED)
            recipe = Recipe.objects.get(id=res.data['id'])
            ingredients = recipe.ingredients.all()
            self.assertEqual(ingredients.count(), 2)
            self.assertIn(ingredient1, ingredients)
            self.assertIn(ingredient2, ingredients)

        def test_partial_update_recipe(self):
            """Test updating a recipe with patch"""
            recipe = sample_recipe(user=self.user)
            recipe.tags.add(sample_tag(user=self.user))
            new_tag = sample_tag(user=self.user, name='Curry')
            payload = {'title': 'Chicken tikka', 'tags': [new_tag.id]}
            url = detail_url(recipe.id)
            self.client.patch(url, payload)

            recipe.refresh_from_db()

            self.assertEqual(recipe.title, payload['title'])
            tags = recipe.tags.all()
            self.assertEqual(len(tags), 1)
            self.assertIn(new_tag, tags)

        def test_full_update_recipe(self):
            """Test updating a recipe with put"""
            recipe = sample_recipe(user=self.user)
            recipe.tags.add(sample_tag(user=self.user))
            payload = {
                'title': 'Spaghetti Carbonara',
                'time_minutes': 25,
                'price': 5.00
            }
            url = detail_url(recipe.id)
            self.client.put(url, payload)
            recipe.refresh_from_db()
            self.assertEqual(recipe.title, payload['title'])
            self.assertEqual(recipe.time_minutes, payload['time_minutes'])
            self.assertEqual(recipe.price, payload['price'])
            tags = recipe.tags.all()
            self.assertEqual(len(tags), 0)