Esempio n. 1
0
        static void Main(string[] args)
        {
            Policy policy = new PolicyA();

            policy.PolicyNumber       = string.Empty;
            policy.MemberShip         = true;
            policy.StartDate          = new DateTime(1986, 6, 1);
            policy.Premiums           = 10000m;
            policy.DiscretionaryBonus = 1000m;
            policy.PercentageUplift   = 40;
            policy.GetNetPremium();
            policy.GetBonusValue();
            policy.GetPremiumUplift();
            policy.GetMaturityPayout();

            //you've created a json string in memory but you need to do something with it
            string path = "";

            path = System.AppContext.BaseDirectory;
            string jsonOutPut = JsonSerializer.Serialize(policy);

            System.IO.File.WriteAllText(path + @"\jsonFile.json", jsonOutPut);
            //clue
            //https://docs.microsoft.com/en-us/dotnet/standard/serialization/system-text-json-how-to?pivots=dotnet-5-0
        }
Esempio n. 2
0
        public IPolicy SellPolicy(string nameOfInsuredObject, DateTime validFrom, short validMonths, IList <Risk> selectedRisks)
        {
            if (string.IsNullOrEmpty(nameOfInsuredObject))
            {
                throw new ArgumentNullException(nameof(nameOfInsuredObject));
            }

            DateTime validTill     = validFrom.AddMonths(validMonths);
            bool     isPolicyExist = IsPolicyExist(nameOfInsuredObject, validFrom, validTill);

            if (isPolicyExist)
            {
                throw new PolicyUniqueNameException("Insured object is not unique in the given period.");
            }

            if (validFrom.Date < DateTime.UtcNow.Date)
            {
                throw new PolicyStartDateException("Policy start can not be in the past");
            }

            // In real life, following codes would be usually calling another service/repository
            PolicyA policy = new PolicyA()
            {
                InsuredRisks        = selectedRisks,
                NameOfInsuredObject = nameOfInsuredObject,
                ValidFrom           = validFrom,
                ValidTill           = validTill
            };

            return(policy);
        }
Esempio n. 3
0
        public void PolicyAPayout()
        {
            String     myline        = "A100003,01/06/1986,10000,Y,1000,40";
            PolicyData NewPolicyData = new PolicyData(myline);
            Policy     policy        = new PolicyA(NewPolicyData);

            Assert.Equal(14980m, policy.GetMaturityPayout());
        }
Esempio n. 4
0
        public void PolicyAUpliftOnly()
        {
            String     myline        = "A100003,01/06/1986,10000,Y,1000,40";
            PolicyData NewPolicyData = new PolicyData(myline);
            Policy     policy        = new PolicyA(NewPolicyData);

            Assert.Equal((decimal)1.4, (decimal)policy.GetPremiumUplift());
        }
Esempio n. 5
0
        public void PolicyAWithoutDescretionaryBonusTest()
        {
            String     myline        = "A100003,01/01/1990,10000,N,1000,45";
            PolicyData NewPolicyData = new PolicyData(myline);
            Policy     policy        = new PolicyA(NewPolicyData);

            Assert.Equal(0, policy.GetBonusValue());
        }
Esempio n. 6
0
        public void PolicyAWithDiscretionaryBonusOnly()
        {
            String     myline        = "A100003,20/07/1969,10000,Y,1000,45";
            PolicyData NewPolicyData = new PolicyData(myline);
            Policy     policy        = new PolicyA(NewPolicyData);

            Assert.Equal(1000m, policy.GetBonusValue());
        }
Esempio n. 7
0
        public void PolicyANetPremiumOnly()
        {
            String     myline        = "A100003,20/07/1969,10000,Y,4000,45";
            PolicyData NewPolicyData = new PolicyData(myline);
            Policy     policy        = new PolicyA(NewPolicyData);

            Assert.Equal(9700m, policy.GetNetPremium());
        }
Esempio n. 8
0
        public static PolicyA Build(DateTime validFrom, DateTime validTill, List <Risk> insuredRisks, string nameOfInsuredObject = "insurance")
        {
            PolicyA policy = new PolicyA()
            {
                NameOfInsuredObject = nameOfInsuredObject,
                ValidFrom           = validFrom,
                ValidTill           = validTill,
                InsuredRisks        = insuredRisks
            };

            return(policy);
        }
Esempio n. 9
0
        public void CalculatePremium_NoRisk_ReturnsZero()
        {
            // arrange
            DateTime    validFrom             = DateTime.UtcNow;
            DateTime    validTill             = DateTime.UtcNow.AddYears(1);
            string      nameOfInsuranceObject = "nameOfInsuranceObject";
            List <Risk> risks           = null;
            PolicyA     policy          = PolicyABuilder.Build(validFrom, validTill, risks, nameOfInsuranceObject);
            decimal     expectedPremium = 0;

            // assert
            policy.Premium.Should().Be(expectedPremium);
        }
