public void SharedFundAppService_Withdraw() { const int employeeId = 1; const decimal balance = 560M; var sharedFunds = new List <SharedFund> { GenerateSharedFund() }; var ruleToWithdraw = RuleToWithdraw.GetRulesToWithdraw() .Where(r => r.MaxBalance >= balance) .OrderBy(r => r.MaxBalance) .FirstOrDefault(); var percentage = ruleToWithdraw.Limit / 100M; var limitValue = balance * percentage; var toWithdraw = ruleToWithdraw.FixedMoney + limitValue; List <string> messagesErrors; _employeeService.Setup(e => e.CheckIfItBirthday(employeeId, out messagesErrors)).Returns(true); _sharedFundRepository.Setup(s => s.GetByEmployeeId(employeeId)).Returns(sharedFunds); _inflationAdjustService.Setup(i => i.InflationAdjustment(sharedFunds)).Returns(balance); _sharedFundRepository.Setup(s => s.Insert(It.IsAny <SharedFund>())); _sharedFundAppService = new SharedFundAppService(_sharedFundRepository.Object, _inflationAdjustService.Object, _employeeService.Object); var result = _sharedFundAppService.Withdraw(employeeId); Assert.NotNull(result); Assert.NotNull(result.Return); Assert.False(result.MessageErrors.Any()); Assert.False(result.ValidationErrors.Any()); Assert.Equal(toWithdraw, result.Return.ToDecimal()); }
private static decimal ToWithdraw(decimal balance) { var ruleToWithdraw = RuleToWithdraw.GetRulesToWithdraw() .Where(r => r.MaxBalance >= balance) .OrderBy(r => r.MaxBalance) .FirstOrDefault(); var percentage = ruleToWithdraw.Limit / 100M; var limitValue = Math.Round(balance * percentage, 2); return(ruleToWithdraw.FixedMoney + limitValue); }