def test_endpoint_happypath_change_drink_1_ingredient( self, mock_get_token_auth_header, mock_verify_decode_jwt): mock_get_token_auth_header.return_value = 'manager-token' mock_verify_decode_jwt.return_value = { 'permissions': ['delete:drinks', 'get:drinks-detail', 'patch:drinks', 'post:drinks'] } payload = deepcopy(self.payload) payload['recipe'] = payload['recipe'][0] response = self.client.patch('/drinks/1', json=payload, content_type='application/json') self.assertEqual(200, response.status_code) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'success', bool, True) assert_payload_field_type(self, data, 'drinks', list) next_drink = data['drinks'][0] assert_payload_field_type(self, next_drink, 'id', int) assert_payload_field_type_value(self, next_drink, 'title', str, self.drink_name) assert_payload_field_type(self, next_drink, 'recipe', list) self.assertEqual(1, len(next_drink['recipe'])) next_recipe = next_drink['recipe'][0] self.assertIsInstance(next_recipe, dict) assert_payload_field_type_value(self, next_recipe, 'name', str, self.recipe_name_1) assert_payload_field_type_value(self, next_recipe, 'color', str, self.recipe_color_1) assert_payload_field_type_value(self, next_recipe, 'parts', int, self.recipe_parts_1)
def test_happy_path_user_quest_progress_can_be_patched(self): payload = deepcopy(self.payload) response = self.client.patch(f'/api/v1/users/{self.user_1.id}/quests', json=payload, content_type='application/json') self.assertEqual(201, response.status_code) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type(self, data, 'data', dict) all_user_quest_data = data['data'] assert_payload_field_type_value(self, all_user_quest_data, 'id', int, self.user_quest_1.id) assert_payload_field_type_value(self, all_user_quest_data, 'type', str, 'user_quests') assert_payload_field_type(self, all_user_quest_data, 'attributes', dict) attributes = all_user_quest_data['attributes'] assert_payload_field_type_value(self, attributes, 'response', str, 'successful') assert_payload_field_type_value(self, attributes, 'progress', int, int(payload['progress'])) assert_payload_field_type_value(self, attributes, 'completion_status', bool, False)
def test_401_error_no_auth_header(self): response = self.client.get('/auth-required', headers={}) self.assertEqual(response.status_code, 401) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'message', str, 'unauthorized') assert_payload_field_type_value(self, data, 'success', bool, False)
def test_happypath_get_empty_users(self): response = self.client.get(f'/api/v1/users') self.assertEqual(200, response.status_code) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'success', bool, True) assert_payload_field_type(self, data, 'results', list) # results list should be empty self.assertEqual(0, len(data['results']))
def test_endpoint_will_return_a(self): payload = {'email': '*****@*****.**'} response = self.client.post('/api/v1/users', json=payload, content_type='application/json') self.assertEqual(201, response.status_code) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'user_action', str, 'created')
def test_invalid_user_id(self): response = self.client.get('/users/9999') error_message = 'The requested URL was not found on the server. If you entered the URL manually please check your spelling and try again.' data = json.loads(response.data.decode('utf-8')) self.assertEqual(404, response.status_code) assert_payload_field_type_value(self, data, 'message', str, error_message)
def test_happypath_blank_name(self): payload = deepcopy(self.payload) payload['name'] = ' ' response = self.client.post( '/api/v1/reports', json=payload, content_type='application/json' ) self.assertEqual(201, response.status_code) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'success', bool, True) assert_payload_field_type_value(self, data, 'name', str, 'Anonymous')
def test_endpoint_sadpath_username_is_same_unique_email(self): user_1 = User(username='******', email='*****@*****.**', xp=0) user_1.insert() payload = {'username': '******', 'email': '*****@*****.**'} response = self.client.post('/api/v1/users', json=payload, content_type='application/json') data = json.loads(response.data.decode('utf-8')) self.assertEqual(201, response.status_code) assert_payload_field_type_value(self, data, 'user_action', str, 'created')
def test_happypath_get_empty_rooms(self): user_1 = User(name='Test User', email='email 1') user_1.insert() response = self.client.get( f'/api/v1/users/{user_1.id}/rooms' ) self.assertEqual(200, response.status_code) data = json.loads(response.data.decode('utf-8)')) assert_payload_field_type_value(self, data, 'success', bool, True) assert_payload_field_type(self, data, 'data', list) self.assertEqual(0, len(data['data']))
def test_sad_path_user_has_zero_contacts(self): user = User(email='*****@*****.**', first_name='example', last_name='fake') user.insert() response = self.client.get(f'/users/{user.id}/contacts') self.assertEqual(200, response.status_code) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'success', bool, True) assert_payload_field_type(self, data, 'contacts', list) self.assertEqual(0, len(data['contacts']))
def test_happypath_get_a_room(self): user_1 = User(name='Test User', email='email 1') user_1.insert() room_1 = Room(name='Kitchen', image='exampleimage1.com', user_id=user_1.id) room_1.insert() room_2 = Room(name='Living Room', image='exampleimage2.com', user_id=user_1.id) room_2.insert() response = self.client.get( f'/api/v1/rooms/{room_2.id}' ) self.assertEqual(200, response.status_code) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'success', bool, True) results = data['data'] assert_payload_field_type_value( self, results, 'name', str, room_2.name ) assert_payload_field_type_value( self, results, 'image', str, room_2.image ) assert_payload_field_type_value( self, results, 'user_id', int, user_1.id )
def test_happypath_get_empty_rooms(self): user_1 = User(name='Test User', email='email 1') user_1.insert() room_1 = Room(name='Kitchen', image='exampleimage1.com', user_id=user_1.id) room_1.insert() response = self.client.get(f'/api/v1/rooms/{room_1.id}/memories') self.assertEqual(200, response.status_code) data = json.loads(response.data.decode('utf-8)')) assert_payload_field_type_value(self, data, 'success', bool, True) assert_payload_field_type(self, data, 'data', list) self.assertEqual(0, len(data['data']))
def test_happypath_login_user(self): payload = deepcopy(self.payload) response = self.client.post( '/login', json=payload, content_type='application/json' ) self.assertEqual(200, response.status_code) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'success', bool, True) assert_payload_field_type_value(self, data, 'id', int, self.user_1.id) assert_payload_field_type_value(self, data, 'first_name', str, self.user_1.first_name) assert_payload_field_type_value(self, data, 'last_name', str, self.user_1.last_name) assert_payload_field_type_value(self, data, 'email', str, self.user_1.email)
def test_happypath_show_user(self): response = self.client.get(f'/users/{self.user_1.id}') self.assertEqual(200, response.status_code) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'success', bool, True) assert_payload_field_type_value(self, data, 'first_name', str, self.user_1.first_name) assert_payload_field_type_value(self, data, 'last_name', str, self.user_1.last_name) assert_payload_field_type_value(self, data, 'email', str, self.user_1.email)
def test_endpoint_sadpath_create_drink_missing_title( self, mock_get_token_auth_header, mock_verify_decode_jwt): mock_get_token_auth_header.return_value = 'manager-token' mock_verify_decode_jwt.return_value = { 'permissions': [ 'delete:drinks', 'get:drinks-detail', 'patch:drinks', 'post:drinks' ] } payload = self.payload del (payload['title']) response = self.client.post('/drinks', json=payload, content_type='application/json') self.assertEqual(400, response.status_code) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'success', bool, False) assert_payload_field_type_value(self, data, 'error', str, 'details missing') assert_payload_field_type_value( self, data, 'message', str, 'your drink content is missing required data')
def test_happypath_show_contacts(self): payload = deepcopy(self.contact_payload) response = self.client.get(f'/users/{self.user.id}/contacts') self.assertEqual(200, response.status_code) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'success', bool, True) assert_payload_field_type(self, data, 'contacts', list) self.assertEqual(3, len(data['contacts'])) contacts = data['contacts'] for contact in contacts: assert_payload_field_type(self, contact, 'first_name', str) assert_payload_field_type(self, contact, 'last_name', str) assert_payload_field_type(self, contact, 'group', str) assert_payload_field_type(self, contact, 'phone_number', str) assert_payload_field_type(self, contact, 'street_address', str) assert_payload_field_type(self, contact, 'city', str) assert_payload_field_type(self, contact, 'state', str) assert_payload_field_type(self, contact, 'zipcode', str)
def test_endpoint_drinks_happypath_with_drinks(self): response = self.client.get('/drinks-detail') self.assertEqual(401, response.status_code) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'error', int, 401) assert_payload_field_type_value(self, data, 'message', str, 'unauthorized') assert_payload_field_type_value(self, data, 'success', bool, False)
def test_sadpath_delete_bad_id_report(self): response = self.client.delete(f'/api/v1/reports/9999999') self.assertEqual(404, response.status_code) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'error', int, 404) assert_payload_field_type_value(self, data, 'success', bool, False) assert_payload_field_type_value(self, data, 'message', str, 'resource not found')
def test_endpoint_delete_drink_bad_id(self): response = self.client.delete(f'/drinks/{self.bad_drink_id}') self.assertEqual(401, response.status_code) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'error', int, 401) assert_payload_field_type_value(self, data, 'message', str, 'unauthorized') assert_payload_field_type_value(self, data, 'success', bool, False)
def test_happypath_update_user(self): payload = deepcopy(self.payload) response = self.client.patch(f'/users/{self.user.id}', json=payload, content_type='application/json') self.assertEqual(200, response.status_code) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'success', bool, True) assert_payload_field_type_value(self, data, 'first_name', str, self.payload['first_name']) assert_payload_field_type_value(self, data, 'last_name', str, self.payload['last_name']) assert_payload_field_type_value(self, data, 'email', str, self.payload['email'])
def test_404_error(self): response = self.client.get('/lkjasdkj') self.assertEqual(response.status_code, 404) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'message', str, 'resource not found') assert_payload_field_type_value(self, data, 'error', int, 404) assert_payload_field_type_value(self, data, 'success', bool, False)
def test_endpoint_badauth_change_drink(self): response = self.client.patch('/drinks/1', json=self.payload, content_type='application/json') self.assertEqual(401, response.status_code) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'error', int, 401) assert_payload_field_type_value(self, data, 'message', str, 'unauthorized') assert_payload_field_type_value(self, data, 'success', bool, False)
def test_sadpath_invalid_contact_id(self): contact_id = 99999 response = self.client.get(f'/users/{self.user.id}/contacts/{contact_id}') self.assertEqual(400, response.status_code) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'success', bool, False) assert_payload_field_type_value(self, data, 'error', int, 400) assert_payload_field_type_value(self, data, 'errors', list, [f"contact with id: '{contact_id}' not found"])
def test_cors(self): response = self.client.head('/') assert_payload_field_type_value(self, response.headers, 'Access-Control-Allow-Origin', str, '*') assert_payload_field_type_value(self, response.headers, 'Access-Control-Allow-Headers', str, 'Content-Type') assert_payload_field_type_value(self, response.headers, 'Access-Control-Allow-Methods', str, 'GET, PATCH, POST, DELETE, OPTIONS')
def test_endpoint_sadpath_bad_email_user(self): response = self.client.get( '/api/v1', content_type='application/json' ) self.assertEqual(404, response.status_code) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'error', int, 404) assert_payload_field_type_value(self, data, 'success', bool, False) assert_payload_field_type_value( self, data, 'message', str, 'resource not found' )
def test_sadpath_blank_name(self): payload = deepcopy(self.payload) payload['name'] = '' response = self.client.post('/api/v1/users', json=payload, content_type='application/json') self.assertEqual(400, response.status_code) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'success', bool, False) assert_payload_field_type_value(self, data, 'error', int, 400) assert_payload_field_type_value(self, data, 'errors', list, ["required 'name' parameter is blank"])
def test_mock_auth_required_bad_perm(self, mock_get_token_auth_header, mock_verify_decode_jwt): mock_get_token_auth_header.return_value = 'token-abc123' mock_verify_decode_jwt.return_value = {'permissions': ['get:drink']} response = self.client.get('/auth-required', headers={'Authorization': 'Bearer foo'}) self.assertEqual(403, response.status_code) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'message', str, 'forbidden') assert_payload_field_type_value(self, data, 'success', bool, False) assert_payload_field_type_value(self, data, 'error', int, 403)
def test_sadpath_email_is_missing(self): payload = deepcopy(self.payload) del payload['email'] response = self.client.post( '/login', json=payload, content_type='application/json' ) self.assertEqual(400, response.status_code) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'success', bool, False) assert_payload_field_type_value(self, data, 'error', int, 400) assert_payload_field_type_value(self, data, 'errors', list, ["required 'email' parameter is missing"])
def test_endpoint_delete_drink_bad_id(self, mock_get_token_auth_header, mock_verify_decode_jwt): mock_get_token_auth_header.return_value = 'barista-token' mock_verify_decode_jwt.return_value = { 'permissions': ['get:drinks-detail'] } response = self.client.delete(f'/drinks/{self.bad_drink_id}') self.assertEqual(403, response.status_code) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'error', int, 403) assert_payload_field_type_value(self, data, 'message', str, 'forbidden') assert_payload_field_type_value(self, data, 'success', bool, False)
def test_endpoint_badauth_change_drink( self, mock_get_token_auth_header, mock_verify_decode_jwt): mock_get_token_auth_header.return_value = 'barista-token' mock_verify_decode_jwt.return_value = { 'permissions': ['get:drinks-detail'] } response = self.client.patch('/drinks/1', json=self.payload, content_type='application/json') self.assertEqual(403, response.status_code) data = json.loads(response.data.decode('utf-8')) assert_payload_field_type_value(self, data, 'error', int, 403) assert_payload_field_type_value(self, data, 'message', str, 'forbidden') assert_payload_field_type_value(self, data, 'success', bool, False)