public async Task Return_OK_Status_Code_When_Successful()
        {
            var databaseName = nameof(Return_OK_Status_Code_When_Successful);

            var options = CashRegisterService_Utilities.GetOptions(databaseName);

            // Arrange
            var context = new CashRegisterContext(options);

            var banknote = new Banknotes()
            {
                Fifty = 1,
                One   = 1,
            };

            context.Banknotes.Add(banknote);

            context.SaveChanges();


            var sut = new CashRegisterService(context);

            var withdrawAmount = 51;
            var response       = await sut.HandleCashWithdraw(withdrawAmount);

            Assert.IsTrue(response.StatusCode == 200);
        }
        public async Task Update_Database_With_Withdrawn_Banknotes()
        {
            var databaseName = nameof(Update_Database_With_Withdrawn_Banknotes);

            var options = CashRegisterService_Utilities.GetOptions(databaseName);

            // Arrange
            var context = new CashRegisterContext(options);

            var banknote = new Banknotes()
            {
                Fifty = 1,
                One   = 1,
            };

            context.Banknotes.Add(banknote);

            context.SaveChanges();


            // Act
            var sut = new CashRegisterService(context);

            var withdrawAmount = 51;
            var response       = await sut.HandleCashWithdraw(withdrawAmount);

            // Assert
            using (var actAndAssertContext = new CashRegisterContext(options))
            {
                Assert.IsTrue(actAndAssertContext.Banknotes.FirstOrDefault().Fifty == 0);
                Assert.IsTrue(actAndAssertContext.Banknotes.FirstOrDefault().One == 0);
            };
        }
        public async Task Return_Model_With_Withdrawn_Banknotes()
        {
            var databaseName = nameof(Return_Model_With_Withdrawn_Banknotes);

            var options = CashRegisterService_Utilities.GetOptions(databaseName);

            // Arrange
            var context = new CashRegisterContext(options);

            var banknote = new Banknotes()
            {
                Fifty = 1,
                One   = 1,
            };

            context.Banknotes.Add(banknote);

            context.SaveChanges();


            var sut = new CashRegisterService(context);

            var withdrawAmount = 51;
            var response       = await sut.HandleCashWithdraw(withdrawAmount);

            Assert.IsNotNull(response.Model);
        }
        public async Task Return_Failure_Message_When_Banknotes_Cannot_Fulfil_Withdraw()
        {
            var databaseName = nameof(Return_Failure_Message_When_Banknotes_Cannot_Fulfil_Withdraw);

            var options = CashRegisterService_Utilities.GetOptions(databaseName);

            // Arrange
            var context = new CashRegisterContext(options);

            var banknote = new Banknotes()
            {
                Fifty = 1,
                One   = 1,
            };

            context.Banknotes.Add(banknote);

            context.SaveChanges();


            var sut = new CashRegisterService(context);

            var withdrawAmount = 41;
            var response       = await sut.HandleCashWithdraw(withdrawAmount);

            Assert.IsTrue(response.Message == Messages.BanknotesCannotFulfilPayment);
        }
Пример #5
0
 public void CanTrackBanknotes()
 {
     foreach (var b in Banknotes)
     {
         var remains = Banknotes.Where(bb => bb != b).ToList();
         Refill(1).Withdraw(b).AvailableBanknotes().OrderBy(e => e).Should().Equal(remains.OrderBy(e => e));
     }
 }
Пример #6
0
        public void CanRefill(int initQty)
        {
            if (Acceptable(initQty))
            {
                AtmClient atm = Refill(initQty);

                // Amount should be valid after refill
                atm.AvailableAmount().Should().Be(Total(initQty));

                // Banknotes should match what has been refilled
                atm.AvailableBanknotes().OrderBy(b => b).Should().Equal(Banknotes.OrderBy(b => b));
            }
        }
Пример #7
0
        public static CashRegisterContext FillContextWithUserData(DbContextOptions <CashRegisterContext> options)
        {
            var context = new CashRegisterContext(options);

            var banknote = new Banknotes()
            {
                Fifty  = 1,
                Twenty = 1,
                Ten    = 1,
                Five   = 1,
                Two    = 1,
                One    = 1
            };

            context.Banknotes.Add(banknote);

            context.SaveChanges();

            return(context);
        }
Пример #8
0
 private static int Total(int qty)
 {
     return(Banknotes.Select(b => b * qty).Sum());
 }