public void When_User_Inserts_More_Than_Enough_Coins_And_Purchases_A_Product_Success_Message_Is_Returned_And_Change_Is_Returned() { var productName = "Test"; var testProduct = new Product() { Name = productName, Price = 5, Quantity = 1 }; var machineLoader = new TestMachineLoader(); machineLoader.StorageProducts.Add(testProduct); machineLoader.StorageCoins.Add(1, 1); machineLoader.StorageCoins.Add(2, 1); machineLoader.StorageCoins.Add(3, 1); var machine = new VendingMachineService(machineLoader, null, new MockCoinValidator()); machine.LoadMachine().Wait(); machine.AcceptCoin(2); machine.AcceptCoin(2); machine.AcceptCoin(2); var result = machine.SellProduct(productName); result.Status.ShouldBe(eSellProductStatus.Success); result.Change.Sum(coin => coin.Key * coin.Value).ShouldBe(1); }
public void Test_Product_Sold_Out_Check_Display_Second_Time() { MessageService _messageService = new MessageService(); VendingMachineService vendingMachineService = new VendingMachineService(_messageService); // Setup Vending Defaults Assert.DoesNotThrow(() => vendingMachineService.SetupCashbox(initialCashBox)); Assert.DoesNotThrow(() => vendingMachineService.SetupStock(initialStock)); // 3 Dimes Assert.DoesNotThrow(() => vendingMachineService.AcceptCoin(new Coin { Weight = 5, Radius = 21 })); Assert.DoesNotThrow(() => vendingMachineService.AcceptCoin(new Coin { Weight = 5, Radius = 21 })); // Candy Assert.DoesNotThrow(() => vendingMachineService.SelectProduct(2)); Assert.DoesNotThrow(() => vendingMachineService.CheckDisplay()); var returnedDisplay = vendingMachineService.CheckDisplay(); Assert.AreEqual("INSERT COIN", returnedDisplay); }
public void VendingMachineServiceTests_should_Purchase_the_product(int orderNumber, int quantity, decimal price) { var cut = new VendingMachineService(); var actual = cut.Purchase(orderNumber, quantity, price); actual.Should().BeTrue(); }
public void Test_Product_REeturned_Change_After_Purchase() { MessageService _messageService = new MessageService(); VendingMachineService vendingMachineService = new VendingMachineService(_messageService); // Setup Vending Defaults Assert.DoesNotThrow(() => vendingMachineService.SetupCashbox(initialCashBox)); Assert.DoesNotThrow(() => vendingMachineService.SetupStock(initialStock)); // 3 Dimes Assert.DoesNotThrow(() => vendingMachineService.AcceptCoin(new Coin { Weight = 5, Radius = 21 })); Assert.DoesNotThrow(() => vendingMachineService.AcceptCoin(new Coin { Weight = 5, Radius = 21 })); Assert.DoesNotThrow(() => vendingMachineService.AcceptCoin(new Coin { Weight = 5, Radius = 21 })); Assert.DoesNotThrow(() => vendingMachineService.SelectProduct(1)); var returnedDisplay = vendingMachineService.CheckDisplay(); var returnedChange = vendingMachineService.ReturnCoins(); Assert.AreEqual("THANK YOU", returnedDisplay); }
public void WithdrawVendingItem_WithdrawItemNoStocks_ReturnsInsertedCoins() { List <VendingCoin> insertedCoins = new List <VendingCoin>() { new VendingCoin() { Value = 1, Quantity = 1 }, new VendingCoin() { Value = .50M, Quantity = 1 }, new VendingCoin() { Value = .50M, Quantity = 1 }, }; VendingMachineService vms = new VendingMachineService(new VendingCoinInventoryService()); var tea = VendingItemRepository.VendingItems.Where(w => w.Name == "Tea").FirstOrDefault(); tea.Quantity = 0; var result = vms.WithdrawVendingItem(new VendingItem() { Name = "Tea", Price = 1.80M, Quantity = 1 }, insertedCoins); tea.Quantity = 10; Assert.Equal(2, result.ReturnedAmount); Assert.Contains("No stocks available", result.Message); }
public void WithdrawVendingItem_WithdrawItemNoChange_ReturnsThankYouNoChange() { List <VendingCoin> insertedCoins = new List <VendingCoin>() { new VendingCoin() { Value = 1, Quantity = 1 }, new VendingCoin() { Value = .20M, Quantity = 1 }, new VendingCoin() { Value = .50M, Quantity = 1 }, new VendingCoin() { Value = .10M, Quantity = 1 }, }; VendingMachineService vms = new VendingMachineService(new VendingCoinInventoryService()); var result = vms.WithdrawVendingItem(new VendingItem() { Name = "Tea", Price = 1.80M, Quantity = 10 }, insertedCoins); Assert.Equal(0, result.ReturnedAmount); Assert.Contains("Thank You", result.Message); }
public async Task ReturnCorrectAmount() { // setup in-memory database var dbContextOptions = new Microsoft.EntityFrameworkCore.DbContextOptionsBuilder <VmDbContext>().UseInMemoryDatabase("VMDB"); var dbContext = new VmDbContext(dbContextOptions.Options); // seed some data DataSeedingHelper.Seed(dbContext); var service = new VendingMachineService(dbContext); var product = (await service.GetProductsAsync()).First(); var change = new Dictionary <decimal, int>(); var payCoins = new Dictionary <decimal, int>(); payCoins.Add(0.1m, 5); payCoins.Add(1.0m, 2); var ok = await service.PurchaseAsync(product.Id, payCoins, change); Assert.True(ok); var changeSum = change.ToList().Sum(x => x.Key * x.Value); var paiedSum = payCoins.ToList().Sum(x => x.Key * x.Value); Assert.Equal(changeSum, paiedSum - product.Price); }
public void VendingMachineServiceTests_should_populated_the_items() { var cut = new VendingMachineService(); var actual = cut.GetProductMap(); actual.Should().NotBeNull(); actual.Count.Should().BeGreaterThan(0); }
public void When_User_Inserts_A_Coin_Vending_Machine_Stores_It() { var machine = new VendingMachineService(null, null, new MockCoinValidator()); machine.AcceptCoin(0.5); machine.CurrentInsertedAmount.ShouldBe(0.5); }
public void Test_Vending_Machine_Cash_Setup() { Mock <IMessageService> _messageService = new Mock <IMessageService>(); VendingMachineService vendingMachineService = new VendingMachineService(_messageService.Object); Assert.DoesNotThrow(() => vendingMachineService.SetupCashbox(initialCashBox)); }
public void Test_Vending_Machine_Stock_Setup() { Mock <IMessageService> _messageService = new Mock <IMessageService>(); VendingMachineService vendingMachineService = new VendingMachineService(_messageService.Object); Assert.DoesNotThrow(() => vendingMachineService.SetupStock(initialStock)); }
public void When_User_Asks_To_Return_Coins_Coins_Are_Returned() { var machine = new VendingMachineService(null, null, new MockCoinValidator()); machine.AcceptCoin(0.5); var returnedCoins = machine.ReturnCoins(); machine.CurrentInsertedAmount.ShouldBe(0); returnedCoins.Sum(coin => coin.Key * coin.Value).ShouldBe(0.5); }
public void VendingMachineServiceTests_should_Purchase_the_product_and_quantity_should_be_decrement(int orderNumber, int quantity, decimal price, int totalQuantity) { var cut = new VendingMachineService(); var actual = cut.Purchase(orderNumber, quantity, price); var getProductMap = cut.GetProductMap(); var product = getProductMap[orderNumber]; actual.Should().BeTrue(); product.TotalItem.Should().Be(totalQuantity - quantity); }
public void VendingMachineServiceTests_should_throw_the_PurchaseException_when_price_Invalid(int orderNumber, int quantity, decimal price) { void Action() { var cut = new VendingMachineService(); cut.Purchase(orderNumber, quantity, price); } Assert.Throws <PurchaseException>((Action)Action); }
public void VendingMachineServiceTests_should_throw_the_PurchaseException_when_quantity_is_greater_that_total_item() { void Action() { var cut = new VendingMachineService(); cut.Purchase(1, 200, 1); } Assert.Throws <PurchaseException>((Action)Action); }
public void VendingMachineServiceTests_should_throw_the_PurchaseException_when_purchased_quantity_not_valid() { void Action() { var cut = new VendingMachineService(); cut.Purchase(1, 2, 1); } Assert.Throws <PurchaseException>((Action)Action); }
public VendingMachineController( VendingMachineContext context, CoinChangerService coinChangerService, VendingMachineService vendingMachineService ) { _context = context; _coinChangerService = coinChangerService; _vendingMachineService = vendingMachineService; vendingMachineService.InitializeData(); }
public void Test_Inserting_Nickle() { Mock <IMessageService> _messageService = new Mock <IMessageService>(); VendingMachineService vendingMachineService = new VendingMachineService(_messageService.Object); // Setup Vending Defaults Assert.DoesNotThrow(() => vendingMachineService.SetupCashbox(initialCashBox)); Assert.DoesNotThrow(() => vendingMachineService.SetupStock(initialStock)); Assert.DoesNotThrow(() => vendingMachineService.AcceptCoin(new Coin { Weight = 5, Radius = 21 })); }
public void Test_Display_When_Empty() { MessageService _messageService = new MessageService(); VendingMachineService vendingMachineService = new VendingMachineService(_messageService); // Setup Vending Defaults Assert.DoesNotThrow(() => vendingMachineService.SetupCashbox(initialCashBox)); Assert.DoesNotThrow(() => vendingMachineService.SetupStock(initialStock)); var returnedDisplay = vendingMachineService.CheckDisplay(); Assert.AreEqual("INSERT COIN", returnedDisplay); }
static void Main(string[] args) { IVendingMachineService vendingMachine = new VendingMachineService(); vendingMachine.AddItems(Enums.Item.Chip, 2); vendingMachine.AddCoins(Enums.Coin.Cent, 0); Request request = new Request(Item.Chip); request.AddDollar(); var retVal = vendingMachine.MakePurchase(request); }
public void Test_Product_Select_No_Money_Value_1() { MessageService _messageService = new MessageService(); VendingMachineService vendingMachineService = new VendingMachineService(_messageService); // Setup Vending Defaults Assert.DoesNotThrow(() => vendingMachineService.SetupCashbox(initialCashBox)); Assert.DoesNotThrow(() => vendingMachineService.SetupStock(initialStock)); Assert.DoesNotThrow(() => vendingMachineService.SelectProduct(1)); var returnedDisplay = vendingMachineService.CheckDisplay(); Assert.AreEqual("PRICE: 1.00", returnedDisplay); }
public void WithdrawVendingItem_WithdrawItemReturnChangeFromInsertedCoins_ReturnsFewerCoinsChange() { List <VendingCoin> insertedCoins = new List <VendingCoin>() { new VendingCoin() { Value = 1, Quantity = 1 }, new VendingCoin() { Value = .20M, Quantity = 1 }, new VendingCoin() { Value = .50M, Quantity = 1 }, new VendingCoin() { Value = .10M, Quantity = 1 }, new VendingCoin() { Value = .20M, Quantity = 1 }, }; VendingCoinInventoryService vis = new VendingCoinInventoryService(); var invSnapshot = vis.CreateInventorySnapshot(); VendingCoinRepository.VendingCoins.ToList().Clear(); VendingCoinRepository.VendingCoins = new List <VendingCoin>() { new VendingCoin() { Value = .10M, Quantity = 1 }, }; VendingMachineService vms = new VendingMachineService(new VendingCoinInventoryService()); var result = vms.WithdrawVendingItem(new VendingItem() { Name = "Tea", Price = 1.80M, Quantity = 10 }, insertedCoins); Assert.Equal(.20M, result.ReturnedAmount); Assert.Equal(.20M, result.ReturnedCoins.Where(w => w.Value == .20M).Select(s => s.Amount).FirstOrDefault()); Assert.Contains("Thank You", result.Message); vis.RestoreInventorySnapshot(invSnapshot.ToList()); }
public void Setup() { var dataSvc = new InMemoryDataStoreService(); _vmSvc = new VendingMachineService(dataSvc); _viewModel = _vmSvc.SetViewModel(); _inputModel = new CoffeeInputModel { Cost = 2.00, Size = Size.Medium, Sugars = 2, Creamers = 3, }; }
public void When_User_Inserts_More_Than_Enough_Coins_And_Purchases_A_Product_But_There_Are_Not_Enough_Coins_For_Change_An_Out_Of_Change_Message_Is_Shown() { var productName = "Test"; var testProduct = new Product() { Name = productName, Price = 1, Quantity = 1 }; var machine = new VendingMachineService(null, null, new MockCoinValidator()); machine.AddProduct(testProduct); machine.AcceptCoin(5); var result = machine.SellProduct(productName); result.Status.ShouldBe(eSellProductStatus.OutOfChange); result.Change.Any().ShouldBeFalse(); }
public void When_User_Inserts_Just_Enough_Coins_And_Purchases_A_Product_Success_Is_Returned() { var productName = "Test"; var testProduct = new Product() { Name = productName, Price = 1, Quantity = 1 }; var machine = new VendingMachineService(null, null, new MockCoinValidator()); machine.AddProduct(testProduct); machine.AcceptCoin(1); var result = machine.SellProduct(productName); result.Status.ShouldBe(eSellProductStatus.Success); result.Change.Any().ShouldBeFalse(); }
private void OnUpdate(List <Events.TickNametagData> nametags) { if (!IsDictionaryLoaded) { return; } if (Player.IsPlayingAnim(Dictionary, "PLYR_BUY_DRINK_PT1", 1)) { if (Player.GetAnimCurrentTime(Dictionary, "PLYR_BUY_DRINK_PT1") > 0.1f) { AttachmentHandler.Add("soda"); } if (Player.GetAnimCurrentTime(Dictionary, "PLYR_BUY_DRINK_PT1") > 0.98f) { Player.TaskPlayAnim(Dictionary, "PLYR_BUY_DRINK_PT2", 4f, -1000f, -1, 1048576, 0f, false, false, false); Invoker.Invoke(0x2208438012482A1A, Player.Handle, false, false); // PED::_SET_PED_FAST_ANIMATIONS } } if (Player.IsPlayingAnim(Dictionary, "PLYR_BUY_DRINK_PT2", 1)) { if (Player.GetAnimCurrentTime(Dictionary, "PLYR_BUY_DRINK_PT2") > 0.98f) { Player.TaskPlayAnim(Dictionary, "PLYR_BUY_DRINK_PT3", 1000f, -4f, -1, 1048624, 0f, false, false, false); Invoker.Invoke(0x2208438012482A1A, Player.Handle, false, false); // PED::_SET_PED_FAST_ANIMATIONS } } if (Player.IsPlayingAnim(Dictionary, "PLYR_BUY_DRINK_PT3", 1)) { if (Player.GetAnimCurrentTime(Dictionary, "PLYR_BUY_DRINK_PT3") > 0.306f) { AttachmentHandler.Remove("soda"); } if (Player.GetAnimCurrentTime(Dictionary, "PLYR_BUY_DRINK_PT3") > 0.9f) { Streaming.RemoveAnimDict(Dictionary); Audio.ReleaseAmbientAudioBank(); IsDictionaryLoaded = false; VendingMachineService.SetInUse(false); } } }
public void Test_Insert_And_return_Of_Coins(int first, int second) { Mock <IMessageService> _messageService = new Mock <IMessageService>(); VendingMachineService vendingMachineService = new VendingMachineService(_messageService.Object); // Setup Vending Defaults Assert.DoesNotThrow(() => vendingMachineService.SetupCashbox(initialCashBox)); Assert.DoesNotThrow(() => vendingMachineService.SetupStock(initialStock)); Assert.DoesNotThrow(() => vendingMachineService.AcceptCoin(new Coin { Weight = first, Radius = second })); var returnedStack = vendingMachineService.ReturnCoins(); Assert.AreEqual((new Coin { Weight = first, Radius = second }), returnedStack.FirstOrDefault().Key); }
public void Test_Product_Select_Not_Enough_Money_Product_Value_Subsequent_Check() { MessageService _messageService = new MessageService(); VendingMachineService vendingMachineService = new VendingMachineService(_messageService); // Setup Vending Defaults Assert.DoesNotThrow(() => vendingMachineService.SetupCashbox(initialCashBox)); Assert.DoesNotThrow(() => vendingMachineService.SetupStock(initialStock)); Assert.DoesNotThrow(() => vendingMachineService.AcceptCoin(new Coin { Weight = 5, Radius = 21 })); Assert.DoesNotThrow(() => vendingMachineService.SelectProduct(1)); Assert.DoesNotThrow(() => vendingMachineService.SelectProduct(1)); var returnedDisplay = vendingMachineService.CheckDisplay(); Assert.AreEqual("PRICE: 0.50", returnedDisplay); }
public void When_machine_state_is_json_saved_it_is_restored_correctly() { var machine = new VendingMachineService(new VendingMachineJsonLoader(), new VendingMachineJsonSaver(), new MockCoinValidator()); machine.AddCoin(1); machine.AddProduct(new Product() { Name = "Test", Price = 5, Quantity = 1 }); machine.AcceptCoin(5); machine.SaveMachine().Wait(); var loadedMachine = new VendingMachineService(new VendingMachineJsonLoader(), new VendingMachineJsonSaver(), new MockCoinValidator()); loadedMachine.LoadMachine().Wait(); machine.CurrentInsertedAmount.ShouldBe(5); machine.Products.First().Name.ShouldBe("Test"); machine.CoinsAvailable.First().Key.ShouldBe(1); }
public void WithdrawVendingItem_WithdrawItemNoChange_ReturnsInsertedCoins() { List <VendingCoin> insertedCoins = new List <VendingCoin>() { new VendingCoin() { Value = 1, Quantity = 1 }, new VendingCoin() { Value = .50M, Quantity = 1 }, new VendingCoin() { Value = .50M, Quantity = 1 }, }; VendingCoinInventoryService vis = new VendingCoinInventoryService(); var invSnapshot = vis.CreateInventorySnapshot(); VendingCoinRepository.VendingCoins.Clear(); VendingCoinRepository.VendingCoins = new List <VendingCoin>() { new VendingCoin() { Value = .10M, Quantity = 1 }, }; VendingMachineService vms = new VendingMachineService(new VendingCoinInventoryService()); var result = vms.WithdrawVendingItem(new VendingItem() { Name = "Tea", Price = 1.80M, Quantity = 10 }, insertedCoins); Assert.Equal(2, result.ReturnedAmount); Assert.Contains("Not enough coins", result.Message); vis.RestoreInventorySnapshot(invSnapshot.ToList()); }