public void AddRisk(string nameOfInsuredObject, Risk risk, DateTime validFrom, DateTime effectiveDate) { if (validFrom < effectiveDate) { throw new RiskValidityPeriodException(); } var policyId = IdGenerator.ConstructPolicyId(nameOfInsuredObject, effectiveDate); var policyModel = _policyRepository.Get(policyId); if (validFrom > policyModel.ValidTill) { throw new RiskValidityPeriodException(); } if (policyModel.InsuredRisks.Contains(risk)) { throw new DuplicateRiskException(risk.Name); } var riskId = IdGenerator.ConstructRiskId(risk.Name, policyModel.NameOfInsuredObject, effectiveDate); var riskModel = new RiskModel { Name = risk.Name, ValidFrom = validFrom, PolicyEffectiveDate = effectiveDate, PolicyId = policyId, Id = riskId, ValidTill = policyModel.ValidTill, YearlyPrice = risk.YearlyPrice }; _riskRepository.Add(riskModel); }
public void RemoveRisk(string nameOfInsuredObject, Risk risk, DateTime validTill, DateTime effectiveDate) { var policyId = IdGenerator.ConstructPolicyId(nameOfInsuredObject, effectiveDate); var policyModel = _policyRepository.Get(policyId); if (validTill.Date > policyModel.ValidTill.Date) { throw new RiskRemovalDateException(); } var riskId = IdGenerator.ConstructRiskId(risk.Name, nameOfInsuredObject, effectiveDate); var riskModel = _riskRepository.Get(riskId); var updatedRiskModel = new RiskModel { Name = riskModel.Name, ValidFrom = riskModel.ValidFrom, PolicyEffectiveDate = riskModel.PolicyEffectiveDate, PolicyId = riskModel.PolicyId, Id = riskModel.Id, ValidTill = validTill, YearlyPrice = riskModel.YearlyPrice }; _riskRepository.Edit(updatedRiskModel); }
public void IdGenerator_ShouldCorrectlyGenerateRiskId() { var expectedRiskId = $"{DEFAULT_RISK_NAME}{DEFAULT_OBJECT_NAME}{DEFAULT_DATE.ToString()}"; var riskId = IdGenerator.ConstructRiskId(DEFAULT_RISK_NAME, DEFAULT_OBJECT_NAME, DEFAULT_DATE); Assert.AreEqual(expectedRiskId, riskId); }
public void IdGenerator_ShouldNotAllowGenerateRiskIdWithNullParentName() { Exception ex = Assert.Throws <CannotBeNullException>(() => IdGenerator.ConstructRiskId("Test risk", null, new DateTime(2020, 5, 5))); Assert.AreEqual("Argument 'parentName' can not be null.", ex.Message); }
public void InsuranceCompany_ShouldBeAbleToRemoveRiskFromExistingPolicy() { List <Risk> riskList = new List <Risk>(); riskList.Add(Risk1); riskList.Add(Risk2); var effectiveDate = DateTime.Now; var newValidTillDate = effectiveDate.AddMonths(1); Company.SellPolicy(DEFAULT_OBJECT_NAME, effectiveDate, 6, riskList); Company.RemoveRisk(DEFAULT_OBJECT_NAME, Risk2, newValidTillDate, effectiveDate); var riskId = IdGenerator.ConstructRiskId(Risk2.Name, DEFAULT_OBJECT_NAME, effectiveDate); var updatedRisk = RiskRepository.Get(riskId); Assert.AreEqual(newValidTillDate, updatedRisk.ValidTill); }
public IPolicy SellPolicy(IPolicy policy) { var policyId = IdGenerator.ConstructPolicyId(policy.NameOfInsuredObject, policy.ValidFrom); if (_policyRepository.Get(policyId) != null) { throw new DuplicatePolicyException(policy.NameOfInsuredObject, policy.ValidFrom); } var policyModel = new PolicyModel { Id = policyId, NameOfInsuredObject = policy.NameOfInsuredObject, ValidFrom = policy.ValidFrom, ValidTill = policy.ValidTill, InsuredRisks = policy.InsuredRisks, Premium = policy.Premium }; foreach (var risk in policy.InsuredRisks) { var riskId = IdGenerator.ConstructRiskId(risk.Name, policy.NameOfInsuredObject, policy.ValidFrom); var riskModel = new RiskModel { Name = risk.Name, ValidFrom = policy.ValidFrom, ValidTill = policy.ValidTill, PolicyEffectiveDate = policy.ValidFrom, PolicyId = policyId, Id = riskId, YearlyPrice = risk.YearlyPrice }; _riskRepository.Add(riskModel); } _policyRepository.Add(policyModel); return(policy); }
public void IdGenerator_ShouldThrowWithNullParentName() { Assert.That(() => IdGenerator.ConstructRiskId(DEFAULT_RISK_NAME, null, DEFAULT_DATE), Throws.Exception); }
public void IdGenerator_ShouldThrowWithNullRiskName() { Assert.That(() => IdGenerator.ConstructRiskId(null, DEFAULT_OBJECT_NAME, DEFAULT_DATE), Throws.Exception); }