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);
        }