Esempio n. 1
0
        public void RequestSoda_ShouldReturnSodaWithAlternativeChange()
        {
            MockDataAccess   da    = new MockDataAccess();
            SodaMachineLogic logic = new SodaMachineLogic(da);

            string    user         = "******";
            SodaModel expcetedSoda = new SodaModel {
                Name = "Coke", SlotOccupied = "1"
            };
            var initialState = da.MachineInfo;

            da.UserCredit[user] = 1M;
            da.CoinInventory.RemoveAll(x => x.Amount == 0.25M);

            var results = logic.RequestSoda(expcetedSoda, user);

            Assert.Equal(expcetedSoda.Name, results.soda.Name);
            Assert.Equal(expcetedSoda.SlotOccupied, results.soda.SlotOccupied);

            Assert.Equal(0, da.UserCredit[user]);

            Assert.Equal(initialState.cashOnHand + 1M, da.MachineInfo.cashOnHand);
            Assert.Equal(initialState.totalIncome + 1M, da.MachineInfo.totalIncome);

            Assert.True(string.IsNullOrWhiteSpace(results.errorMessage));

            // Dime + Dime + Nickle = Quarter
            Assert.True(results.change.Count() == 3);
        }
Esempio n. 2
0
        public void RequestSoda_ShouldReturnSodaWithNoChange()
        {
            MockDataAccess   da    = new MockDataAccess();
            SodaMachineLogic logic = new SodaMachineLogic(da);

            string    user         = "******";
            SodaModel expcetedSoda = new SodaModel {
                Name = "Coke", SlotOccupied = "1"
            };
            var initialState = da.MachineInfo;

            da.UserCredit[user] = 0.75M;

            var results = logic.RequestSoda(expcetedSoda, user);

            Assert.Equal(expcetedSoda.Name, results.soda.Name);
            Assert.Equal(expcetedSoda.SlotOccupied, results.soda.SlotOccupied);

            Assert.Equal(0, da.UserCredit[user]);

            Assert.Equal(initialState.cashOnHand + 0.75M, da.MachineInfo.cashOnHand);
            Assert.Equal(initialState.totalIncome + 0.75M, da.MachineInfo.totalIncome);

            Assert.True(string.IsNullOrWhiteSpace(results.errorMessage));

            Assert.True(results.change.Count() == 0);
        }
Esempio n. 3
0
        public void RequestSoda_ShouldSayNotEnoughChange()
        {
            MockDataAccess   da    = new MockDataAccess();
            SodaMachineLogic logic = new SodaMachineLogic(da);

            string    user         = "******";
            SodaModel expcetedSoda = new SodaModel {
                Name = "Coke", SlotOccupied = "1"
            };
            var initialState = da.MachineInfo;

            da.UserCredit[user] = 1.75M;
            da.CoinInventory.Clear();

            var results = logic.RequestSoda(expcetedSoda, user);

            Assert.Null(results.soda);

            Assert.Equal(1.75M, da.UserCredit[user]);

            Assert.Equal(initialState.cashOnHand, da.MachineInfo.cashOnHand);
            Assert.Equal(initialState.totalIncome, da.MachineInfo.totalIncome);

            Assert.False(string.IsNullOrWhiteSpace(results.errorMessage));

            Assert.True(results.change.Count() == 0);
        }
Esempio n. 4
0
        public void AddToCoinInventory_ShouldWork()
        {
            MockDataAccess   da    = new MockDataAccess();
            SodaMachineLogic logic = new SodaMachineLogic(da);

            List <CoinModel> coins = new List <CoinModel>
            {
                new CoinModel {
                    Name = "Quarter", Amount = 0.25M
                },
                new CoinModel {
                    Name = "Quarter", Amount = 0.25M
                },
                new CoinModel {
                    Name = "Dime", Amount = 0.1M
                }
            };

            logic.AddToCoinInventory(coins);

            int expected = 6;
            int actual   = da.CoinInventory.Where(x => x.Name == "Quarter").Count();

            Assert.Equal(expected, actual);
        }
        public void RequestSoda_ShouldSayOutOfStock()
        {
            MockDataAccess   da    = new MockDataAccess();
            SodaMachineLogic logic = new SodaMachineLogic(da);

            string    user         = "******";
            SodaModel expectedSoda = new SodaModel {
                Name = "Fanta", SlotOccupied = "4"
            };
            var initialState = da.MachineInfo;

            da.UserCredit[user] = 0.75M;

            var results = logic.RequestSoda(expectedSoda, user);

            Assert.Null(results.soda);

            Assert.Equal(0.75M, da.UserCredit[user]);

            Assert.Equal(initialState.cashOnHand, da.MachineInfo.cashOnHand);
            Assert.Equal(initialState.totalIncome, da.MachineInfo.totalIncome);

            Assert.False(string.IsNullOrWhiteSpace(results.errorMessage));

            Assert.True(results.change.Count() == 0);
        }
