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_FlatValueIncomeTax_AboveMinimumWage_Success()
        {
            var taxCalculated = new FlatValueIncomeTax(postalCode: "7441", income: 200000);

            //Act
            var result = taxCalculated.CalculateFlatValueIncomeTax();

            //Assert

            Assert.IsTrue(result == 10000);
        }
        public void Calculate_FlatValueIncomeTax_UnderMinimumWage_Success()
        {
            var taxCalculated = new FlatValueIncomeTax(postalCode: "7441", income: 199999);

            //Act
            var result = taxCalculated.CalculateFlatValueIncomeTax();

            //Assert

            Assert.IsTrue(result == 9999.95);
        }