def test_update_order(lambda_module):
    """
    test update_order()
    """

    order_id = "ORDER_ID"
    status = "STATUS"

    table = stub.Stubber(lambda_module.table.meta.client)
    expected_params = {
        "TableName": "TABLE_NAME",
        "Key": {
            "orderId": order_id
        },
        "UpdateExpression": stub.ANY,
        "ExpressionAttributeNames": {
            "#s": "status"
        },
        "ExpressionAttributeValues": {
            ":s": status
        }
    }
    table.add_response("update_item", {}, expected_params)
    table.activate()

    lambda_module.update_order(order_id, status)

    table.assert_no_pending_responses()
    table.deactivate()
def test_update_order_products(lambda_module, order):
    """
    test update_order() with products
    """

    order_id = "ORDER_ID"
    status = "STATUS"

    table = stub.Stubber(lambda_module.table.meta.client)
    # get_item stub
    expected_params = {
        "TableName": "TABLE_NAME",
        "Key": {
            "orderId": order_id
        },
        "AttributesToGet": ["products"]
    }
    response = {
        "Item": {k: TypeSerializer().serialize(v)
                 for k, v in order.items()}
    }
    print(response)
    table.add_response("get_item", response, expected_params)
    # update_item stub
    expected_params = {
        "TableName": "TABLE_NAME",
        "Key": {
            "orderId": order_id
        },
        "UpdateExpression": stub.ANY,
        "ExpressionAttributeNames": {
            "#s": "status",
            "#p": "products"
        },
        "ExpressionAttributeValues": {
            ":p": order["products"],
            ":s": status
        }
    }
    table.add_response("update_item", {}, expected_params)
    table.activate()

    lambda_module.update_order(order_id, status, order["products"])

    table.assert_no_pending_responses()
    table.deactivate()