Beispiel #1
0
        static void Main(string[] args)
        {
            var withdrawalStrategy = new LargestBillsOnly();
            var inventory          = new AtmInventory();

            inventory.ResetInventory(AtmInventory.DefaultInventory());
            var atm            = new AtmMachine(withdrawalStrategy, inventory);
            var commandFactory = new CommandFactory();
            var done           = false;

            do
            {
                var input   = Console.ReadLine();
                var command = commandFactory.CreateCommand(input);

                if (command.IsExit)
                {
                    done = true;
                }
                else
                {
                    command.Execute(atm);
                }
            } while (done != true);
        }
Beispiel #2
0
        public void GivenAdequatelyStockedInventoryWhenWithdrawalIsMadeThenSuccessIsIndicated()
        {
            // Arrange
            IWithdrawalStrategy sut = new LargestBillsOnly();
            var amountToWithdraw    = 28;
            var atmInventoryMock    = new Mock <IAtmInventory>();

            atmInventoryMock.Setup(inv => inv.Withdraw(It.IsAny <IReadOnlyCashTransaction>())).Returns(true);

            // Act
            var actual = sut.Withdraw(amountToWithdraw, atmInventoryMock.Object);

            // Assert
            Assert.True(actual.IsSuccess, "Expecting a success response but instead got failure.");
            Assert.True(string.IsNullOrEmpty(actual.FailureReason), $"Expected empty or null instead {actual.FailureReason}");
            Assert.Equal <int>(amountToWithdraw, actual.Details.TotalAmount);
            Assert.Equal <int>(1, actual.Details.BillCount(UnitedStatesTender.TwentyDollar));
            Assert.Equal <int>(1, actual.Details.BillCount(UnitedStatesTender.FiveDollar));
            Assert.Equal <int>(3, actual.Details.BillCount(UnitedStatesTender.OneDollar));
        }
Beispiel #3
0
        public void GivenInAdequatelyStockedInventoryWhenWithdrawalIsMadeThenFailureIsIndicated()
        {
            // Arrange
            var expectedFailureReason = "insufficient funds";
            IWithdrawalStrategy sut   = new LargestBillsOnly();
            var amountToWithdraw      = 28;
            var atmInventoryMock      = new Mock <IAtmInventory>();

            atmInventoryMock.Setup(inv => inv.Withdraw(It.IsAny <IReadOnlyCashTransaction>())).Returns(false);

            // Act
            var actual = sut.Withdraw(amountToWithdraw, atmInventoryMock.Object);

            // Assert
            Assert.False(actual.IsSuccess, "Expecting a failure response but instead got success.");
            Assert.True((string.Compare(expectedFailureReason, actual.FailureReason, true) == 0), $"Expected '{expectedFailureReason}' actual '{actual.FailureReason}'");
            Assert.Equal <int>(amountToWithdraw, actual.Details.TotalAmount);
            Assert.Equal <int>(1, actual.Details.BillCount(UnitedStatesTender.TwentyDollar));
            Assert.Equal <int>(1, actual.Details.BillCount(UnitedStatesTender.FiveDollar));
            Assert.Equal <int>(3, actual.Details.BillCount(UnitedStatesTender.OneDollar));
        }