Esempio n. 6
0
        public void ListTypesOfSoda_ShouldWork()
        {
            MockDataAccess   da    = new MockDataAccess();
            SodaMachineLogic logic = new SodaMachineLogic(da);

            var expected = 3;
            int actual   = logic.ListTypesOfSoda().Count();

            Assert.Equal(expected, actual);
        }
Esempio n. 7
0
        public void GetTotalIncome_ShouldWork()
        {
            MockDataAccess   da    = new MockDataAccess();
            SodaMachineLogic logic = new SodaMachineLogic(da);

            decimal actual   = logic.GetTotalIncome();
            decimal expected = da.MachineInfo.totalIncome;

            Assert.Equal(expected, actual);
        }
Esempio n. 8
0
        public void GetSodaInventory_ShouldWork()
        {
            MockDataAccess   da    = new MockDataAccess();
            SodaMachineLogic logic = new SodaMachineLogic(da);

            int actual   = logic.GetSodaInventory().Count();
            int expected = 8;

            Assert.Equal(expected, actual);
        }
Esempio n. 9
0
        public void GetCurrentIncome_ShouldWork()
        {
            MockDataAccess   da    = new MockDataAccess();
            SodaMachineLogic logic = new SodaMachineLogic(da);

            var(_, expected, _) = da.MachineInfo;
            decimal actual = logic.GetCurrentIncome();

            Assert.Equal(expected, actual);
        }
Esempio n. 10
0
        public void GetCoinInventory_ShouldWork()
        {
            MockDataAccess   da    = new MockDataAccess();
            SodaMachineLogic logic = new SodaMachineLogic(da);

            var coins = logic.GetCoinInventory();

            var expected = da.CoinInventory.Where(x => x.Name == "Quarter").Count();
            var actual   = coins.Where(x => x.Name == "Quarter").Count();

            Assert.Equal(expected, actual);
        }
Esempio n. 11
0
        public void IssueFullRefund_ShouldWork()
        {
            MockDataAccess   da    = new MockDataAccess();
            SodaMachineLogic logic = new SodaMachineLogic(da);
            string           user  = "******";

            da.UserCredit[user] = 0.65M;

            logic.IssueFullRefund(user);

            Assert.True(da.UserCredit[user] == 0);
        }
Esempio n. 12
0
        public void GetMoneyInsertedTotal_ShouldWork()
        {
            MockDataAccess   da    = new MockDataAccess();
            SodaMachineLogic logic = new SodaMachineLogic(da);

            decimal expected = 0.65M;

            da.UserCredit.Add("test", expected);

            decimal actual = logic.GetMoneyInsertedTotal("test");

            Assert.Equal(expected, actual);
        }
Esempio n. 13
0
        public void EmptyMoneyFromMachine_ShouldWork()
        {
            MockDataAccess   da    = new MockDataAccess();
            SodaMachineLogic logic = new SodaMachineLogic(da);

            var(_, expected, _) = da.MachineInfo;
            decimal actual = logic.EmptyMoneyFromMachine();

            Assert.Equal(expected, actual);

            expected       = 0;
            (_, actual, _) = da.MachineInfo;

            Assert.Equal(expected, actual);
        }
Esempio n. 14
0
        public void MoneyInsert_User2ShouldHaveCorrectAmount()
        {
            MockDataAccess   da         = new MockDataAccess();
            SodaMachineLogic logic      = new SodaMachineLogic(da);
            string           user1      = "test";
            string           user2      = "fred";
            decimal          money      = 0.25M;
            decimal          user2Money = 0.1M;

            logic.MoneyInserted(user1, money);
            logic.MoneyInserted(user2, user2Money);
            logic.MoneyInserted(user1, money);

            decimal expected = user2Money;
            decimal actual   = da.UserCredit[user2];

            Assert.Equal(expected, actual);
        }
