def test_read_json_param_with_suffixes_and_errors(): """ Test interaction of policy parameter suffixes and reform errors (fails without 0.10.2 bug fix as reported by Hank Doupe in PB PR#641) """ reform = { u'policy': { u'_II_brk4_separate': {u'2017': [5000.0]}, u'_STD_separate': {u'2017': [8000.0]}, u'_STD_single': {u'2018': [1000.0]}, u'_II_brk2_headhousehold': {u'2017': [1000.0]}, u'_II_brk4_single': {u'2017': [500.0]}, u'_STD_joint': {u'2017': [10000.0], u'2020': [150.0]}, u'_II_brk2_separate': {u'2017': [1000.0]}, u'_II_brk2_single': {u'2017': [1000.0]}, u'_II_brk2_joint': {u'2017': [1000.0]}, u'_FICA_ss_trt': {u'2017': [-1.0], u'2019': [0.1]}, u'_II_brk4_headhousehold': {u'2017': [500.0]}, u'_STD_headhousehold': {u'2017': [10000.0], u'2020': [150.0]}, u'_ID_Medical_frt': {u'2019': [0.06]}, u'_II_brk4_joint': {u'2017': [500.0]}, u'_ID_BenefitSurtax_Switch_medical': {u'2017': [True]} } } json_reform = json.dumps(reform) params = Calculator.read_json_param_objects(json_reform, None) assert isinstance(params, dict) pol = Policy() pol.ignore_reform_errors() pol.implement_reform(params['policy'], print_warnings=False, raise_errors=False) assert pol.parameter_errors assert pol.parameter_warnings
def test_validate_param_values_warnings_errors(): """ Check detection of out_of_range policy parameters in reforms. """ pol1 = Policy() ref1 = {2020: {'_ID_Medical_frt': [0.05]}} pol1.implement_reform(ref1, print_warnings=True, raise_errors=False) assert len(pol1.parameter_warnings) > 0 pol2 = Policy() ref2 = {2021: {'_ID_Charity_crt_all': [0.61]}} pol2.implement_reform(ref2, print_warnings=False, raise_errors=False) assert len(pol2.parameter_warnings) > 0 pol3 = Policy() ref3 = {2024: {'_II_brk4': [[0, 0, 0, 0, 0]]}} pol3.implement_reform(ref3, print_warnings=False, raise_errors=False) assert len(pol3.parameter_errors) > 0 pol4 = Policy() ref4 = {2024: {'_II_brk4': [[0, 9e9, 0, 0, 0]]}} pol4.implement_reform(ref4, print_warnings=False, raise_errors=False) assert len(pol4.parameter_errors) > 0 pol5 = Policy() pol5.ignore_reform_errors() ref5 = {2025: {'_ID_BenefitSurtax_Switch': [[False, True, 0, 1, 0, 1, 0]]}} pol5.implement_reform(ref5, print_warnings=False, raise_errors=False) assert len(pol5.parameter_errors) > 0 pol6 = Policy() ref6 = {2013: {'_STD': [[20000, 25000, 20000, 20000, 25000]]}} pol6.implement_reform(ref6, print_warnings=False, raise_errors=False) assert pol6.parameter_errors == '' assert pol6.parameter_warnings == ''
def test_read_json_param_with_suffixes_and_errors(): # test interaction of policy parameter suffixes and reform errors # (fails without 0.10.2 bug fix as reported by Hank Doupe in PB PR#641) reform = { u'policy': { u'_II_brk4_separate': {u'2017': [5000.0]}, u'_STD_separate': {u'2017': [8000.0]}, u'_STD_single': {u'2018': [1000.0]}, u'_II_brk2_headhousehold': {u'2017': [1000.0]}, u'_II_brk4_single': {u'2017': [500.0]}, u'_STD_joint': {u'2017': [10000.0], u'2020': [150.0]}, u'_II_brk2_separate': {u'2017': [1000.0]}, u'_II_brk2_single': {u'2017': [1000.0]}, u'_II_brk2_joint': {u'2017': [1000.0]}, u'_FICA_ss_trt': {u'2017': [-1.0], u'2019': [0.1]}, u'_II_brk4_headhousehold': {u'2017': [500.0]}, u'_STD_headhousehold': {u'2017': [10000.0], u'2020': [150.0]}, u'_ID_Medical_frt': {u'2019': [0.06]}, u'_II_brk4_joint': {u'2017': [500.0]}, u'_ID_BenefitSurtax_Switch_medical': {u'2017': [True]} } } json_reform = json.dumps(reform) params = Calculator.read_json_param_objects(json_reform, None) assert isinstance(params, dict) pol = Policy() pol.ignore_reform_errors() pol.implement_reform(params['policy'], print_warnings=False, raise_errors=False) assert len(pol.parameter_errors) > 0 assert len(pol.parameter_warnings) > 0