public bool CalculateIncomeTax(IncomeTaxDto incomeTaxDto)
        {
            var isSuccessful = false;

            try
            {
                if (string.IsNullOrEmpty(incomeTaxDto.PostalCode))
                {
                    return(isSuccessful);
                }

                if (incomeTaxDto.Income <= 0)
                {
                    return(isSuccessful);
                }

                if (incomeTaxDto.PostalCode == "7441" || incomeTaxDto.PostalCode == "1000")
                {
                    //Calculated Income Tax amount
                    var progressiveTaxLexel = ProgressiveTaxLevel(incomeTaxDto.Income);
                    var incomeTax           = new ProgressiveIncomeTax(incomeTaxDto.PostalCode, incomeTaxDto.Income);
                    incomeTax.CalculateProgressiveIncomeTax(progressiveTaxLexel);

                    //Save IncomeTax
                    var result = _incomeTaxRepository.CreateIncomeTax(incomeTax);
                    isSuccessful = result != null;
                    return(isSuccessful);
                }

                if (incomeTaxDto.PostalCode == "A100")
                {
                    var incomeTax = new FlatRateIncomeTax(incomeTaxDto.PostalCode, incomeTaxDto.Income);
                    incomeTax.CalculateFlatRateIncomeTax();

                    var result = _incomeTaxRepository.CreateIncomeTax(incomeTax);

                    isSuccessful = result != null;
                }

                if (incomeTaxDto.PostalCode == "7000")
                {
                    var incomeTax = new FlatValueIncomeTax(incomeTaxDto.PostalCode, incomeTaxDto.Income);
                    incomeTax.CalculateFlatValueIncomeTax();

                    var result = _incomeTaxRepository.CreateIncomeTax(incomeTax);

                    isSuccessful = result != null;
                }

                return(isSuccessful);
            }
            catch (Exception ex)
            {
                return(isSuccessful);
            }
        }
        public void Calculate_ProgressiveTax_Level6_Success()
        {
            //Arrange
            var taxCalculated       = new ProgressiveIncomeTax(postalCode: "7441", income: 400000);
            var progressiveTaxTotal = ProgressiveTaxLevelEnum.Level6;

            //Act
            var result = taxCalculated.CalculateProgressiveIncomeTax(progressiveTaxTotal);

            //Assert

            Assert.IsTrue(Math.Round(result, 2) == 117682.14);
        }
        public void Calculate_ProgressiveTax_Level5_Success()
        {
            //Arrange
            var taxCalculated       = new ProgressiveIncomeTax(postalCode: "7441", income: 200000);
            var progressiveTaxTotal = ProgressiveTaxLevelEnum.Level5;

            //Act
            var result = taxCalculated.CalculateProgressiveIncomeTax(progressiveTaxTotal);

            //Assert

            Assert.IsTrue(result == 51141.49);
        }