示例#1
0
        public void VendingMachine_InValidCoinInserted_DisplaysInsertCoin()
        {
            var fixture = new Fixture()
                          .Customize(new AutoMoqCustomization());

            var checker    = fixture.Freeze <Mock <ICoinChecker> >();
            var repository = fixture.Freeze <Mock <ICoinRepository> >();

            checker.Setup(x => x.CheckCoin(It.IsAny <InsertedCoin>())).Returns(ValidCoin.Unknown);

            repository.Setup(x => x.GetAllCoinBins())
            .Returns(ValidCoin.List().Select(coin => new CoinBin()
            {
                Amount = 25, CoinType = coin
            }));

            var sut = fixture.Create <VendingMachine>();

            var insertedCoin = new InsertedCoin()
            {
                Diameter = 100f,
                Weight   = 100f
            };

            sut.InsertCoin(insertedCoin);

            Assert.Equal("Insert Coin", sut.CoinDisplay);
        }
示例#2
0
        public void VendingMachine_ValidCoinInserted_DisplaysValueOfCoin()
        {
            var fixture = new Fixture()
                          .Customize(new AutoMoqCustomization());

            var checker    = fixture.Freeze <Mock <ICoinChecker> >();
            var repository = fixture.Freeze <Mock <ICoinRepository> >();

            checker.Setup(x => x.CheckCoin(It.IsAny <InsertedCoin>())).Returns(ValidCoin.Nickel);

            repository.Setup(x => x.GetAllCoinBins())
            .Returns(ValidCoin.List().Select(coin => new CoinBin()
            {
                Amount = 25, CoinType = coin
            }));

            var sut = fixture.Create <VendingMachine>();

            var insertedCoin = new InsertedCoin()
            {
                Diameter = ValidCoin.Nickel.Diameter,
                Weight   = ValidCoin.Nickel.Weight
            };

            var result = sut.InsertCoin(insertedCoin);

            Assert.Equal($"{result.Value:C}", sut.CoinDisplay);
        }
        private static void TestValidCoinCreation(string description, decimal expectedValue)
        {
            ValidCoin validCoin;
            var       success = ValidCoin.TryCreate(description, out validCoin);

            Assert.That(success, Is.EqualTo(true));
            Assert.That(validCoin.Value, Is.EqualTo(expectedValue));
        }
        private static void TestCoinCreationWithInvalidDescription(string description)
        {
            ValidCoin validCoin;
            var       success = ValidCoin.TryCreate(description, out validCoin);

            Assert.That(success, Is.EqualTo(false));
            Assert.That(validCoin, Is.EqualTo(null));
        }
示例#5
0
        public void StaticCoinRepository_GetAllCoinBins_ReturnsListOfCoins()
        {
            var fixture = new Fixture()
                          .Customize(new AutoMoqCustomization());

            var sut = fixture.Create <StaticCoinRepository>();

            var results = sut.GetAllCoinBins();

            Assert.Equal(ValidCoin.List().Count(x => x != ValidCoin.Unknown), results.Count());
        }
示例#6
0
        private void InsertCoin(int coinIndex)
        {
            var coinList = ValidCoin.List().ToList();

            if (coinIndex >= coinList.Count)
            {
                return;
            }

            var insertedCoin = new InsertedCoin()
            {
                Diameter = coinList[coinIndex].Diameter, Weight = coinList[coinIndex].Weight
            };

            this.machine.InsertCoin(insertedCoin);
        }
示例#7
0
        private void WriteInsertCoinMenu()
        {
            Console.WriteLine("What Coin would you like to insert?");
            Console.WriteLine("");
            var index = 1;

            foreach (var coin in ValidCoin.List())
            {
                Console.WriteLine(coin == ValidCoin.Unknown
                    ? $"{index}. Some weird object you found in your pocket"
                    : $"{index}. {coin.Name}");

                index++;
            }
            Console.WriteLine("");
            Console.WriteLine("R. Return");
            Console.WriteLine("Q. Quit");
        }
示例#8
0
        public void VendingMachine_VendProductInsufficientFunds_CoinBinUnchanged()
        {
            var fixture = new Fixture()
                          .Customize(new AutoMoqCustomization());

            var checker           = fixture.Freeze <Mock <ICoinChecker> >();
            var coinRepository    = fixture.Freeze <Mock <ICoinRepository> >();
            var productRepository = fixture.Freeze <Mock <IProductRepository> >();
            var insertedCoin      = fixture.Create <InsertedCoin>();

            checker.Setup(x => x.CheckCoin(It.IsAny <InsertedCoin>())).Returns(ValidCoin.Dollar);

            coinRepository.Setup(x => x.GetAllCoinBins())
            .Returns(ValidCoin.List().Select(coin => new CoinBin()
            {
                Amount = 25, CoinType = coin
            }));

            productRepository.Setup(x => x.GetAllProducts())
            .Returns(new List <ProductBin>()
            {
                new ProductBin()
                {
                    ProductType = new Product()
                    {
                        Name = "Doritos"
                    }, Cost = 2.00m, Amount = 1
                },
            });

            var sut = fixture.Create <VendingMachine>();

            sut.InsertCoin(insertedCoin);
            var vendStatus = sut.Vend("Doritos");

            Assert.Equal(VendStatus.InsufficientFunds, vendStatus);
            Assert.Equal($"{ValidCoin.Dollar.Value:C}", sut.CoinDisplay);
        }
示例#9
0
 public IEnumerable <CoinBin> GetAllCoinBins() => ValidCoin.List().Select(coin => new CoinBin()
 {
     Amount = 25, CoinType = coin
 });