def test_vending_machine__should_call_count_funds(mock_product, mock_count):
    valid_coins = [coins.DOLLAR, coins.QUARTER, coins.DIME, coins.NICKEL]
    product_location = 'G8'
    mock_product.return_value.is_product_available.return_value = False

    vending_machine.vending_machine(valid_coins, product_location)

    assert mock_count.call_count == 1
    mock_count.assert_called_with(valid_coins)
def test_vending_machine__should_call_get_product_cost(mock_product):
    valid_coins = [coins.DOLLAR]
    product_location = 'G8'
    mock_product.return_value.sufficient_funds_provided.return_value = False

    vending_machine.vending_machine(valid_coins, product_location)

    assert mock_product.return_value.get_product_cost.call_count == 1
    mock_product.return_value.get_product_cost.assert_called_with()
def test_vending_machine__should_check_if_product_is_available(mock_product):
    valid_coins = [coins.QUARTER]
    product_location = 'G8'
    mock_product.return_value.get_product_cost.return_value = .50

    vending_machine.vending_machine(valid_coins, product_location)

    assert mock_product.return_value.is_product_available.call_count == 1
    mock_product.return_value.is_product_available.assert_called_with(
        product_location)
def test_vending_machine__should_call_validate_for_list_of_coins(
        mock_product, mock_validate):
    valid_coins = [coins.DOLLAR, coins.QUARTER, coins.DIME, coins.NICKEL]
    product_location = 'G8'
    mock_validate.side_effect = valid_coins
    mock_product.return_value.is_product_available.return_value = False

    vending_machine.vending_machine(valid_coins, product_location)

    assert mock_validate.call_count == 4
def test_vending_machine__should_call_purchase_item(mock_purchase,
                                                    mock_product):
    valid_coins = [coins.DOLLAR]
    product_location = 'G8'
    mock_product.return_value.get_product_cost.return_value = 1.0

    vending_machine.vending_machine(valid_coins, product_location)

    assert mock_purchase.call_count == 1
    mock_purchase.assert_called_with(product_location)
def test_vending_machine__should_call_sufficient_funds(mock_product):
    valid_coins = [coins.QUARTER]
    product_location = 'G8'
    expected_cost = .35
    mock_product.return_value.get_product_cost.return_value = expected_cost

    vending_machine.vending_machine(valid_coins, product_location)

    assert mock_product.return_value.sufficient_funds_provided.call_count == 1
    mock_product.return_value.sufficient_funds_provided.assert_called_with(
        .25, expected_cost)
def test_vending_machine__should_call_validate_for_one_coin(
        mock_product, mock_validate):
    valid_coin = [coins.QUARTER]
    product_location = 'G8'
    mock_validate.return_value = coins.QUARTER
    mock_product.return_value.is_product_available.return_value = False

    vending_machine.vending_machine(valid_coin, product_location)

    assert mock_validate.call_count == 1
    mock_validate.assert_called_with(coins.QUARTER)
def test_vending_machine__product_is_unavailable():
    product_location = 'G15'
    list_coins = [coins.DOLLAR]

    actual = vending_machine.vending_machine(list_coins, product_location)

    assert actual['message'] == 'Product is Unavailable'
    assert actual['product'] is None
def test_vending_machine__insufficient_funds():
    product_location = 'G8'
    list_coins = [coins.NICKEL]

    actual = vending_machine.vending_machine(list_coins, product_location)

    assert actual['message'] == 'Insufficient Funds Provided'
    assert actual['product'] is None
def test_vending_machine__should_return_change(mock_product):
    valid_coins = [coins.DOLLAR, coins.QUARTER]
    product_location = 'G8'
    mock_product.return_value.get_product_cost.return_value = 1.0

    actual = vending_machine.vending_machine(valid_coins, product_location)

    assert actual['change'] == [coins.QUARTER]
def test_vending_machine__should_return_item_dictionary(mock_product):
    valid_coins = [coins.DOLLAR]
    product_location = 'G8'
    mock_product.return_value.get_product_cost.return_value = 1.0

    actual = vending_machine.vending_machine(valid_coins, product_location)

    assert actual['product']['Product Name'] == 'Snickers'
def test_vending_machine__should_return_unavailable_message(mock_product):
    valid_coins = [coins.QUARTER]
    product_location = 'G8'
    mock_product.return_value.is_product_available.return_value = False

    unavailable_message = vending_machine.vending_machine(
        valid_coins, product_location)

    assert unavailable_message['message'] == "Product is Unavailable"
def test_vending_machine__can_purchase_product():
    product_location = 'G8'
    list_coins = [coins.DOLLAR, coins.QUARTER, coins.DIME]

    actual = vending_machine.vending_machine(list_coins, product_location)

    assert actual['message'] == 'Thank You! Enjoy Your Snack!'
    assert actual['product']['Product Name'] == 'Snickers'
    assert actual['change'] == [coins.QUARTER, coins.DIME]
def test_vending_machine__should_allow_purchase(mock_product):
    valid_coins = [coins.DOLLAR]
    product_location = 'G8'
    mock_product.return_value.get_product_cost.return_value = 1.0

    purchase_message = vending_machine.vending_machine(valid_coins,
                                                       product_location)

    assert purchase_message['message'] == "Thank You! Enjoy Your Snack!"
def test_vending_machine__should_return_insufficient_message(mock_product):
    valid_coins = [coins.QUARTER]
    product_location = 'G8'
    mock_product.return_value.sufficient_funds_provided.return_value = False

    insufficient_message = vending_machine.vending_machine(
        valid_coins, product_location)

    assert insufficient_message['message'] == "Insufficient Funds Provided"
예제 #16
0
def make_purchase():
    request_json = json.loads(request.data)
    list_coins = request_json['list_coins']
    product_location = request_json['product_location']
    result = vending_machine(list_coins, product_location)
    return Response(json.dumps(result), status=200)