Ejemplo n.º 1
0
        public void StandardTenderStrategyCalculateThrowsInvalidCurrencyExceptionWhenNoDenominationsFound()
        {
            mockCurrency.Setup(p => p.AllDenominations).Returns(new List <Money>()
            {
            });
            ITenderStrategy tenderStrategy = new StandardTenderStrategy();

            Assert.Throws <InvalidCurrencyException>(() => tenderStrategy.Calculate(mockCurrency.Object, 0, 0));
        }
Ejemplo n.º 2
0
        public void StandardTenderStrategySubtractsCorrectlyFromThePriceBasedOnOddDecimalDenominations()
        {
            mockCurrency.Setup(p => p.AllDenominations).Returns(new List <Money>()
            {
                new Bill(.25m, "quarter", "quarters")
            });
            ITenderStrategy tenderStrategy = new StandardTenderStrategy();
            var             actual         = tenderStrategy.Calculate(mockCurrency.Object, 1, 2.00m);

            foreach (Money money in actual.AllDenominations) // mockCurrency.Object.AllDenominations)
            {
                Assert.Equal(4, money.Count);                // price - tender = 4 quarters in change
            }
        }
Ejemplo n.º 3
0
        public void StandardTenderStrategyReturnsCurrentyWithNoMoneyValues()
        {
            mockCurrency.Setup(p => p.AllDenominations).Returns(new List <Money>()
            {
                new Bill(1, "test", "tests")
            });
            ITenderStrategy tenderStrategy = new StandardTenderStrategy();
            var             actual         = tenderStrategy.Calculate(mockCurrency.Object, 0, 0);

            foreach (Money money in actual.AllDenominations) // mockCurrency.Object.AllDenominations)
            {
                Assert.Equal(0, money.Count);                // due to the "ToString" override being used, we have to test the counts.
            }                                                // Consider refactoring ToString. Hard testing indicates a design flaw.
        }
Ejemplo n.º 4
0
        public void StandardTenderStrategySubtractsCorrectlyFromThePriceBasedOnNonDecimalDenominations()
        {
            mockCurrency.Setup(p => p.AllDenominations).Returns(new List <Money>()
            {
                new Bill(1, "dollar", "dollars")
            });
            ITenderStrategy tenderStrategy = new StandardTenderStrategy();
            var             actual         = tenderStrategy.Calculate(mockCurrency.Object, 1, 3);

            // test that our "1 dollar bill" is added 2 times during the process for standard strategy for change
            // (meaning that the price is recuded each time accordingly)
            foreach (Money money in actual.AllDenominations) // mockCurrency.Object.AllDenominations)
            {
                Assert.Equal(2, money.Count);                // price - tender = 2 dollars in change
            }
        }
Ejemplo n.º 5
0
        public void StandardCalculatesZeroTenderWhenTenderIsLessThanPrice()
        {
            mockCurrency.Setup(p => p.AllDenominations).Returns(new List <Money>()
            {
                new Bill(10, "ten", "tens"),
                new Bill(5, "five", "fives"),
                new Bill(1, "dollar", "dollars"),
                new Coin(.10m, "dime", "dimes"),
                new Coin(.05m, "nickel", "nickels"),
                new Coin(.01m, "penny", "pennies")
            });
            ITenderStrategy tenderStrategy = new StandardTenderStrategy();
            decimal         expected       = 0.0m;
            decimal         actual         = 0.0m;
            var             result         = tenderStrategy.Calculate(mockCurrency.Object, 10.03m, 1.03m); // 0 in change

            foreach (Money money in mockCurrency.Object.AllDenominations)
            {
                actual += (money.Count * money.Denomination);
            }
            Assert.Equal(expected, actual);
        }