def test_get_item_include_pictures__success(self): data, errors = ItemSchema.jsonapi( self.item1, include_data=['pictures']) assert errors == {} expected_result = EXPECTED_ITEMS['get_item_include_pictures__success'] assert_valid_response(data, expected_result)
def test_put_address__success(self): addr_id = '943d754e-5826-4d5c-b878-47edc478b789' user = add_user('*****@*****.**', '123', id='943d754e-5826-4d5c-b878-47edc478b789') add_address(user, city="Firenze", post_code='50132', address="Via Rossi 10", id=addr_id) addr1 = new_addr(user, city="Roma", post_code="10000", address="Via Bianchi 20") addr1 = format_jsonapi_request('address', addr1) resp = open_with_auth(self.app, '/addresses/{}'.format(addr_id), 'PATCH', user.email, TEST_USER_PSW, data=json.dumps(addr1), content_type='application/json') assert resp.status_code == OK upd_addr = Address.get(Address.uuid == addr_id).json() expected_result = EXPECTED_RESULTS['put_address__success'] # Check that the response data is what is expected and is also # the same as what has ben actually saved assert_valid_response(resp.data, expected_result) assert expected_result == json.loads(upd_addr)
def test_get_orders__success(self): item = Item.create( uuid='429994bf-784e-47cc-a823-e0c394b823e8', name='mario', price=20.20, description='svariati mariii', availability=12, category='accessori', ) user = add_user(None, TEST_USER_PSW, id='f3f72634-7054-43ef-9119-9e8f54a9531e') addr = add_address(user=user, id='85c6cba6-3ddd-4847-9d07-1337ff4e8506') Order.create(delivery_address=addr, user=user, uuid='06451e0a-8fa2-40d2-8c51-1af50d369ca6').add_item( item, 2) Order.create(delivery_address=addr, user=user, uuid='429994bf-784e-47cc-a823-e0c394b823e8').add_item( item, 5) resp = self.app.get('/orders/') expected_result = EXPECTED_RESULTS['get_orders__success'] assert resp.status_code == OK assert_valid_response(resp.data, expected_result)
def test_address_json_include_user__success(self): data, errors = AddressSchema.jsonapi(self.addr, include_data=['user']) assert errors == {} assert type(data) is str expected_result = EXPECTED_ADDRESSES['get_address_json_include_user__success'] assert_valid_response(data, expected_result)
def test_user_json__success(self): parsed_user, errors = UserSchema.jsonapi(self.user2) expected_result = EXPECTED_USERS['user_json__success'] assert type(parsed_user) is str assert_valid_response(parsed_user, expected_result) assert errors == {}
def test_get_items__success(self): Item.create(**TEST_ITEM) Item.create(**TEST_ITEM2) resp = self.app.get('/items/') assert resp.status_code == client.OK assert_valid_response(resp.data, EXPECTED_RESULTS['get_items__success'])
def test_get_addresses_list__success(self): add_address( self.user, id='4373d5d7-cae5-42bc-b218-d6fc6d18626f') addr_list = [a for a in Address.select()] data = AddressSchema.jsonapi_list(addr_list) expected_result = EXPECTED_ADDRESSES['get_addresses_list__success'] assert_valid_response(data, expected_result)
def test_get_favorites__success(self): user = add_user(USER1, PASS1) item = add_item() add_favorite(user, item) resp = open_with_auth(self.app, API_ENDPOINT.format('favorites/'), 'GET', user.email, PASS1, None, None) assert resp.status_code == OK expected_result = EXPECTED_RESULTS['get_favorites__success'] assert_valid_response(resp.data, expected_result)
def test_create_order__success(self): Item.create( uuid='429994bf-784e-47cc-a823-e0c394b823e8', name='mario', price=20.20, description='svariati mariii', availability=4, category='scarpe', ) Item.create( uuid='577ad826-a79d-41e9-a5b2-7955bcf03499', name='GINO', price=30.20, description='svariati GINIIIII', availability=10, category='accessori', ) user = add_user('*****@*****.**', TEST_USER_PSW, id='e736a9a6-448b-4b92-9e38-4cf745b066db') add_address(user=user, id='8473fbaa-94f0-46db-939f-faae898f001c') order = { 'relationships': { 'items': [{ 'id': '429994bf-784e-47cc-a823-e0c394b823e8', 'type': 'item', 'quantity': 4 }, { 'id': '577ad826-a79d-41e9-a5b2-7955bcf03499', 'type': 'item', 'quantity': 10 }], 'delivery_address': { 'type': 'address', 'id': '8473fbaa-94f0-46db-939f-faae898f001c' }, 'user': { 'type': 'user', 'id': 'e736a9a6-448b-4b92-9e38-4cf745b066db' } } } data = format_jsonapi_request('order', order) path = 'orders/' resp = open_with_auth(self.app, API_ENDPOINT.format(path), 'POST', user.email, TEST_USER_PSW, 'application/json', json.dumps(data)) assert resp.status_code == CREATED assert len(Order.select()) == 1 assert len(OrderItem.select()) == 2 order = Order.get() expected_result = EXPECTED_RESULTS['create_order__success'] assert_valid_response(resp.data, expected_result)
def test_update_order__success_admin_not_own_order(self): item1 = Item.create( uuid='429994bf-784e-47cc-a823-e0c394b823e8', name='mario', price=20.20, description='svariati mariii', availability=5, category='scarpe', ) item2 = Item.create( uuid='577ad826-a79d-41e9-a5b2-7955bcf03499', name='GINO', price=30.20, description='svariati GINIIIII', availability=2, category='accessori', ) user = add_user('*****@*****.**', TEST_USER_PSW, id='35b9d92a-83c4-48c6-bc2a-580d95951f99') addr_A = add_address(user=user, id='7f7bc402-469c-4f7b-8918-d4e150469ac7') order1 = Order.create( delivery_address=addr_A, user=user, uuid='54a2b917-6c21-42b5-b273-39ad6c765187').add_item( item1, 2).add_item(item2) order = { 'relationships': { 'items': [{ 'id': '429994bf-784e-47cc-a823-e0c394b823e8', 'type': 'item', 'quantity': 5 }, { 'id': '577ad826-a79d-41e9-a5b2-7955bcf03499', 'type': 'item', 'quantity': 1 }], } } data = format_jsonapi_request('order', order) user_B = add_admin_user('*****@*****.**', TEST_USER_PSW) path = 'orders/{}'.format(order1.uuid) resp = open_with_auth(self.app, API_ENDPOINT.format(path), 'PATCH', user_B.email, TEST_USER_PSW, 'application/json', json.dumps(data)) assert resp.status_code == OK expected_result = EXPECTED_RESULTS[ 'update_order__success_admin_not_owner'] assert_valid_response(resp.data, expected_result)
def test_address_validate_input__fail(self): data = copy.deepcopy(self.data) data['country'] = '' del data['relationships']['user'] post_data = format_jsonapi_request('address', data) errors = AddressSchema.validate_input(post_data) expected_result = EXPECTED_ADDRESSES['address_validate_input__fail'] assert_valid_response(errors, expected_result)
def test_post_item__success(self): data = format_jsonapi_request('item', TEST_ITEM) resp = self.app.post('/items/', data=json.dumps(data), content_type='application/json') assert resp.status_code == client.CREATED assert len(Item.select()) == 1 expected_result = EXPECTED_RESULTS['post_item__success'] assert_valid_response(resp.data, expected_result)
def test_get_item_pictures__success(self): item = Item.create(**TEST_ITEM) Picture.create(item=item, **TEST_PICTURE) Picture.create(item=item, **TEST_PICTURE2) resp = self.app.get( '/items/{item_uuid}/pictures/'.format(item_uuid=item.uuid)) assert resp.status_code == client.OK test_utils.assert_valid_response( resp.data, EXPECTED_RESULTS['get_item_pictures__success'])
def test_post_item_missing_field__fail(self): item = TEST_ITEM.copy() del item['price'] data = format_jsonapi_request('item', item) resp = self.app.post('/items/', data=json.dumps(data), content_type='application/json') assert resp.status_code == client.BAD_REQUEST expected_result = EXPECTED_RESULTS['post_item_missing_field__fail'] assert_valid_response(resp.data, expected_result)
def test_update_order__remove_item_without_delete(self): item1 = Item.create( uuid='429994bf-784e-47cc-a823-e0c394b823e8', name='mario', price=20.20, description='svariati mariii', availability=10, category='scarpe', ) item2 = Item.create( uuid='577ad826-a79d-41e9-a5b2-7955bcf03499', name='GINO', price=30.20, description='svariati GINIIIII', availability=20, category='accessori', ) user = add_user('*****@*****.**', TEST_USER_PSW) addr = add_address(user=user, id='86ba7e70-b3c0-4c9c-8d26-a14f49360e47') add_address(user=user, id='429994bf-784e-47cc-a823-e0c394b823e8') order = Order.create( delivery_address=addr, user=user, ).add_item(item1, 10).add_item(item2, 20) post_data = { "relationships": { 'items': [{ 'id': '429994bf-784e-47cc-a823-e0c394b823e8', 'type': 'item', 'quantity': 0, }], 'delivery_address': { 'type': 'address', 'id': '429994bf-784e-47cc-a823-e0c394b823e8', } } } post_data = format_jsonapi_request('order', post_data) path = 'orders/{}'.format(order.uuid) resp = open_with_auth(self.app, API_ENDPOINT.format(path), 'PATCH', user.email, TEST_USER_PSW, 'application/json', json.dumps(post_data)) assert resp.status_code == OK expected_result = EXPECTED_RESULTS[ 'update_order__remove_item_without_delete'] assert_valid_response(resp.data, expected_result) assert len(order.order_items) == 1 assert order.order_items[0].quantity == 20
def test_user_validate_input__fail(self): wrong_user_data = USER_TEST_DICT.copy() del wrong_user_data['password'] # missing field validation wrong_user_data['last_name'] = '' # empty field validation wrong_user_data['email'] = 'email.is.not' # email validation post_data = format_jsonapi_request('user', wrong_user_data) errors = UserSchema.validate_input(post_data) expected_result = EXPECTED_USERS['user_validate_input__fail'] assert_valid_response(errors, expected_result)
def test_get_order__success(self): user = add_user(None, TEST_USER_PSW, id='f79d9cd9-d5a3-4285-b6c0-54e0a8497b2a') addr_A = add_address(user=user, id='fe17b62d-9e02-4889-862f-5b3323e689f5') addr_B = add_address(user=user, city='Firenze', post_code='50132', address='Via Rossi 10', phone='055432433', id='03e071e4-e89e-46a3-8dfd-3da1bd52c02f') item1 = Item.create( uuid='429994bf-784e-47cc-a823-e0c394b823e8', name='mario', price=20.20, description='svariati mariii', availability=3, category='scarpe', ) item2 = Item.create( uuid='577ad826-a79d-41e9-a5b2-7955bcf03499', name='GINO', price=30.20, description='svariati GINIIIII', availability=30, category='accessori', ) order1 = Order.create( delivery_address=addr_A, user=user, uuid='b975ed38-f426-4965-8633-85a48442aaa5', ).add_item(item1, 2) order2 = Order.create( delivery_address=addr_B, user=user, uuid='c121e159-1d88-49b0-a36c-b2169ac69474', ).add_item(item1).add_item(item2, 2) resp = self.app.get('/orders/{}'.format(order1.uuid)) expected_result = EXPECTED_RESULTS['get_order__success'] assert resp.status_code == OK assert_valid_response(resp.data, expected_result) resp2 = self.app.get('/orders/{}'.format(order2.uuid)) expected_result2 = EXPECTED_RESULTS['get_order__success_2'] assert resp.status_code == OK assert json.loads(resp2.data) == expected_result2
def test_get_users_list__success(self): user = add_admin_user('*****@*****.**', TEST_USER_PSW) add_user('*****@*****.**', TEST_USER_PSW, id='4373d5d7-cae5-42bc-b218-d6fc6d18626f') add_user('*****@*****.**', TEST_USER_PSW, id='9630b105-ca99-4a27-a51d-ab3430bf52d1') resp = open_with_auth(self.app, API_ENDPOINT.format('users/'), 'GET', user.email, TEST_USER_PSW, None, None) assert resp.status_code == OK expected_result = EXPECTED_RESULTS['get_users_list__success'] assert_valid_response(resp.data, expected_result)
def test_patch_change1item__success(self): item = Item.create(**TEST_ITEM) post_data = format_jsonapi_request('item', {'name': 'new-name'}) resp = self.app.patch('/items/{item_uuid}'.format(item_uuid=item.uuid), data=json.dumps(post_data), content_type='application/json') assert resp.status_code == client.OK expected_result = EXPECTED_RESULTS['patch_change1item__success'] assert_valid_response(resp.data, expected_result) assert Item.get().name == 'new-name'
def test_item_validate_input__fail(self): data = { 'name': '', # not empty 'price': -2, # more than 0 'availability': -2, # more than 0 'description': '', # not empty 'category': '', # not empty } post_data = format_jsonapi_request('item', data) errors = ItemSchema.validate_input(post_data) expected_result = EXPECTED_ITEMS['item_validate_input__fail'] assert_valid_response(errors, expected_result)
def test_post_item__round_price(self): data = format_jsonapi_request('item', TEST_ITEM_PRECISION) resp = self.app.post('/items/', data=json.dumps(data), content_type='application/json') assert resp.status_code == client.CREATED expected_result = EXPECTED_RESULTS['post_item__round_price'] assert_valid_response(resp.data, expected_result) item = Item.select()[0] assert round(TEST_ITEM_PRECISION['price'], 5) == float(item.price) assert not TEST_ITEM_PRECISION['price'] == item.price assert TEST_ITEM_PRECISION['availability'] == item.availability
def test_order_json__success(self): order = Order.create( delivery_address=self.addr, user=self.user, uuid='451b3bba-fe4d-470d-bf48-cb306c939bc6', created_at=datetime(2017, 5, 1, 9, 4, 47) ).add_item(self.item1, 2).add_item(self.item2, 5) parsed, _ = OrderSchema.jsonapi( order, include_data=['items', 'user', 'delivery_address']) assert type(parsed) == str expected_result = EXPECTED_ORDERS['order_json__success'] assert_valid_response(parsed, expected_result)
def test_get_address(self): user = add_user('*****@*****.**', '123', id='74df5166-db94-4738-8209-69aa733e36d1') addr = add_address(user, city='Firenze', post_code='50132', address='Via Rossi 10', id='4dbf5f2b-e164-4967-9a82-022996a17cc9') resp = open_with_auth(self.app, '/addresses/{}'.format(addr.uuid), 'GET', user.email, TEST_USER_PSW, None, None) assert resp.status_code == OK assert_valid_response(resp.data, EXPECTED_RESULTS['get_address'])
def test_get_usersme__success(self): email = '*****@*****.**' user = add_user(email, TEST_USER_PSW) resp = open_with_auth(self.app, API_ENDPOINT.format('users/me/'), 'GET', user.email, TEST_USER_PSW, None, None) assert resp.status_code == OK expected_result = EXPECTED_RESULTS['get_usersme__success'] assert_valid_response(resp.data, expected_result) assert User.select().count() == 1 assert User.get().admin is False assert User.get().email == email
def test_create_address__success(self): user = add_user('*****@*****.**', '123', id='1777e816-3051-4faf-bbba-0c8a87baf08f') addr = format_jsonapi_request('address', new_addr(user)) resp = open_with_auth(self.app, '/addresses/', 'POST', user.email, TEST_USER_PSW, 'application/json', json.dumps(addr)) assert resp.status_code == CREATED assert len(Address.select()) == 1 expected_result = EXPECTED_RESULTS['create_address__success'] assert_valid_response(resp.data, expected_result)
def test_create_address__failure_missing_field(self): user = add_user('*****@*****.**', '123') addr = new_addr(user) del addr['country'] addr = format_jsonapi_request('address', addr) resp = open_with_auth(self.app, '/addresses/', 'POST', user.email, TEST_USER_PSW, 'application/json', json.dumps(addr)) assert resp.status_code == BAD_REQUEST assert len(Address.select()) == 0 expected_result = EXPECTED_RESULTS[ 'create_address__failure_missing_field'] assert_valid_response(resp.data, expected_result)
def test_update_order__new_item(self): item1 = Item.create( uuid='429994bf-784e-47cc-a823-e0c394b823e8', name='mario', price=20.20, description='svariati mariii', availability=15, category='scarpe', ) Item.create( uuid='577ad826-a79d-41e9-a5b2-7955bcf03499', name='GINO', price=30.20, description='svariati GINIIIII', availability=15, category='accessori', ) user = add_user('*****@*****.**', TEST_USER_PSW) addr = add_address(user=user, id='429994bf-784e-47cc-a823-e0c394b823e8') order1 = Order.create(delivery_address=addr, user=user).add_item(item1, 2) order = { "relationships": { 'items': [{ 'id': '429994bf-784e-47cc-a823-e0c394b823e8', 'type': 'item', 'quantity': 5, }, { 'id': '577ad826-a79d-41e9-a5b2-7955bcf03499', 'type': 'item', 'quantity': 10, }] } } post_data = format_jsonapi_request('order', order) path = 'orders/{}'.format(order1.uuid) resp = open_with_auth(self.app, API_ENDPOINT.format(path), 'PATCH', '*****@*****.**', TEST_USER_PSW, 'application/json', json.dumps(post_data)) order = Order.get() expected_result = EXPECTED_RESULTS['update_order__new_item'] assert_valid_response(resp.data, expected_result)
def test_create_order__failure_missing_field(self): Item.create( uuid='429994bf-784e-47cc-a823-e0c394b823e8', name='mario', price=20.20, description='svariati mariii', availability=4, category='scarpe', ) Item.create( uuid='577ad826-a79d-41e9-a5b2-7955bcf03499', name='GINO', price=30.20, description='svariati GINIIIII', availability=10, category='accessori', ) user = add_user('*****@*****.**', TEST_USER_PSW) order = { 'relationships': { 'items': [{ 'id': '429994bf-784e-47cc-a823-e0c394b823e8', 'type': 'item', 'quantity': 4 }, { 'id': '577ad826-a79d-41e9-a5b2-7955bcf03499', 'type': 'item', 'quantity': 10 }], 'user': { 'type': 'user', 'id': 'e736a9a6-448b-4b92-9e38-4cf745b066db' } } } data = format_jsonapi_request('order', order) path = 'orders/' resp = open_with_auth(self.app, API_ENDPOINT.format(path), 'POST', user.email, TEST_USER_PSW, 'application/json', json.dumps(data)) assert resp.status_code == BAD_REQUEST expected_result = EXPECTED_RESULTS[ 'create_order__failure_missing_field'] assert_valid_response(resp.data, expected_result) assert len(Order.select()) == 0
def test_order_validate_fields__fail(self): order = { 'relationships': { 'items': [ # Items relationship should not be empty ], # Missing delivery_address relationship # Missing user relationship } } post_data = format_jsonapi_request('order', order) errors = OrderSchema.validate_input(post_data) expected_result = EXPECTED_ORDERS['order_validate_fields__fail'] assert_valid_response(errors, expected_result)
def test_post_favorites__fail(self): user = add_user(USER1, PASS1) data = { "data": { "type": "favorite", "attributes": { "item_uuid": "2aabf825-40b3-03d5-e686-9eaebd156c0e" } } } resp = open_with_auth(self.app, API_ENDPOINT.format('favorites/'), 'POST', user.email, PASS1, 'application/json', json.dumps(data)) assert resp.status_code == NOT_FOUND assert Favorite.select().count() == 0 expected_result = EXPECTED_RESULTS['post_favorites__fail'] assert_valid_response(resp.data, expected_result)