示例#1
0
        public void TestWithdrawMoneyNotMultipleAmountThrows(int amount, PaperNote minNote)
        {
            //Arrange
            var allCash = new Money
            {
                Amount = 240000,
                Notes  = new Dictionary <PaperNote, int>
                {
                    { PaperNote.Twenty, 2000 },
                    { PaperNote.Fifty, 4000 }
                }
            };

            _cashProcessor.Cash.Returns(allCash);
            _cashProcessor.MinDenomination().Returns(minNote);

            //Act
            Assert.Throws <AmountIsNotMultipleException>(() => _atMachine.WithdrawMoney(amount));

            //Assert
            _cardProcessor.DidNotReceive().GetCardBalance();
            _cardProcessor.DidNotReceiveWithAnyArgs().BlockAmount(Arg.Any <int>());
            _cashProcessor.DidNotReceiveWithAnyArgs().WithdrawMoney(Arg.Any <int>());
            _cardProcessor.DidNotReceiveWithAnyArgs().WithdrawFromBlocked(Arg.Any <Guid>());
        }
        public void Given_manyVariationsAvailable_When_Dispense_Then_shouldUseHighestPossibleValuePaperNotes()
        {
            // Given
            var fifty  = new PaperNote(50);
            var twenty = new PaperNote(20);
            var ten    = new PaperNote(10);
            var money  = new Money
            {
                Notes = new Dictionary <PaperNote, int>
                {
                    { fifty, 5 },
                    { twenty, 3 },
                    { ten, 20 }
                }
            };
            var amountToDispense = 120;

            GetMock <IThisATMachineState>().Setup(x => x.AvailableMoney).Returns(money);

            // When
            var result = ClassUnderTest.Dispense(amountToDispense);

            // Then
            Assert.AreEqual(120, result.Amount);
            Assert.AreEqual(2, result.Notes.Count);
            Assert.AreEqual(2, result.Notes[fifty]);
            Assert.AreEqual(1, result.Notes[twenty]);
        }
        public void Given_cantUseHighestValueNotes_When_Dispense_Then_shouldReturnCorrectAmountsOfPaperNotes()
        {
            // Given
            var fifty  = new PaperNote(50);
            var twenty = new PaperNote(20);
            var money  = new Money
            {
                Notes = new Dictionary <PaperNote, int>
                {
                    { fifty, 1 },
                    { twenty, 3 }
                }
            };
            var amountToDispense = 60;

            GetMock <IThisATMachineState>().Setup(x => x.AvailableMoney).Returns(money);

            // When
            var result = ClassUnderTest.Dispense(amountToDispense);

            // Then
            Assert.AreEqual(60, result.Amount);
            Assert.AreEqual(1, result.Notes.Count);
            Assert.AreEqual(3, result.Notes[twenty]);
        }
示例#4
0
        public void Given_paperNote_When_GetHashCode_Then_hashCodeIsFaceValue()
        {
            // Given
            var paperNote = new PaperNote(10);

            // When
            var result = paperNote.GetHashCode();

            // Then
            Assert.AreEqual(paperNote.FaceValue, result);
        }
示例#5
0
        public void Given_twoPaperNotesWithSameFaceValue_When_Equals_Then_shouldReturnTrue()
        {
            // Given
            var paperNoteOne = new PaperNote(5);
            var paperNoteTwo = new PaperNote(5);

            // When
            var result = paperNoteOne.Equals(paperNoteTwo);

            // Then
            Assert.IsTrue(result);
        }
示例#6
0
        public void Given_twoPaperNotesWithDifferentFaceValues_When_Equals_Then_shouldReturnFalse()
        {
            // Given
            var paperNoteOne = new PaperNote(5);
            var paperNoteTwo = new PaperNote(10);

            // When
            var result = paperNoteOne.Equals(paperNoteTwo);

            // Then
            Assert.IsFalse(result);
        }
示例#7
0
        public void TestMinDenomination(int fiveAmount, int tenAmount, int twentyAmount, int fiftyAmount, PaperNote expected)
        {
            //Arrange
            var money = new Money()
            {
                Amount = fiveAmount * 5 + tenAmount * 10 + twentyAmount * 20 + fiftyAmount * 50,
                Notes  = new Dictionary <PaperNote, int>
                {
                    { PaperNote.Five, fiveAmount },
                    { PaperNote.Ten, tenAmount },
                    { PaperNote.Twenty, twentyAmount },
                    { PaperNote.Fifty, fiftyAmount }
                }
            };

            _cashProcessor.LoadMoney(money);

            //Act
            var result = _cashProcessor.MinDenomination();

            //Assert

            Assert.Equal(expected, result);
        }