コード例 #1
0
        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);
        }
コード例 #2
0
        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);
        }
コード例 #3
0
        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);
        }
コード例 #4
0
        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);
        }
コード例 #5
0
        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);
        }
コード例 #6
0
ファイル: PolicyService.cs プロジェクト: AleksBobrov/Homework
        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);
        }
コード例 #7
0
 public void IdGenerator_ShouldThrowWithNullParentName()
 {
     Assert.That(() =>
                 IdGenerator.ConstructRiskId(DEFAULT_RISK_NAME, null, DEFAULT_DATE),
                 Throws.Exception);
 }
コード例 #8
0
 public void IdGenerator_ShouldThrowWithNullRiskName()
 {
     Assert.That(() =>
                 IdGenerator.ConstructRiskId(null, DEFAULT_OBJECT_NAME, DEFAULT_DATE),
                 Throws.Exception);
 }