Esempio n. 1
0
        /// <summary>
        /// Calculate the maturity value for policy.
        /// </summary>
        /// <param name="policyDetails"></param>
        /// <param name="managementFee"></param>
        /// <returns>List of maturity details</returns>
        public List <MaturityDetail> Calculate(List <PolicyDetail> policyDetails, Dictionary <PolicyType, double> managementFee)
        {
            if (policyDetails == null || !policyDetails.Any())
            {
                // Throws a exception when maturity data's input are not available and we can log the exception here for future use.
                throw new ArgumentNullException("Maturity data's input are not available.");
            }

            List <MaturityDetail> output = new List <MaturityDetail>();

            policyDetails.ForEach(data =>
            {
                MaturityDetail result = new MaturityDetail();

                result.PolicyNumber = data.Id;

                // Method to verify the bonus applicable for the policy based on policy number, membership, policy start date.
                double bonus = ApplyDiscretionaryBonus(data.Type, data.Membership, data.PolicyStartDate, data.DiscretionaryBonus);

                // Calculating the maturity value for the policy.
                result.MaturityValue = CalculateMaturityValue(data.Premiums, managementFee[data.Type], data.UpliftPercentage, bonus);

                // Adding the maturity data to the list.
                output.Add(result);
            });

            return(output);
        }
        public void CalculateMaturity_WithOnePolicyDetailsTypeB_Verify_MaturityDetails()
        {
            var mockPolicyFactory      = new Mock <IPolicyFactory>();
            var mockFileReader         = new Mock <IFileReader>();
            var mockFileWriter         = new Mock <IFileWriter>();
            var mockMaturityCalculator = new Mock <IMaturityCalculator>();

            policyManagement = new PolicyManagement.Implementation.PolicyManagement(mockPolicyFactory.Object, mockFileReader.Object, mockFileWriter.Object);
            var policyDetails = new List <PolicyDetail>()
            {
                new PolicyDetail {
                    PolicyNumber = "B1000001", TotalPremiums = 2000, Membership = false
                }
            };
            var maturityDetail = new MaturityDetail {
                PolicyNumber = "B1000001", MaturityValue = 20000
            };

            mockPolicyFactory.Setup(policyFactory => policyFactory.Create("B")).Returns(mockMaturityCalculator.Object);
            mockMaturityCalculator.Setup(maturityCalculator => maturityCalculator.CalculateMaturity(It.IsAny <PolicyDetail>())).Returns(maturityDetail);

            var maturityDetails = policyManagement.GetMaturityDetails(policyDetails);

            Assert.IsNotNull(maturityDetails);
            Assert.AreEqual(1, maturityDetails.Count);
            Assert.AreEqual("B1000001", maturityDetails[0].PolicyNumber);
            Assert.AreEqual(20000, maturityDetails[0].MaturityValue);
        }
        public void CalculateMaturity_Calcualte_ThrowsException_Expect_ExceptionCaught()
        {
            var mockPolicyFactory      = new Mock <IPolicyFactory>();
            var mockMaturityCalculator = new Mock <IMaturityCalculator>();
            var mockFileReader         = new Mock <IFileReader>();
            var mockFileWriter         = new Mock <IFileWriter>();

            policyManagement = new PolicyManagement.Implementation.PolicyManagement(mockPolicyFactory.Object, mockFileReader.Object, mockFileWriter.Object);
            var policyDetails = new List <PolicyDetail>()
            {
                new PolicyDetail {
                    PolicyNumber = "B1000001", TotalPremiums = 2000, Membership = false
                }
            };
            var maturityDetail = new MaturityDetail {
                PolicyNumber = "B1000001", MaturityValue = 20000
            };

            mockPolicyFactory.Setup(policyFactory => policyFactory.Create("B")).Returns(mockMaturityCalculator.Object);
            mockMaturityCalculator.Setup(maturityCalculator => maturityCalculator.CalculateMaturity(It.IsAny <PolicyDetail>())).Throws(new Exception());

            var maturityDetails = policyManagement.GetMaturityDetails(policyDetails);
        }