def proxy_command_request(_base_url): """ Helper function to proxy POST, PUT and DELETE requests to the according service. :param _base_url: The URL of the service. """ # handle POST if request.method == 'POST': try: values = json.loads(request.data) except Exception: raise ValueError("cannot parse json body {}".format(request.data)) rsp = requests.post(_base_url.format(request.full_path), json=values) return check_rsp_code(rsp) # handle PUT if request.method == 'PUT': try: values = json.loads(request.data) except Exception: raise ValueError("cannot parse json body {}".format(request.data)) rsp = requests.put(_base_url.format(request.full_path), json=values) return check_rsp_code(rsp) # handle DELETE if request.method == 'DELETE': rsp = requests.delete(_base_url.format(request.full_path)) return check_rsp_code(rsp)
def post(): values = request.get_json() if not isinstance(values, list): values = [values] rsp = requests.post('http://inventory-service:5000/decr_from_order', json=values) check_rsp_code(rsp) if not rsp.json(): raise ValueError("out of stock") order_ids = [] for value in values: try: new_order = create_order(value['product_ids'], value['customer_id']) except KeyError: raise ValueError( "missing mandatory parameter 'product_ids' and/or 'customer_id'" ) # trigger event store.publish('order', 'created', **new_order) order_ids.append(new_order['id']) return json.dumps(order_ids)
def test_Z_print_report(): # load customers rsp = requests.get('{}/report'.format(BASE_URL)) check_rsp_code(rsp) report = rsp.json() # print result pprint.pprint(report)
def test_9_get_unbilled_orders(): # load unbilled orders rsp = requests.get('{}/orders/unbilled'.format(BASE_URL)) check_rsp_code(rsp) unbilled = rsp.json() # check result assert len(unbilled) == 8
def test_2_create_products(): # create propducts products = OrderShopTestCase.create_products(10) rsp = requests.post('{}/products'.format(BASE_URL), json=products) check_rsp_code(rsp) # check result rsp = requests.get('{}/products'.format(BASE_URL)) check_rsp_code(rsp) assert len(products) == len(rsp.json())
def test_1_create_customers(): # create customers customers = OrderShopTestCase.create_customers(10) rsp = requests.post('{}/customers'.format(BASE_URL), json=customers) check_rsp_code(rsp) # check result rsp = requests.get('{}/customers'.format(BASE_URL)) check_rsp_code(rsp) assert len(customers) == len(rsp.json())
def order_query(order_id=None): # handle additional query 'unbilled orders' if request.path.endswith('/orders/unbilled'): rsp = requests.get('http://order-service:5000/orders/unbilled') check_rsp_code(rsp) return rsp.text elif order_id: result = store.find_one('order', order_id) else: result = store.find_all('order') return json.dumps(result)
def order_query(order_id=None): if order_id: order = store.find_one('order', order_id) return json.dumps(order) if order else json.dumps(False) elif request.path.endswith('/orders/unbilled'): rsp = requests.get('http://order-service:5000/orders/unbilled') check_rsp_code(rsp) return rsp.text else: orders = store.find_all('order').values() return json.dumps(list(orders))
def delete(order_id): order = store.find_one('order', order_id) if order: for product_id in order['product_ids']: rsp = requests.post('http://inventory-service:5000/incr/{}'.format(product_id)) check_rsp_code(rsp) # trigger event store.publish(Event('order', 'deleted', **order)) return json.dumps(True) else: raise ValueError("could not find order")
def test_5_update_second_order(): # load orders rsp = requests.get('{}/orders'.format(BASE_URL)) check_rsp_code(rsp) orders = rsp.json() # load products rsp = requests.get('{}/products'.format(BASE_URL)) check_rsp_code(rsp) products = rsp.json() # update second order orders[1]['product_ids'][0] = OrderShopTestCase.get_any_product_id( products, orders[1]['product_ids'][0]) rsp = requests.put('{}/order/{}'.format(BASE_URL, orders[1]['id']), json=orders[1]) check_rsp_code(rsp) # check result rsp = requests.get('{}/order/{}'.format(BASE_URL, orders[1]['id'])) check_rsp_code(rsp) order = rsp.json() assert order['product_ids'][0] assert orders[1]['product_ids'][0] == order['product_ids'][0]
def test_8_perform_billing(): # load orders rsp = requests.get('{}/orders'.format(BASE_URL)) check_rsp_code(rsp) orders = rsp.json() # perform billing rsp = requests.post('{}/billing'.format(BASE_URL), json={"order_id": orders[0]['id']}) check_rsp_code(rsp) # check result assert len(rsp.json())
def put(order_id): order = store.find_one('order', order_id) for product_id in order['product_ids']: rsp = requests.post( 'http://inventory-service:5000/incr/{}'.format(product_id)) check_rsp_code(rsp) value = request.get_json() try: order = create_order(value['product_ids'], value['customer_id']) except KeyError: raise ValueError( "missing mandatory parameter 'product_ids' and/or 'customer_id'") rsp = requests.post('http://inventory-service:5000/decr_from_order', json=value) check_rsp_code(rsp) if not rsp.json(): raise ValueError("out of stock") order['id'] = order_id # trigger event store.publish('order', 'updated', **order) for product_id in value['product_ids']: rsp = requests.post( 'http://inventory-service:5000/decr/{}'.format(product_id)) check_rsp_code(rsp) return json.dumps(True)
def test_6_delete_third_order(): # load orders rsp = requests.get('{}/orders'.format(BASE_URL)) check_rsp_code(rsp) orders = rsp.json() # delete third order rsp = requests.delete('{}/order/{}'.format(BASE_URL, orders[2]['id'])) check_rsp_code(rsp) # check result rsp = requests.get('{}/order/{}'.format(BASE_URL, orders[2]['id'])) check_rsp_code(rsp) assert rsp.json() is False
def test_4_create_orders(): # load customers rsp = requests.get('{}/customers'.format(BASE_URL)) check_rsp_code(rsp) customers = rsp.json() # load products rsp = requests.get('{}/products'.format(BASE_URL)) check_rsp_code(rsp) products = rsp.json() # create orders orders = OrderShopTestCase.create_orders(10, customers, products) ordered = 0 for order in orders: rsp = requests.post('{}/orders'.format(BASE_URL), json=order) check_rsp_code(rsp) ordered += 1 # check result rsp = requests.get('{}/orders'.format(BASE_URL)) check_rsp_code(rsp) assert ordered == len(rsp.json())
def test_3_create_inventory(): # load products rsp = requests.get('{}/products'.format(BASE_URL)) check_rsp_code(rsp) products = rsp.json() # create inventory inventory = OrderShopTestCase.create_inventory( [product['id'] for product in products], 100) rsp = requests.post('{}/inventory'.format(BASE_URL), json=inventory) check_rsp_code(rsp) # check result rsp = requests.get('{}/inventory'.format(BASE_URL)) check_rsp_code(rsp) assert len(inventory) == len(rsp.json())
def test_7_delete_third_customer(): # load customers rsp = requests.get('{}/customers'.format(BASE_URL)) check_rsp_code(rsp) customers = rsp.json() # delete third customer rsp = requests.delete('{}/customer/{}'.format(BASE_URL, customers[2]['id'])) check_rsp_code(rsp) # check result rsp = requests.get('{}/customer/{}'.format(BASE_URL, customers[2]['id'])) check_rsp_code(rsp) assert rsp.json() is False