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