def setUp(self): self.app = create_app('testing') self.app_context = self.app.app_context() self.app_context.push() db.create_all() self.client = self.app.test_client() self.user = User(email='*****@*****.**', first_name='joshua', last_name='carey') self.user.insert() self.contact_payload = { 'first_name': 'darrel', 'last_name': 'wadsworth', 'group': 'friend', 'phone_number': '999-999-9999', 'street_address': '45321 example way', 'city': 'Denver', 'state': 'Colorado', 'zipcode': '80000' } self.contact = Contact(self.user, self.contact_payload) self.contact.insert()
class DeleteUserTest(unittest.TestCase): def setUp(self): self.app = create_app('testing') self.app_context = self.app.app_context() self.app_context.push() db.create_all() self.client = self.app.test_client() self.user_1 = User(username='******', email='e1') self.user_1.insert() def tearDown(self): db.session.remove() db_drop_everything(db) self.app_context.pop() def test_happypath_delete_a_user(self): response = self.client.delete(f'/api/v1/users/{self.user_1.id}') self.assertEqual(204, response.status_code) self.assertEqual('', response.data.decode('utf-8')) # ensure it's really gone by getting a 404 if we try to fetch it again response = self.client.get(f'/api/v1/users/{self.user_1.id}') self.assertEqual(404, response.status_code) def test_sadpath_delete_bad_id_user(self): response = self.client.delete(f'/api/v1/users/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 setUp(self): self.app = create_app('testing') self.app_context = self.app.app_context() self.app_context.push() db.create_all() self.client = self.app.test_client() self.user = User(email='*****@*****.**', first_name='joshua', last_name='carey') self.user.insert() self.contact_payload = { 'first_name': 'darrel', 'last_name': 'wadsworth', 'group': 'friend', 'phone_number': '999-999-9999', 'street_address': '45321 example way', 'city': 'Denver', 'state': 'Colorado', 'zipcode': '80000' } # creates three contacts (all attributes differentiated by '_i') for user # TODO: good use case for factory bot for i in range(3): payload = deepcopy(self.contact_payload) for key, value in payload.items(): payload[key] = value + f'_{i}' Contact(self.user, payload)
def setUp(self): self.app = create_app('testing') self.app_context = self.app.app_context() self.app_context.push() db.create_all() self.client = self.app.test_client() self.user_1 = User(name='Test User', email='email 2') self.user_1.insert() self.room_1 = Room(name='Kitchen', image='exampleimage1.com', user_id=self.user_1.id) self.room_1.insert() self.memory_1 = Memory(image='Picture string', song='song url', description='This is a great memory', aromas='Roast in the oven', x=123, y=456, room_id=self.room_1.id) self.memory_1.insert() self.payload = { 'image': 'new_image', 'description': 'new_description', 'x': 200, 'y': 500 }
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 )
class DeleteUserTest(unittest.TestCase): def setUp(self): self.app = create_app('testing') self.app_context = self.app.app_context() self.app_context.push() db.create_all() self.client = self.app.test_client() self.user = User(email='*****@*****.**', first_name='joshua', last_name='carey') self.user.insert() def tearDown(self): db.session.remove() db.drop_all() self.app_context.pop() def test_happypath_user_delete(self): user = self.user response = self.client.delete(f'/users/{self.user.id}') self.assertEqual(204, response.status_code) response = self.client.get(f'/users/{user.id}') self.assertEqual(404, response.status_code) def test_sadpath_user_delete_invalid_id(self): response = self.client.delete(f'/users/9999') self.assertEqual(404, response.status_code)
def test_user_model(self): user = User(name='ian', email='*****@*****.**') user.insert() self.assertIsInstance(user, User) self.assertIsNotNone(user.id) self.assertEqual('ian', user.name) self.assertEqual('*****@*****.**', user.email)
def test_user_model_blank_email(self): try: user = User(name='ian', email='') user.insert() except IntegrityError: self.assertTrue(True) else: # we should not end up in here self.assertTrue(False) # pragma: no cover
def test_user_model_missing_name(self): try: user = User(name=None, email='*****@*****.**') user.insert() except IntegrityError: self.assertTrue(True) else: # we should not end up in here self.assertTrue(False) # pragma: no cover
def setUp(self): self.app = create_app('testing') self.app_context = self.app.app_context() self.app_context.push() db.create_all() self.client = self.app.test_client() self.user_1 = User(username='******', email='e1') self.user_1.insert()
def setUp(self): self.app = create_app('testing') self.app_context = self.app.app_context() self.app_context.push() db.create_all() self.client = self.app.test_client() self.user = User(email='*****@*****.**', first_name='joshua', last_name='carey') self.user.insert()
def test_user_model_with_forced_id(self): user = User(username='******', email='*****@*****.**', user_id=1) user.insert() self.assertIsInstance(user, User) self.assertIsNotNone(user.id) self.assertEqual(1, user.id) self.assertEqual('ian', user.username) self.assertEqual('*****@*****.**', user.email)
def test_user_model(self): user = User(name='ian', email='*****@*****.**') user.insert() room = Room(name='Kitchen', image='exampleimage1.com', user_id=user.id) room.insert() self.assertIsInstance(room, Room) self.assertIsNotNone(room.id) self.assertEqual('Kitchen', room.name) self.assertEqual('exampleimage1.com', room.image) self.assertEqual(user.id, room.user_id)
def test_user_model_trims_space(self): user = User( email=' [email protected] ', first_name=' joshua ', last_name=' carey ', ) user.insert() self.assertEqual('joshua', user.first_name) self.assertEqual('carey', user.last_name) self.assertEqual('*****@*****.**', user.email)
def test_user_model(self): user = User( email='*****@*****.**', first_name='joshua', last_name='carey', ) user.insert() self.assertIsInstance(user, User) self.assertIsNotNone(user.id) self.assertEqual('joshua', user.first_name) self.assertEqual('carey', user.last_name) self.assertEqual('*****@*****.**', user.email)
def setUp(self): self.app = create_app('testing') self.app_context = self.app.app_context() self.app_context.push() db.create_all() self.client = self.app.test_client() self.user_1 = User(email="jpwizard", first_name="james", last_name="potter") self.user_1.insert() self.payload = { 'email': 'jpwizard' }
def test_user_model_missing_email(self): try: user = User( email=None, first_name='joshua', last_name='carey', ) user.insert() except IntegrityError: self.assertTrue(True) else: # should not end here self.assertTrue(False)
def test_user_model_blank_last_name(self): try: user = User( email='*****@*****.**', first_name='joshua', last_name='', ) user.insert() except IntegrityError: self.assertTrue(True) else: # should not end here self.assertTrue(False)
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']))
class CreatememoryTest(unittest.TestCase): def setUp(self): self.app = create_app('testing') self.app_context = self.app.app_context() self.app_context.push() db.create_all() self.client = self.app.test_client() self.user_1 = User(name='Test User 2', email='email 3') self.user_1.insert() self.room_1 = Room(name='Kitchen', image='exampleimage1.com', user_id=self.user_1.id) self.room_1.insert() self.payload = { 'image': 'new_image', 'song': 'new_song', 'description': 'This is a new description', 'aromas': 'new_aroma', 'x': 500, 'y': 600 } def tearDown(self): db.session.remove() db_drop_everything(db) self.app_context.pop() def test_happypath_create_memory(self): payload = deepcopy(self.payload) response = self.client.post(f'/api/v1/rooms/{self.room_1.id}/memories', 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(self, data, 'id', int) memory_id = data['id'] assert_payload_field_type_value(self, data, 'image', str, payload['image'].strip()) assert_payload_field_type_value(self, data, 'song', str, payload['song'].strip()) assert_payload_field_type_value(self, data, 'description', str, payload['description'].strip()) assert_payload_field_type_value(self, data, 'aromas', str, payload['aromas'].strip()) assert_payload_field_type_value(self, data, 'x', int, payload['x']) assert_payload_field_type_value(self, data, 'y', int, payload['y'])
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']))
class GetUserTest(unittest.TestCase): def setUp(self): self.app = create_app('testing') self.app_context = self.app.app_context() self.app_context.push() db.create_all() self.client = self.app.test_client() self.user_1 = User(username='******', email='e1') self.user_1.insert() def tearDown(self): db.session.remove() db_drop_everything(db) self.app_context.pop() def test_happypath_get_a_user(self): response = self.client.get(f'/api/v1/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, 'username', str, self.user_1.username) assert_payload_field_type_value(self, data, 'email', str, self.user_1.email) user_id = data['id'] assert_payload_field_type(self, data, 'links', dict) links = data['links'] assert_payload_field_type_value(self, links, 'get', str, f'/api/v1/users/{user_id}') assert_payload_field_type_value(self, links, 'patch', str, f'/api/v1/users/{user_id}') assert_payload_field_type_value(self, links, 'delete', str, f'/api/v1/users/{user_id}') assert_payload_field_type_value(self, links, 'index', str, '/api/v1/users') def test_endpoint_sadpath_bad_id_user(self): response = self.client.get(f'/api/v1/users/9999') 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 setUp(self): self.app = create_app('testing') self.app_context = self.app.app_context() self.app_context.push() db.create_all() self.client = self.app.test_client() self.user_1 = User(username='******', email='e1') self.user_1.insert() # adding extra padding in here to ensure we strip() it off later self.payload = { 'username': '******', 'email': ' new_email ', }
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 setUp(self): self.app = create_app('testing') self.app_context = self.app.app_context() self.app_context.push() db.create_all() self.client = self.app.test_client() self.user_1 = User(email="jpwizard", first_name="james", last_name="potter") self.user_1.insert() self.user_2 = User(email="*****@*****.**", first_name="hiawatha", last_name="francisco") self.user_2.insert()
class ShowUserTest(unittest.TestCase): def setUp(self): self.app = create_app('testing') self.app_context = self.app.app_context() self.app_context.push() db.create_all() self.client = self.app.test_client() self.user_1 = User(email="jpwizard", first_name="james", last_name="potter") self.user_1.insert() self.user_2 = User(email="*****@*****.**", first_name="hiawatha", last_name="francisco") self.user_2.insert() def tearDown(self): db.session.remove() db.drop_all() self.app_context.pop() 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_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 setUp(self): self.app = create_app('testing') self.app_context = self.app.app_context() self.app_context.push() db.create_all() self.client = self.app.test_client() self.user = User(email='*****@*****.**', first_name='joshua', last_name='carey') self.user.insert() self.payload = { 'first_name': 'jonathan', 'last_name': 'bridges', 'email': '*****@*****.**' }
class DeletememoryTest(unittest.TestCase): def setUp(self): self.app = create_app('testing') self.app_context = self.app.app_context() self.app_context.push() db.create_all() self.client = self.app.test_client() self.user_1 = User(name='Test User', email='email 2') self.user_1.insert() self.room_1 = Room(name='Kitchen', image='exampleimage1.com', user_id=self.user_1.id) self.room_1.insert() self.memory_1 = Memory(image='Picture string', song='song url', description='This is a great memory', aromas='Roast in the oven', x=123, y=456, room_id=self.room_1.id) self.memory_1.insert() def tearDown(self): db.session.remove() db_drop_everything(db) self.app_context.pop() def test_happypath_delete_a_memory(self): response = self.client.delete(f'/api/v1/memories/{self.memory_1.id}') self.assertEqual(204, response.status_code) self.assertEqual('', response.data.decode('utf-8')) # ensure it's really gone by getting a 404 if we try to fetch it again response = self.client.get(f'/api/v1/memories/{self.memory_1.id}') self.assertEqual(404, response.status_code) def test_sadpath_delete_bad_id_memory(self): response = self.client.delete(f'/api/v1/memories/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_sadpath_email_not_unique(self): payload = deepcopy(self.payload) user = User(email=payload['email'], first_name=payload['first_name'], last_name=payload['last_name']) user.insert() response = self.client.post('/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, ["email is already taken"])
def test_user_model_unique_email(self): user = User(name='ian', email='*****@*****.**') user.insert() try: user = User(name='ian2', email='*****@*****.**') user.insert() except IntegrityError: self.assertTrue(True) else: # we should not end up in here self.assertTrue(False) # pragma: no cover