def test_retrieve_recipe(self): sample_recipe(self.user) sample_recipe(self.user) recipes = Recipe.objects.order_by('-id') serializer = RecipeSerializer(recipes, many=True) resp = self.client.get(RECIPE_LIST_URL) self.assertEqual(resp.status_code, status.HTTP_200_OK) self.assertEqual(resp.data, serializer.data)
def test_filter_recipes_by_tags(self): """tag 가 있는 recipe 만 리턴되는지 테스트""" recipe1 = sample_recipe(user=self.user, title='Poo Phat Pong Curry') recipe2 = sample_recipe(user=self.user, title='Kimchi soup') tag1 = sample_tag(user=self.user, name='Yummy') tag2 = sample_tag(user=self.user, name='good place') recipe1.tags.add(tag1) recipe2.tags.add(tag2) recipe3 = sample_recipe(user=self.user, title='Fish and chips') res = self.client.get(RECIPES_URL, {'tags': f'{tag1.id}, {tag2.id}'}) serializer1 = RecipeSerializer(recipe1) serializer2 = RecipeSerializer(recipe2) serializer3 = RecipeSerializer(recipe3) self.assertIn(serializer1.data, res.data) self.assertIn(serializer2.data, res.data) self.assertNotIn(serializer3.data, res.data)
def test_filter_recipes_by_tags(self): recipe1 = sample_recipe(user=self.user, title='Thai vegetable curry') recipe2 = sample_recipe(user=self.user, title='Aubergine with tahini') tag1 = sample_tag(user=self.user, name='Vegan') tag2 = sample_tag(user=self.user, name='Vegetarian') recipe1.tags.add(tag1) recipe2.tags.add(tag2) recipe3 = sample_recipe(user=self.user, title='Fish and chips') resp = self.client.get(RECIPE_LIST_URL, {'tags': f'{tag1.id},{tag2.id}'}) serializer1 = RecipeSerializer(recipe1) serializer2 = RecipeSerializer(recipe2) serializer3 = RecipeSerializer(recipe3) self.assertIn(serializer1.data, resp.data) self.assertIn(serializer2.data, resp.data) self.assertNotIn(serializer3.data, resp.data)
def test_filter_by_ingredients(self): recipe1 = sample_recipe(user=self.user, title='Thai vegetable curry') recipe2 = sample_recipe(user=self.user, title='Aubergine with tahini') recipe3 = sample_recipe(user=self.user, title='Spaghetti with meat') ingredient1 = Ingredient.objects.create(user=self.user, name='Tomato') ingredient2 = Ingredient.objects.create(user=self.user, name='Bean') recipe1.ingredients.add(ingredient1) recipe2.ingredients.add(ingredient2) resp = self.client.get( RECIPE_LIST_URL, {'ingredients': f'{ingredient1.id},{ingredient2.id}'}) serializer1 = RecipeSerializer(recipe1) serializer2 = RecipeSerializer(recipe2) serializer3 = RecipeSerializer(recipe3) self.assertIn(serializer1.data, resp.data) self.assertIn(serializer2.data, resp.data) self.assertNotIn(serializer3.data, resp.data)
def test_retrieve_recipes(self): """test retrieving a list of recipes""" sample_recipe(user=self.user) sample_recipe(user=self.user) res = self.client.get(RECIPE_URL) recipes = Recipe.objects.all().order_by('-id') serializer = RecipeSerializer(recipes, many=True) self.assertEqual(res.status_code, status.HTTP_200_OK) self.assertEqual(res.data, serializer.data)
def test_filter_recipes_by_ingredients(self): """ingredients 가 있는 recipe 만 리턴되는지 테스트""" recipe1 = sample_recipe(user=self.user, title='Combination Pizza') recipe2 = sample_recipe(user=self.user, title='Tomato spaghetti') ingredient1 = sample_ingredient(user=self.user, name='milk') ingredient2 = sample_ingredient(user=self.user, name='tomato') recipe1.ingredients.add(ingredient1) recipe2.ingredients.add(ingredient2) recipe3 = sample_recipe(user=self.user, title='Cheese cake') res = self.client.get( RECIPES_URL, {'ingredients': {f'{ingredient1.id},{ingredient2.id}'}}) serializer1 = RecipeSerializer(recipe1) serializer2 = RecipeSerializer(recipe2) serializer3 = RecipeSerializer(recipe3) self.assertIn(serializer1.data, res.data) self.assertIn(serializer2.data, res.data) self.assertNotIn(serializer3.data, res.data)
def test_retrieve_recipes_limited_to_user(self): user2 = get_user_model().objects.create_user('*****@*****.**', 'test123') sample_recipe(self.user) sample_recipe(user2) recipes = Recipe.objects.filter(user=self.user) serializer = RecipeSerializer(recipes, many=True) resp = self.client.get(RECIPE_LIST_URL) self.assertEqual(resp.status_code, status.HTTP_200_OK) self.assertEqual(resp.data, serializer.data)
def test_filter_recipes_by_tags(self): """Test returning recipes with specific tags""" recipe1 = sample_recipe(user=self.user, title='Tahi vegetable curry') recipe2 = sample_recipe(user=self.user, title='Twice-cooked pork') tag1 = sample_tag(user=self.user, name='Vegan') tag2 = sample_tag(user=self.user, name='Meat') recipe1.tags.add(tag1) recipe2.tags.add(tag2) recipe3 = sample_recipe(user=self.user, title='Fish and chips') res = self.client.get( RECIPES_URL, {'tags': f'{tag1.id},{tag2.id}'} ) serializer1 = RecipeSerializer(recipe1) serializer2 = RecipeSerializer(recipe2) serializer3 = RecipeSerializer(recipe3) self.assertIn(serializer1.data, res.data) self.assertIn(serializer2.data, res.data) self.assertNotIn(serializer3.data, res.data)
def test_filter_recipes_by_tags(self): """Test returning recipes with specific tags""" recipe1 = sample_recipe(user=self.user, title='Thai vegetable curry') recipe2 = sample_recipe(user=self.user, title='Aubergine with tahini') tag1 = sample_tag(user=self.user, name='Vegan') tag2 = sample_tag(user=self.user, name='Vegetarian') recipe1.tags.add(tag1) recipe2.tags.add(tag2) recipe3 = sample_recipe(user=self.user, title='Fish and chips') res = self.client.get( RECIPES_URL, {'tags': '{},{}'.format(tag1.id, tag2.id)} ) serializer1 = RecipeSerializer(recipe1) serializer2 = RecipeSerializer(recipe2) serializer3 = RecipeSerializer(recipe3) self.assertIn(serializer1.data, res.data) self.assertIn(serializer2.data, res.data) self.assertNotIn(serializer3.data, res.data)
def test_filter_recipes_by_ingredients(self): """Test returning recipes with specific ingredients""" recipe1 = sample_recipe(user=self.user, title='Posh beans on toast') recipe2 = sample_recipe(user=self.user, title='Chicken cacciatore') ingredient1 = sample_ingredient(user=self.user, name='Feta cheese') ingredient2 = sample_ingredient(user=self.user, name='Chicken') recipe1.ingredients.add(ingredient1) recipe2.ingredients.add(ingredient2) recipe3 = sample_recipe(user=self.user, title='Steak and mushrooms') res = self.client.get( RECIPES_URL, {'ingredients': f'{ingredient1.id},{ingredient2.id}'} ) serializer1 = RecipeSerializer(recipe1) serializer2 = RecipeSerializer(recipe2) serializer3 = RecipeSerializer(recipe3) self.assertIn(serializer1.data, res.data) self.assertIn(serializer2.data, res.data) self.assertNotIn(serializer3.data, res.data)
def test_filter_recipe_by_ingredient(self): """Test returning recipes with teh ingredients""" recipe1 = sample_recipe(user=self.user, title='Ugali') recipe2 = sample_recipe(user=self.user, title='Nyama boil') recipe3 = sample_recipe(user=self.user, title='managu stew') ingredient1 = sample_ingredient(user=self.user, name='unga wimbi') ingredient2 = sample_ingredient(user=self.user, name='nyama steak') recipe1.ingredients.add(ingredient1) recipe2.ingredients.add(ingredient2) res = self.client.get( RECIPE_URL, {'ingredients': f'{ingredient1.id}, {ingredient2.id}'}) serializer1 = RecipeSerializer(recipe1) serializer2 = RecipeSerializer(recipe2) serializer3 = RecipeSerializer(recipe3) self.assertIn(serializer1.data, res.data) self.assertIn(serializer2.data, res.data) self.assertNotIn(serializer3.data, res.data)
def test_filter_recipe_by_ingredients(self): """Test returnng recipes with specific ingredients""" recipe1 = sample_recipe(user=self.user, title='Curry') recipe2 = sample_recipe(user=self.user, title='Rice') ingredient1 = sample_ingredient(self.user, name='Cheese') ingredient2 = sample_ingredient(self.user, name='Chicken') recipe1.ingredients.add(ingredient1) recipe2.ingredients.add(ingredient2) recipe3 = sample_recipe(self.user, title='Stake') res = self.client.get( RECIPES_URL, {'ingredients': f'{ingredient1.id},{ingredient2.id}'} ) serializer1 = RecipeSerializer(recipe1) serializer2 = RecipeSerializer(recipe2) serializer3 = RecipeSerializer(recipe3) self.assertIn(serializer1.data, res.data) self.assertIn(serializer2.data, res.data) self.assertNotIn(serializer3.data, res.data)
def test_filter_recipe_by_tag(self): """test filter recipes per the api""" recipe1 = sample_recipe(user=self.user, title='The green kachumbari recipe from kitui') recipe2 = sample_recipe(user=self.user, title='The mashakura recipe from Thika') tag1 = sample_tag(user=self.user, name='mboga') tag2 = sample_tag(user=self.user, name='nyama') recipe1.tags.add(tag1) recipe2.tags.add(tag2) recipe3 = sample_recipe(user=self.user, title='Chapati madondo') res = self.client.get(RECIPE_URL, {'tags': f'{tag1.id},{tag2.id}'}) serializer1 = RecipeSerializer(recipe1) serializer2 = RecipeSerializer(recipe2) serializer3 = RecipeSerializer(recipe3) self.assertIn(serializer1.data, res.data) self.assertIn(serializer2.data, res.data) self.assertNotIn(serializer3.data, res.data)
def test_recipe_limited_to_user(self): """Test retrieving recipe for user""" user2 = get_user_model().objects.create_user('*****@*****.**', 'password') sample_recipe(user=user2) sample_recipe(user=self.user) res = self.client.get(RECIPES_URL) recipe = Recipe.objects.filter(user=self.user) serializer = RecipeSerializer(recipe, many=True) self.assertEqual(res.status_code, status.HTTP_200_OK) self.assertEqual(len(res.data), 1) self.assertEqual(res.data, serializer.data)
def test_recipe_list_limited_to_user(self): """test only recipes belong to authenticated user""" user2 = get_user_model().objects.create_user('*****@*****.**', 'password34556') sample_recipe(user=user2) sample_recipe(user=self.user) res = self.client.get(RECIPE_URL) recipes = Recipe.objects.all().filter(user=self.user) serializer = RecipeSerializer(recipes, many=True) self.assertEqual(res.status_code, status.HTTP_200_OK) self.assertEqual(len(res.data), 1) self.assertEqual(res.data, serializer.data)
def test_recipe_limited_to_user(self): user2=get_user_model().objects.create_user( '*****@*****.**', '1234' ) sample_recipe(user=user2) sample_recipe(user=self.user) res = self.client.get(RECIPE_URL) recipes = Recipe.objects.filter(user=self.user) serializer = RecipeSerializer(recipes, many=True) self.assertEqual(res.status_code, status.HTTP_200_OK) self.assertEqual(len(res.data), 1) self.assertEqual(res.data, serializer.data)
def test_recipes_limited_to_user(self): """인증 된 유저만 결과값을 반환하는지 테스트""" user2 = get_user_model().objects.create_user('*****@*****.**', 'pass4321') # user2 는 인증받지 못한 유저 객체 sample_recipe(user=user2) # self.user 는 setUp 에서 force_authenticate 를 받았음 sample_recipe(user=self.user) res = self.client.get(RECIPES_URL) # RecipeSerializer 와 비교하기 위해 쿼리셋을 반환하는 filter 를 사용 recipes = Recipe.objects.filter(user=self.user) serializer = RecipeSerializer(recipes, many=True) self.assertEqual(res.status_code, status.HTTP_200_OK) self.assertEqual(len(res.data), 1) self.assertEqual(res.data, serializer.data)