Esempio n. 15
0
        public void MoneyInsert_SingleUserShouldHaveCorrectAmount()
        {
            MockDataAccess   da    = new MockDataAccess();
            SodaMachineLogic logic = new SodaMachineLogic(da);
            string           user  = "******";
            decimal          money = 0.25M;

            logic.MoneyInserted(user, money);

            decimal expected = money;
            decimal actual   = da.UserCredit[user];

            Assert.Equal(expected, actual);

            logic.MoneyInserted(user, money);

            expected += money;
            actual    = da.UserCredit[user];

            Assert.Equal(expected, actual);
        }
Esempio n. 16
0
        public void AddToSodaInventory_ShouldWork()
        {
            MockDataAccess   da    = new MockDataAccess();
            SodaMachineLogic logic = new SodaMachineLogic(da);

            List <SodaModel> sodas = new List <SodaModel>
            {
                new SodaModel {
                    Name = "Coke", SlotOccupied = "1"
                },
                new SodaModel {
                    Name = "Coke", SlotOccupied = "1"
                },
            };

            logic.AddToSodaInventory(sodas);

            int expected = 7;
            int actual   = da.SodaInventory.Where(x => x.Name == "Coke").Count();

            Assert.Equal(expected, actual);
        }
Esempio n. 17
0
        static void Main()
        {
            ConfigureServices();
            SodaMachineLogic   sodaMachineLogic   = ActivatorUtilities.CreateInstance <SodaMachineLogic>(ServiceProvider);
            Menu               menu               = new Menu();
            SodaMachineDisplay sodaMachineDisplay = new SodaMachineDisplay();

            string userId = "user12";

            while (true)
            {
                menu.PrintMenu();
                string userChoice = Console.ReadLine();
                Console.WriteLine();

                switch (userChoice)
                {
                case "1":
                    sodaMachineDisplay.PrintTypesOfSoda(sodaMachineLogic.ListTypesOfSoda());
                    break;

                case "2":
                    sodaMachineDisplay.PrintSodaInStock(sodaMachineLogic.GetSodaInventory());
                    break;

                case "3":
                    sodaMachineDisplay.PrintSodaPrice(sodaMachineLogic.GetSodaPrice());
                    break;

                case "4":
                    sodaMachineDisplay.PrintInsertMoneyChoice(sodaMachineLogic.AcceptedCoinValues);
                    string userMoneyInput = Console.ReadLine();

                    if (decimal.TryParse(userMoneyInput, out decimal moneyResult))
                    {
                        decimal moneyInserted = sodaMachineLogic.MoneyInserted(userId, moneyResult);

                        if (moneyInserted != 0)
                        {
                            sodaMachineDisplay.PrintAmountInserted(moneyInserted);
                        }
                    }
                    else
                    {
                        Console.WriteLine("Invalid currency");
                    }

                    break;

                case "5":
                    sodaMachineDisplay.PrintAmountInserted(sodaMachineLogic.GetMoneyInsertedTotal(userId));
                    break;

                case "6":
                    List <SodaModel> availableSodas = sodaMachineLogic.ListTypesOfSoda();
                    sodaMachineDisplay.PrintSodaToBuyChoice(availableSodas);
                    string userSodaInput = Console.ReadLine();

                    if (int.TryParse(userSodaInput, out int sodaResult))
                    {
                        if (sodaResult >= 0 && sodaResult < availableSodas.Count)
                        {
                            SodaModel sodaInput = availableSodas[sodaResult];
                            var(soda, coins, message) = sodaMachineLogic.RequestSoda(sodaInput);

                            if (string.IsNullOrEmpty(soda.Name))
                            {
                                Console.WriteLine(message);
                            }
                            else
                            {
                                if (coins.Count > 0)
                                {
                                    decimal change = 0;

                                    foreach (CoinModel coin in coins)
                                    {
                                        change += coin.Amount;
                                    }

                                    Console.WriteLine($"returned { change }");
                                }

                                sodaMachineDisplay.PrintSuccessMessage(soda);
                            }
                        }
                        else
                        {
                            Console.WriteLine("Invalid soda choice");
                        }
                    }
                    else
                    {
                        Console.WriteLine("Invalid soda choice");
                    }

                    break;

                case "7":
                    decimal refund = sodaMachineLogic.IssueFullRefund(userId);
                    sodaMachineDisplay.PrintRefundAmount(refund);
                    break;

                default:
                    Console.WriteLine("Invalid Choice");
                    break;
                }
            }
        }
Esempio n. 18
0
 public void Setup()
 {
     mockDataAccess   = new MockDataAccess();
     sodaMachineLogic = new SodaMachineLogic(mockDataAccess);
 }