public void AddingUnrecognisedCoinAddsToReturnedCoins()
        {
            VendingMachine vendingMachine;

            Scenario()
                .Given(vendingMachine = new VendingMachine())

                .When(() => vendingMachine.AddCoin("2"))
                .When(() => vendingMachine.AddCoin("3"))
                .When(() => vendingMachine.AddCoin("9"))

                .Then(vendingMachine,
                    Is(AVendingMachine.With()
                        .Total(2)
                        .ReturnedCoins(AList.InOrder().WithOnlyValues("3", "9"))));
        }
        public void DispensesProductForExactMoney()
        {
            VendingMachine vendingMachine;

            Scenario()
                .Given(vendingMachine = new VendingMachine())
                .Given(() => vendingMachine.AddCoin("100"))

                .When(() => vendingMachine.RequestProduct(Product.Cola))

                .Then(vendingMachine,
                    Is(AVendingMachine.With()
                        .Total(0)
                        .DispensedProducts(Product.Cola)
                        .Display("THANK YOU")
                        .ReturnedCoins()));
        }
        public void AddingCoinsIncrementsValue()
        {
            VendingMachine vendingMachine;

            Scenario()
                .Given(vendingMachine = new VendingMachine())

                .When(() => vendingMachine.AddCoin("1"))
                .When(() => vendingMachine.AddCoin("2"))
                .When(() => vendingMachine.AddCoin("5"))
                .When(() => vendingMachine.AddCoin("10"))
                .When(() => vendingMachine.AddCoin("20"))
                .When(() => vendingMachine.AddCoin("50"))
                .When(() => vendingMachine.AddCoin("100"))

                .Then(vendingMachine,
                    Is(AVendingMachine.With()
                        .Total(188)));
        }
        public void GivesChange()
        {
            VendingMachine vendingMachine;
            ICalculateChange calculateChange;

            Scenario()
                .Given(calculateChange = AMock<ICalculateChange>()
                    .WhereMethod(c => c.ChangeFor(35)).Returns(new[] { 20, 10, 5 })
                    .Instance)
                .Given(vendingMachine = new VendingMachine(calculateChange))
                .Given(() => vendingMachine.AddCoin("100"))

                .When(() => vendingMachine.RequestProduct(Product.Candy))

                .Then(vendingMachine,
                    Is(AVendingMachine.With()
                        .Total(0)
                        .DispensedProducts(Product.Candy)
                        .Display("THANK YOU")
                        .ReturnedCoins("20", "10", "5")));
        }