Пример #1
0
        public void CalcEngineTests_NullCalcRules_ShouldReturnOriginalAmount()
        {
            CalcEngine    calcEngine = new CalcEngine();
            const decimal baseAmount = 250.00m;

            decimal newAmount = calcEngine.GenerateCostEstimate(baseAmount, null);

            Assert.AreEqual(baseAmount, newAmount);
        }
Пример #2
0
        private void GenerateEstimates(List <Person> allIndividuals)
        {
            var calcEngine = new CalcEngine();

            allIndividuals.ForEach(ai =>
            {
                var calcRules = RuleFactory.BuildCalcRules(ai);
                ai.BenefitDetail.AmountPerYear = calcEngine.GenerateCostEstimate(ai.BenefitDetail.BaseAmount, calcRules);
            });
        }
Пример #3
0
        public void CalcEngineTests_SimpleDiscountPercentage_AssertCalculationIsCorrect()
        {
            CalcEngine    calcEngine      = new CalcEngine();
            const decimal baseAmount      = 250.00m;
            const decimal discountPercent = .20m;

            ICalcRule discountRule = CreateCalcRule(CalcRuleType.Discount, CalcAmountType.Percentage, discountPercent, 1);

            decimal newAmount = calcEngine.GenerateCostEstimate(baseAmount, new List <ICalcRule>()
            {
                discountRule
            });

            Assert.AreEqual(baseAmount - (baseAmount * discountPercent), newAmount);
        }
Пример #4
0
        public void CalcEngineTests_SimplePercentagetFee_AssertCalculationIsCorrect()
        {
            CalcEngine    calcEngine = new CalcEngine();
            const decimal baseAmount = 250.00m;
            const decimal feeAmount  = .50m;

            ICalcRule feeRule = CreateCalcRule(CalcRuleType.Fee, CalcAmountType.Percentage, feeAmount, 1);

            var calcCheckAmount = baseAmount + (baseAmount * feeAmount);

            decimal newAmount = calcEngine.GenerateCostEstimate(baseAmount, new List <ICalcRule>()
            {
                feeRule
            });

            Assert.AreEqual(calcCheckAmount, newAmount);
        }
Пример #5
0
        public void CalcEngineTests_FeeAfterDiscount_AssertCalculationIsCorrect()
        {
            CalcEngine    calcEngine         = new CalcEngine();
            const decimal baseAmount         = 250.00m;
            const decimal discountPercentage = 50m;
            const decimal feeAmount          = 100m;

            ICalcRule discountRule = CreateCalcRule(CalcRuleType.Discount, CalcAmountType.Percentage, discountPercentage, 1);
            ICalcRule feeRule      = CreateCalcRule(CalcRuleType.Fee, CalcAmountType.Flat, feeAmount, 2);

            var afterFirstRule  = baseAmount - (baseAmount * discountPercentage);
            var calcCheckAmount = afterFirstRule + feeAmount;

            decimal newAmount = calcEngine.GenerateCostEstimate(baseAmount, new List <ICalcRule>()
            {
                discountRule, feeRule
            });

            Assert.AreEqual(calcCheckAmount, newAmount);
        }
Пример #6
0
        public void CalcEngineTests_MultipleFees_AssertCalculationIsCorrect()
        {
            CalcEngine    calcEngine       = new CalcEngine();
            const decimal baseAmount       = 250.00m;
            const decimal feeAmountOne     = 50m;
            const decimal feePercentageTwo = .50m;

            ICalcRule feeRule    = CreateCalcRule(CalcRuleType.Fee, CalcAmountType.Flat, feeAmountOne, 1);
            ICalcRule feeRuleTwo = CreateCalcRule(CalcRuleType.Fee, CalcAmountType.Percentage, feePercentageTwo, 2);

            var afterFirstRule  = baseAmount + feeAmountOne;
            var calcCheckAmount = afterFirstRule + (afterFirstRule * feePercentageTwo);

            decimal newAmount = calcEngine.GenerateCostEstimate(baseAmount, new List <ICalcRule>()
            {
                feeRule, feeRuleTwo
            });

            Assert.AreEqual(calcCheckAmount, newAmount);
        }
Пример #7
0
        public void CalcEngineTests_MultipleDiscountPercentageAndFlat_AssertCalculationIsCorrect()
        {
            CalcEngine    calcEngine         = new CalcEngine();
            const decimal baseAmount         = 250.00m;
            const decimal discountPercentOne = .20m;
            const decimal discountFlatAmount = 75m;

            ICalcRule discountRuleOne = CreateCalcRule(CalcRuleType.Discount, CalcAmountType.Percentage, discountPercentOne, 1);
            ICalcRule discountRuleTwo = CreateCalcRule(CalcRuleType.Discount, CalcAmountType.Flat, discountFlatAmount, 2);

            decimal calcCheckAmount = baseAmount - (baseAmount * discountPercentOne);

            calcCheckAmount -= discountFlatAmount;

            decimal newAmount = calcEngine.GenerateCostEstimate(baseAmount, new List <ICalcRule>()
            {
                discountRuleOne, discountRuleTwo
            });

            Assert.AreEqual(calcCheckAmount, newAmount);
        }