def test_total_taxable_income_income_over_personal_allowance_3(self): t = TaxYear(2018) self.assertEqual(1.00, t.get_taxable_income(11851))
def test_total_taxable_income_income_over_personal_allowance_4(self): t = TaxYear(2018) self.assertEqual(31650.00, t.get_taxable_income(43500))
def test_load_tax_year_non_existent(self): with self.assertRaises(UnknownTaxYearException): TaxYear.load_tax_year_data(2016)
def test_total_taxable_income_income_over_personal_allowance_2(self): t = TaxYear(2017) self.assertEqual(20001, t.get_taxable_income(31501))
def test_tax_calculation_first_rate_band_2(self): t = TaxYear(2018) self.assertEqual(0.19, t.get_total_tax_due(gross_income=11851))
if __name__ == "__main__": arg_parser = argparse.ArgumentParser('Calculate Income Tax') arg_parser.add_argument('tax_year', metavar="TAX_YEAR", type=int, help="Tax Yar to calculate Income Tax for") arg_parser.add_argument('gross_income', metavar="GROSS_INCOME", type=float, help="Gross Income") args = arg_parser.parse_args() # Set the path to our data TaxYear.set_data_file( os.path.join(os.path.dirname(os.path.realpath(__file__)), 'data/rates.json')) # Create our TaxYear instance based on user input try: t = TaxYear(args.tax_year) except NoTaxYearSuppliedException: print("Not Tax Year was supplied - please try again.") exit(1) except UnknownTaxYearException: print("The supplied Tax Year '{}' is not known.".format(args.tax_year)) exit(2) # Print out our calculation t.print_calculation(gross_income=args.gross_income)
def test_tax_year_rates_2(self): t = TaxYear(2018) self.assertEqual(5, len(t.get_tax_rates()))
def test_tax_calculation_below_personal_allowance_2(self): t = TaxYear(2018) self.assertEqual(0, t.get_total_tax_due(11849))
def test_tax_year_name(self): t = TaxYear(2017) self.assertEqual('2017-2018', t.get_name())
def test_tax_year_rates_1(self): t = TaxYear(2017) self.assertEqual(2, len(t.get_tax_rates()))
def test_constructor_known_tax_year(self): self.assertIsInstance(TaxYear(2017), TaxYear)
def test_constructor_no_tax_year(self): with self.assertRaises(NoTaxYearSuppliedException): TaxYear(year_key=None)
def test_load_tax_year_exists(self): self.assertIsInstance(TaxYear.load_tax_year_data(2017), dict)
def setUpClass(cls) -> None: TaxYear.set_data_file(cls._simple_test_data_path)
def test_personal_allowance_1(self): t = TaxYear(2017) self.assertEqual(11500.00, t.get_personal_allowance())
def test_tax_calculation_below_personal_allowance_1(self): t = TaxYear(2017) self.assertEqual(0, t.get_total_tax_due(gross_income=11499))
def test_personal_allowance_2(self): t = TaxYear(2018) self.assertEqual(11850.00, t.get_personal_allowance())
def test_tax_calculation_first_rate_band_1(self): t = TaxYear(2017) self.assertEqual(0.20, t.get_total_tax_due(gross_income=11501))
def test_total_taxable_income_zero_income(self): t = TaxYear(2017) self.assertEqual(0, t.get_taxable_income(0))
def test_tax_calculation_second_rate_band_1(self): t = TaxYear(2018) self.assertEqual(14150, t.get_taxable_income(gross_income=26000)) self.assertEqual(2829.59, t.get_total_tax_due(gross_income=26000))
def test_total_taxable_income_income_equals_personal_allowance(self): t = TaxYear(2017) self.assertEqual(0, t.get_taxable_income(11500))
def test_data_file_does_not_exist(self): with self.assertRaises(DataFileNotFoundException): TaxYear.set_data_file(TestTaxYearBadDataPath._non_existent_test_data_path)
def test_no_data_file_specified(self): with self.assertRaises(DataFileNotSpecifiedException): TaxYear.load_tax_year_data(2016)