public void TestCalculateChangeOneOfEach()
        {
            // Test each USD denomination
            CashRegisterBusiness             business = new CashRegisterBusiness();
            IEnumerable <CashRegisterRecord> records  = business.ProcessFile("13.58, 200.00");

            Assert.AreEqual(186.42m, records.First().Change);
            Assert.AreEqual("1 hundred-dollar bill, 1 fifty-dollar bill, 1 twenty-dollar bill, 1 ten-dollar bill, 1 five-dollar bill, 1 dollar, 1 quarter, 1 dime, 1 nickel, 2 pennies", records.First().ChangeText);
        }
        public void TestCalculateChangePlural()
        {
            // Test plural nouns
            CashRegisterBusiness             business = new CashRegisterBusiness();
            IEnumerable <CashRegisterRecord> records  = business.ProcessFile("1.88, 4.00");

            Assert.AreEqual(2.12m, records.First().Change);
            Assert.AreEqual("2 dollars, 1 dime, 2 pennies", records.First().ChangeText);
        }
        public void TestCalculateChange1Penny()
        {
            // Regular test - one penny
            CashRegisterBusiness             business = new CashRegisterBusiness();
            IEnumerable <CashRegisterRecord> records  = business.ProcessFile("1.99, 2.00");

            Assert.AreEqual(0.01m, records.First().Change);
            Assert.AreEqual("1 penny", records.First().ChangeText);
        }
        public void TestCalculateChangeNoChange()
        {
            // Edge case - no change
            CashRegisterBusiness             business = new CashRegisterBusiness();
            IEnumerable <CashRegisterRecord> records  = business.ProcessFile("1.00, 1.00");

            Assert.AreEqual(0, records.First().Change);
            Assert.AreEqual("No change", records.First().ChangeText);
        }
        public void TestCalculateChangeDivisibleBy3()
        {
            // Test client's request
            // If amount owed is divisible by 3, generate the change denominations randomly
            CashRegisterBusiness             business = new CashRegisterBusiness();
            IEnumerable <CashRegisterRecord> records  = business.ProcessFile("5.52, 10.00");

            Assert.AreEqual(4.48m, records.First().Change);
            Assert.AreNotEqual("4 dollars, 1 quarter, 2 dimes, 3 pennies", records.First().ChangeText); // This exact scenario is not likely
        }
 // If CashRegisterBusiness connected to the database and needs to be faked / mocked,
 // use Ninject and dependency injection to create CashRegisterBusiness
 // Otherwise, this is sufficient
 public CashRegisterController()
 {
     _business = new CashRegisterBusiness();
 }