Esempio n. 10
0
        public void ExportPolicyData()
        {
            Policy policy = new PolicyA();

            policy.PolicyNumber       = string.Empty;
            policy.MemberShip         = true;
            policy.StartDate          = new DateTime(1986, 6, 1);
            policy.Premiums           = 10000m;
            policy.DiscretionaryBonus = 1000m;
            policy.PercentageUplift   = 40;
            policy.ManagementFee      = 3;
            policy.GetNetPremium();
            policy.GetBonusValue();
            policy.GetPremiumUplift();
            policy.GetMaturityPayout();
        }
Esempio n. 11
0
        public void RemoveRisk_ArgsAreValid_Success()
        {
            // arrange
            string   nameOfInsuranceObject = "name";
            Risk     risk          = RiskBuilder.Build("Risk 1", 100);
            DateTime validFrom     = DateTime.UtcNow;
            DateTime effectiveDate = DateTime.UtcNow;
            PolicyA  policy        = PolicyABuilder.Build(validFrom, effectiveDate, insuranceCompanyService.AvailableRisks.ToList(), nameOfInsuranceObject);

            policyService.GetPolicy(nameOfInsuranceObject, effectiveDate).Returns(policy);
            int expectedRiskCount = insuranceCompanyService.AvailableRisks.Count - 1;

            // act
            insuranceCompanyService.RemoveRisk(nameOfInsuranceObject, risk, validFrom, effectiveDate);

            // assert
            policy.InsuredRisks.Count.Should().Be(expectedRiskCount);
            policy.InsuredRisks.Contains(risk).Should().BeFalse();
        }
Esempio n. 12
0
        public void AddRisk_ArgsAreValid_Success()
        {
            // arrange
            string   nameOfInsuranceObject = "Policy 1";
            Risk     newRisk       = RiskBuilder.Build("Risk 1", 100);
            DateTime validFrom     = DateTime.UtcNow;
            DateTime effectiveDate = DateTime.UtcNow;
            PolicyA  policy        = PolicyABuilder.Build(validFrom, effectiveDate, insuranceCompanyService.AvailableRisks.ToList());

            policyService.GetPolicy(nameOfInsuranceObject, effectiveDate).Returns(policy);
            int expectedCountOfRisk = insuranceCompanyService.AvailableRisks.Count + 1;

            // act
            insuranceCompanyService.AddRisk(nameOfInsuranceObject, newRisk, validFrom, effectiveDate);

            // assert
            policy.InsuredRisks.Count.Should().Be(expectedCountOfRisk);
            policy.InsuredRisks.Should().Contain(newRisk);
        }
Esempio n. 13
0
        public void CalculatePremium_ReturnsSumOfRiskYearlyPrice()
        {
            // arrange
            DateTime    validFrom             = DateTime.UtcNow;
            DateTime    validTill             = DateTime.UtcNow.AddYears(1);
            string      nameOfInsuranceObject = "nameOfInsuranceObject";
            List <Risk> risks = new List <Risk>()
            {
                new Risk()
                {
                    Name = "Risk 1", YearlyPrice = 100
                },
                new Risk()
                {
                    Name = "Risk 2", YearlyPrice = 100
                }
            };
            PolicyA policy          = PolicyABuilder.Build(validFrom, validTill, risks, nameOfInsuranceObject);
            decimal expectedPremium = 200;

            // assert
            policy.Premium.Should().Be(expectedPremium);
        }
Esempio n. 14
0
        public void SellPolicy_ArgsOk_ReturnsPolicy(string nameOfInsuranceObject, DateTime validFrom, short validMonths)
        {
            // arrange
            List <Risk> selectedRisks = new List <Risk>()
            {
                new Risk()
                {
                    Name        = "Risk",
                    YearlyPrice = 100
                }
            };
            DateTime expectedValidTill = validFrom.AddMonths(validMonths);
            PolicyA  policy            = PolicyABuilder.Build(validFrom, expectedValidTill, insuranceCompanyService.AvailableRisks.ToList(), nameOfInsuranceObject);

            policyService.SellPolicy(nameOfInsuranceObject, validFrom, validMonths, selectedRisks).Returns(policy);

            // act
            var result = insuranceCompanyService.SellPolicy(nameOfInsuranceObject, validFrom, validMonths, selectedRisks);

            // assert
            // it would be better if I have a chance to mock it
            result.Should().NotBeNull();
            result.Should().BeEquivalentTo(policy);
        }