public async Task WithdrawAmount_FromDepositAccount_WhenAccountIsNotMatured_ShouldThrowException()
        {
            //Arrange
            Mock <IAccountRepository> sut = new Mock <IAccountRepository>();

            _accountRepo = sut.Object;
            var withdrawAmountRequest = new WithdrawAmountRequestDto
            {
                AccountId = 1,
                Amount    = 20
            };
            var savingsAccountSetting = new AccountTypeDetailDto
            {
                AccountId               = 1,
                AnnualInterestRate      = 2, //2% interest rate
                AccountType             = 2, //Deposit account
                DepositPeriodInDays     = 30,
                InterestPayingFrequency = 1, //Daily,
                AccountCreatedDate      = DateTime.Now.AddDays(-2)
            };

            sut.Setup(x => x.GetAccountSetting(1)).Returns(async() => savingsAccountSetting);
            var accountService = new AccountService(_accountRepo);

            //Act and Assert
            var ex = Assert.ThrowsAsync <Exception>(() => accountService.WithdrawAmount(withdrawAmountRequest));

            Assert.AreEqual("Deposit hasn't reached maturity", ex.Message);
        }
        public async Task WithdrawAmount_FromSavingsAccount_ShouldUpdate_Balance()
        {
            //Arrange
            Mock <IAccountRepository> sut = new Mock <IAccountRepository>();

            _accountRepo = sut.Object;
            var withdrawAmountRequest = new WithdrawAmountRequestDto
            {
                AccountId = 1,
                Amount    = 20
            };
            var expected = 10;
            var savingsAccountSetting = new AccountTypeDetailDto
            {
                AccountId               = 1,
                AnnualInterestRate      = 2, //2% interest rate
                AccountType             = 1, //Savings account
                DepositPeriodInDays     = 0,
                InterestPayingFrequency = 0
            };

            sut.Setup(x => x.GetAccountSetting(1)).Returns(async() => savingsAccountSetting);
            sut.Setup(x => x.WithdrawAmount(withdrawAmountRequest)).Returns(async() => expected);
            var accountService = new AccountService(_accountRepo);

            //Act
            var res = await accountService.WithdrawAmount(withdrawAmountRequest);

            //Act
            Microsoft.VisualStudio.TestTools.UnitTesting.Assert.AreEqual(expected, res);
        }