Example #1
0
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)
Example #2
0
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)
Example #3
0
    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)
Example #4
0
    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
Example #5
0
    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())
Example #6
0
    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())
Example #7
0
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)
Example #8
0
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))
Example #9
0
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")
Example #10
0
    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]
Example #11
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())
Example #12
0
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)
Example #13
0
    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
Example #14
0
    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())
Example #15
0
    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())
Example #16
0
    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