def test_attempt_delete_non_existing_recipe(self):
     token = register_and_login()
     # make sure a given recipe does not exist
     [code, data] = decode_response(self.get_recipe(token, 9999))
     self.assertEqual(code, 404)
     self.assertEqual(data['message'], 'recipe does not exist')
     # attempt to delete this recipe
     [code, data] = decode_response(self.delete_recipe(token, 9999))
     self.assertEqual(code, 404)
     self.assertEqual(data['message'], 'recipe does not exist')
 def test_can_delete_recipe(self):
     # post a new recipe
     [id, token] = self.register_login_and_post_recipe()
     # check recipe exists
     response = self.get_recipe(token, id)
     self.assertEqual(response.status_code, 200)
     # attempt to delete recipe
     [code, data] = decode_response(self.delete_recipe(token, id))
     self.assertEqual(code, 200)
     self.assertEqual(data['message'], 'recipe deleted')
     # check recipe is gone
     [code, data] = decode_response(self.get_recipe(token, id))
     self.assertEqual(code, 404)
     self.assertEqual(data['message'], 'recipe does not exist')
 def test_delete_recipe_not_owned_by_user(self):
     [id, token1] = self.register_login_and_post_recipe()
     token2 = register_and_login('username2', '*****@*****.**')
     # attemt to delete recipe with wrong credentials
     [code, data] = decode_response(self.delete_recipe(token2, id))
     self.assertEqual(code, 403)
     self.assertEqual(data['message'], 'action forbidden')
 def test_can_search_by_description(self):
     [id, token] = self.register_login_and_post_recipe()
     query = {'fields': ['description'], 'search': 'salt', 'mode': 'any'}
     response = self.search_recipes(token, query)
     [code, data] = decode_response(response)
     self.assertEqual(code, 200)
     self.assertEqual(data['message'], 'search results')
     self.assertEqual(data['data'], [id])
 def test_search_nonexistent_title_returns_no_results(self):
     [id, token] = self.register_login_and_post_recipe()
     query = {'fields': ['title'], 'search': 'noexist', 'mode': 'any'}
     response = self.search_recipes(token, query)
     [code, data] = decode_response(response)
     self.assertEqual(code, 200)
     self.assertEqual(data['message'], 'search results')
     self.assertEqual(data['data'], [])
 def test_search_no_search_fails(self):
     [id1, token] = self.register_login_and_post_recipe()
     query = {'fields': ['title', 'tags', 'description'], 'mode': 'all'}
     with self.client:
         response = self.client.get(
             f'/search?{urlencode(query)}',
             headers={'Authorization': f'Bearer {token}'},
         )
         [code, data] = decode_response(response)
         self.assertEqual(code, 400)
         self.assertEqual(data['message'], 'malformed request')
 def test_can_search_tags(self):
     [id1, token] = self.register_login_and_post_recipe()
     id2 = self.post_recipe_decode_response(token, recipe_two_with_tags)
     id3 = self.post_recipe_decode_response(token, recipe_three_with_tags)
     query = {'fields': ['tags'], 'search': 'easy', 'mode': 'any'}
     response = self.search_recipes(token, query)
     [code, data] = decode_response(response)
     self.assertEqual(code, 200)
     self.assertEqual(data['message'], 'search results')
     self.assertEqual(data['data'], [id2, id3])
     self.assertNotIn(id1, data['data'])
 def test_search_description_returns_multiple_results(self):
     [id1, token] = self.register_login_and_post_recipe()
     id2 = self.post_recipe_decode_response(token, recipe_two_no_tags)
     id3 = self.post_recipe_decode_response(token, recipe_one_no_tags)
     query = {'fields': ['description'], 'search': 'salt', 'mode': 'any'}
     response = self.search_recipes(token, query)
     [code, data] = decode_response(response)
     self.assertEqual(code, 200)
     self.assertEqual(data['message'], 'search results')
     self.assertEqual(data['data'], [id1, id3])
     self.assertNotIn(id2, data['data'])
 def test_get_single_recipe_no_tags_after_created(self):
     # register and log in
     token = register_and_login()
     # post a recipe and then retrieve all recipes
     response = self.post_recipe(token, recipe_one_no_tags)
     self.assertEqual(response.status_code, 201)
     [code, data] = decode_response(self.get_recipes(token))
     self.assertEqual(code, 200)
     # # check if data returned matches what we saved
     recipe = data['data'][0]
     for key in recipe_one_no_tags.keys():
         self.assertEqual(recipe[key], recipe_one_no_tags[key])
 def test_can_search_multiple_fields_and_terms(self):
     [id1, token] = self.register_login_and_post_recipe()
     id2 = self.post_recipe_decode_response(token, recipe_two_no_tags)
     id3 = self.post_recipe_decode_response(token, recipe_three_with_tags)
     id4 = self.post_recipe_decode_response(token, recipe_four_with_tags)
     query = {
         'fields': ['description', 'tags'],
         'search': 'classic easy boiled',
         'mode': 'any'
     }
     response = self.search_recipes(token, query)
     [code, data] = decode_response(response)
     self.assertEqual(code, 200)
     self.assertEqual(data['message'], 'search results')
     self.assertEqual(data['data'], [id2, id3, id4])
 def test_can_search_all_terms(self):
     [id1, token] = self.register_login_and_post_recipe()
     id2 = self.post_recipe_decode_response(token, recipe_two_no_tags)
     id3 = self.post_recipe_decode_response(token, recipe_three_with_tags)
     id4 = self.post_recipe_decode_response(token, recipe_four_with_tags)
     query = {
         'fields': ['title', 'tags', 'description'],
         'search': 'easy royale style',
         'mode': 'all'
     }
     response = self.search_recipes(token, query)
     [code, data] = decode_response(response)
     self.assertEqual(code, 200)
     self.assertEqual(data['message'], 'search results')
     self.assertEqual(data['data'], [id3])
     self.assertNotIn(id2, data['data'])
     self.assertNotIn(id4, data['data'])
 def test_search_only_returns_own_recipes(self):
     [id1,
      token1] = self.register_login_and_post_recipe('test1',
                                                    '*****@*****.**',
                                                    recipe_two_with_tags)
     [id2,
      token2] = self.register_login_and_post_recipe('tesft2',
                                                    '*****@*****.**',
                                                    recipe_two_with_tags)
     query = {'fields': ['tags'], 'search': 'easy', 'mode': 'all'}
     response1 = self.search_recipes(token1, query)
     [code1, data1] = decode_response(response1)
     self.assertEqual(code1, 200)
     self.assertEqual(data1['message'], 'search results')
     self.assertEqual(data1['data'], [id1])
     response2 = self.search_recipes(token2, query)
     [code2, data2] = decode_response(response2)
     self.assertEqual(code2, 200)
     self.assertEqual(data2['message'], 'search results')
     self.assertEqual(data2['data'], [id2])
     query = {'fields': ['title'], 'search': 'beans', 'mode': 'all'}
     response1 = self.search_recipes(token1, query)
     [code1, data1] = decode_response(response1)
     self.assertEqual(code1, 200)
     self.assertEqual(data1['message'], 'search results')
     self.assertEqual(data1['data'], [id1])
     response2 = self.search_recipes(token2, query)
     [code2, data2] = decode_response(response2)
     self.assertEqual(code2, 200)
     self.assertEqual(data2['message'], 'search results')
     self.assertEqual(data2['data'], [id2])
     query = {'fields': ['description'], 'search': 'beans', 'mode': 'all'}
     response1 = self.search_recipes(token1, query)
     [code1, data1] = decode_response(response1)
     self.assertEqual(code1, 200)
     self.assertEqual(data1['message'], 'search results')
     self.assertEqual(data1['data'], [id1])
     response2 = self.search_recipes(token2, query)
     [code2, data2] = decode_response(response2)
     self.assertEqual(code2, 200)
     self.assertEqual(data2['message'], 'search results')
     self.assertEqual(data2['data'], [id2])