def input_action(machine: VendingMachine): while True: print("Possible actions:") print( "1. Refill\n2. Insert Coin\n3. Make Selection\n4. Cancel\n5. Quit\n" ) print("Current State: {}".format(machine.state)) try: action = int( input( "What action would you like to take? (Enter the number): ") ) if action < 1 or action > 5: print("Please enter a valid choice(1-5)") continue if action == 1: machine.refill() elif action == 2: machine.insert_coin() elif action == 3: machine.make_selection() elif action == 4: machine.cancel() elif action == 5: break except ValueError: print("Please enter a valid choice (1-4)")
def test_get_balance_returns_sum_of_coins_minus_purchases(): machine = VendingMachine() machine.insert_coin(coins.Toonie()) machine.insert_coin(coins.Toonie()) machine.buy_product(products.Candy) assert machine.get_balance() == 85
def test_buy_product_returns_instance_when_valid(): machine = VendingMachine() machine.insert_coin(coins.Toonie()) machine.insert_coin(coins.Toonie()) result = machine.buy_product(products.Drink) assert isinstance(result, products.Drink)
def test_inserted_penny_is_returned(self): vendmachine = VendingMachine() current_balance = vendmachine.get_current_balance() # penny should be returned when inserted vendmachine.insert_coin(self.penny) # check that the penny was placed in the coin return self.assertEqual(vendmachine.check_coin_return(), [self.penny]) # current balance should not have changed self.assertEqual(vendmachine.get_current_balance(), current_balance)
def test_inserted_coins_are_appended_to_coin_list(): machine = VendingMachine() machine.insert_coin(coins.Loonie()) machine.insert_coin(coins.Toonie()) machine.insert_coin(coins.Quarter()) assert machine.inserted_coins == [ coins.Loonie(), coins.Toonie(), coins.Quarter() ]
def test_accept_coins(machine: VendingMachine, printer: VendingMachinePrinter, coins: dict): # TODO: use the printer and approvaltests.verify instead of assertions assert machine.display == "INSERT COIN" machine.insert_coin(coins["nickel"]) assert machine.balance == 5 assert machine.coins == [5] assert machine.display == "5"
def test_return_coins(self): vendmachine = VendingMachine() # check that the coin return is empty self.assertEqual(vendmachine.check_coin_return(), []) # insert coins my_coins = [self.quarter, self.quarter, self.dime] for coin in my_coins: vendmachine.insert_coin(coin) vendmachine.return_coins() change = vendmachine.take_out_coins_from_coin_return() self.assertEqual(self.count_change(my_coins), self.count_change(change)) # check that the coin return is empty again self.assertEqual(vendmachine.check_coin_return(), [])
class TestVendingMachine(unittest.TestCase): def setUp(self): self.vendmachine = VendingMachine() self.quarter = Coin(weight=5.670, diameter=24.26, thickness=1.75) self.dime = Coin(weight=2.268, diameter=17.91, thickness=1.35) self.nickle = Coin(weight=5.000, diameter=21.21, thickness=1.95) self.penny = Coin(weight=2.500, diameter=19.05, thickness=1.52) # stock the machine for item in ["cola", "candy", "chips"]: map(self.vendmachine.inventory[item].append, repeat(item, 20)) def test_product_price_is_int(self): self.assertTrue(isinstance(self.vendmachine.get_product_price("chips"), int)) def test_product_to_dollar_string_price(self): self.assertEqual(self.vendmachine.product_to_dollar_string_price("candy"), "$0.65") self.assertEqual(self.vendmachine.product_to_dollar_string_price("cola"), "$1.00") self.assertEqual(self.vendmachine.product_to_dollar_string_price("chips"), "$0.50") def test_product_list_exists(self): self.assertTrue(isinstance(self.vendmachine.get_product_list(), list)) def test_detect_coin_value(self): self.assertEqual(self.vendmachine.detect_coin_value(self.quarter), 25) self.assertEqual(self.vendmachine.detect_coin_value(self.dime), 10) self.assertEqual(self.vendmachine.detect_coin_value(self.nickle), 5) self.assertEqual(self.vendmachine.detect_coin_value(self.penny), None) def test_current_balance_in_machine_is_zero_on_startup(self): newmachine = VendingMachine() self.assertEqual(newmachine.get_current_balance(), 0) def test_inserted_coin_updates_current_balance(self): current_balance = self.vendmachine.get_current_balance() current_coin_return = self.vendmachine.check_coin_return() # insert the nickle and check that it is not returned self.vendmachine.insert_coin(self.nickle) # check that the coin return has not changed self.assertEqual(self.vendmachine.check_coin_return(), current_coin_return) self.assertEqual(self.vendmachine.get_current_balance(), current_balance + 5) def test_inserted_penny_is_returned(self): vendmachine = VendingMachine() current_balance = vendmachine.get_current_balance() # penny should be returned when inserted vendmachine.insert_coin(self.penny) # check that the penny was placed in the coin return self.assertEqual(vendmachine.check_coin_return(), [self.penny]) # current balance should not have changed self.assertEqual(vendmachine.get_current_balance(), current_balance) def test_empty_out_coins_from_machine(self): coin_collection = self.vendmachine.take_out_coins() self.assertTrue(isinstance(coin_collection, list)) updated_coin_collection = self.vendmachine.take_out_coins() self.assertEqual(updated_coin_collection, []) def test_inserted_coins_are_added_to_bank_after_purchase(self): _ = self.vendmachine.take_out_coins() # insert $0.50 my_coins = [self.quarter, self.quarter] map(self.vendmachine.insert_coin, my_coins) # no coins should be in bank before purchase self.assertEqual(self.vendmachine.take_out_coins(), []) # purchase chips self.vendmachine.dispense_product("chips") # coins should now be in the coin bank self.assertEqual(self.vendmachine.take_out_coins(), my_coins) def test_display_shows_insert_coins(self): vendmachine = VendingMachine() # add coins to vending machine so that it does not display the exact change only message map(vendmachine.add_to_coin_bank, [self.dime, self.nickle]) current_balance = vendmachine.get_current_balance() if current_balance < vendmachine.get_product_price("cola"): self.assertEqual(vendmachine.check_display(), "INSERT COINS") def test_dispense_product(self): # add coins to vending machine so that it does not display the exact change only message map(self.vendmachine.add_to_coin_bank, [self.dime, self.nickle]) for i in range(2): my_product = self.vendmachine.dispense_product("chips") self.assertEqual(my_product, None) # no coins inserted self.assertEqual(self.vendmachine.check_display(), "PRICE $0.50") self.assertEqual(self.vendmachine.check_display(), "INSERT COINS") # insert quarters value_inserted = 0 for i in range(2): self.vendmachine.insert_coin(self.quarter) value_inserted += 25 self.assertEqual(self.vendmachine.check_display(), "$0.{0}".format(value_inserted)) my_product = self.vendmachine.dispense_product("chips") self.assertEqual(my_product, "chips") self.assertEqual(self.vendmachine.check_display(), "THANK YOU") self.assertEqual(self.vendmachine.current_balance, 0) self.assertEqual(self.vendmachine.check_display(), "INSERT COINS") def test_return_coins(self): vendmachine = VendingMachine() # check that the coin return is empty self.assertEqual(vendmachine.check_coin_return(), []) # insert coins my_coins = [self.quarter, self.quarter, self.dime] for coin in my_coins: vendmachine.insert_coin(coin) vendmachine.return_coins() change = vendmachine.take_out_coins_from_coin_return() self.assertEqual(self.count_change(my_coins), self.count_change(change)) # check that the coin return is empty again self.assertEqual(vendmachine.check_coin_return(), []) def count_change(self, change_list): change_value = 0 for coin in change_list: change_value += self.vendmachine.detect_coin_value(coin) return change_value def count_returned_change(self): # count returned change return self.count_change(self.vendmachine.take_out_coins_from_coin_return()) def test_make_change(self): # make sure coin return is empty if not len(self.vendmachine.check_coin_return()) == 0: # take out all the coins _ = self.vendmachine.take_out_coins_from_coin_return() # insert $0.90 map(self.vendmachine.insert_coin, [self.quarter, self.quarter, self.quarter, self.dime, self.nickle]) # buy candy self.vendmachine.dispense_product("candy") # check coin return self.assertEqual(25, self.count_returned_change()) # insert $0.75 map(self.vendmachine.insert_coin, repeat(self.quarter, 3)) # buy candy again self.vendmachine.dispense_product("candy") self.assertEqual(10, self.count_returned_change()) def test_exact_change_only(self): # take out all the coins from the machine _ = self.vendmachine.take_out_coins() # test that the screen displays that the exact change is needed on each check of the display for i in range(5): self.assertEqual("EXACT CHANGE ONLY", self.vendmachine.check_display()) def test_sold_out(self): # buy all the cola in the machine while len(self.vendmachine.inventory["cola"]) > 0: # insert $1.00 map(self.vendmachine.insert_coin, repeat(self.quarter, 4)) # buy cola self.assertEqual("cola", self.vendmachine.dispense_product("cola")) # insert $1.00 map(self.vendmachine.insert_coin, repeat(self.quarter, 4)) # try to buy cola self.assertEqual(None, self.vendmachine.dispense_product("cola")) # check that it displays that the item is sold out self.assertEqual("SOLD OUT", self.vendmachine.check_display())
def insert_coin(request): vm = VendingMachine() vm.insert_coin(1) return JsonResponse({'msg': vm.message})
def test_insert_coin_accepts_dime(): machine = VendingMachine() dime = coins.Dime() machine.insert_coin(dime)
def test_get_balance_returns_sum_value_of_coins(): machine = VendingMachine() machine.insert_coin(coins.Quarter()) machine.insert_coin(coins.Loonie()) assert machine.get_balance() == 125
def test_insert_coin_rejects_integer(): machine = VendingMachine() with pytest.raises(ValueError): machine.insert_coin(25)
def test_buy_product_accepts_candy(): machine = VendingMachine() machine.insert_coin(coins.Toonie()) machine.insert_coin(coins.Toonie()) machine.buy_product(products.Candy)
def test_buy_product_accepts_drink(): machine = VendingMachine() machine.insert_coin(coins.Toonie()) machine.insert_coin(coins.Loonie()) machine.buy_product(products.Drink)
def test_buy_product_accepts_chips_with_sufficient_balance(): machine = VendingMachine() machine.insert_coin(coins.Toonie()) machine.insert_coin(coins.Quarter()) machine.buy_product(products.Chips)
class VendingMachineTests(unittest.TestCase): def setUp(self): self.machine = VendingMachine(0.5, 1.0, 0.65) pass def test_sold_out(self): self.assertEqual(self.machine.has_product("CHIPS"), None) def test_show_zero_fifty_as_total_chip(self): self.assertEqual(self.machine.get_chips_price(), 0.50) def test_show_one_as_total_cola(self): self.assertEqual(self.machine.get_cola_price(), 1) def test_show_zero_sixty_five_as_total_candy(self): self.assertEqual(self.machine.get_candy_price(), 0.65) def test_coin_accepted(self): self.assertTrue(self.machine.insert_coin("NICKELS")) self.assertTrue(self.machine.insert_coin("DIMES")) self.assertTrue(self.machine.insert_coin("QUARTERS")) def test_coin_non_accepted(self): self.assertFalse(self.machine.insert_coin("PENNIES")) def test_display_insert_coin_when_zero_amount(self): self.assertEqual(self.machine.display(), "INSERT COIN") def test_display_quarter_credit(self): self.machine.insert_coin("QUARTERS") self.assertEqual(self.machine.display(), 0.25) def test_display_penny_credit(self): self.machine.insert_coin("PENNIES") self.assertEqual(self.machine.display(), "INSERT COIN") def test_display_two_quarters(self): self.machine.insert_coin("QUARTERS") self.machine.insert_coin("QUARTERS") self.assertEqual(self.machine.display(), 0.50) def test_display_one_pennie_two_quarters(self): self.machine.insert_coin("QUARTERS") self.machine.insert_coin("QUARTERS") self.machine.insert_coin("PENNIES") self.assertEqual(self.machine.display(), 0.50) def test_display_one_quarter_and_one_dime(self): self.machine.insert_coin("QUARTERS") self.machine.insert_coin("DIMES") self.assertEqual(self.machine.display(), 0.35) def test_display_one_quarter_and_one_nickel(self): self.machine.insert_coin("QUARTERS") self.machine.insert_coin("NICKELS") self.assertEqual(self.machine.display(), 0.30)
def test_insert_coin_accepts_quarter(): machine = VendingMachine() quarter = coins.Quarter() machine.insert_coin(quarter)