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 Result Add(SharedFund sharedFund)
        {
            _sharedFundRepository.Setup(s => s.Insert(sharedFund));
            _sharedFundAppService =
                new SharedFundAppService(_sharedFundRepository.Object,
                                         _inflationAdjustService.Object, _employeeService.Object);

            return(_sharedFundAppService.Add(sharedFund));
        }
        public void SharedFundAppService_GetBalance()
        {
            const int     employeeId  = 1;
            const decimal balance     = 560M;
            var           sharedFunds = new List <SharedFund> {
                GenerateSharedFund()
            };

            _sharedFundRepository.Setup(s => s.GetByEmployeeId(employeeId)).Returns(sharedFunds);
            _inflationAdjustService.Setup(i => i.InflationAdjustment(sharedFunds)).Returns(balance);

            _sharedFundAppService = new SharedFundAppService(_sharedFundRepository.Object,
                                                             _inflationAdjustService.Object, _employeeService.Object);

            var result = _sharedFundAppService.GetBalance(employeeId);

            Assert.NotNull(result);
            Assert.NotNull(result.Return);
            Assert.False(result.MessageErrors.Any());
            Assert.False(result.ValidationErrors.Any());
            Assert.Equal(balance, result.Return.ToDecimal());
        }
 public SharedFundController(ISharedFundAppService sharedFundAppService)
 {
     _sharedFundAppService = sharedFundAppService;
 }