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])