CLASS {{p}}pest_test_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}pest_fee. METHODS setup. METHODS expect_fee IMPORTING iv_expected TYPE {{p}}pest_fee=>ty_fee iv_actual TYPE {{p}}pest_fee=>ty_fee iv_case TYPE string. METHODS rats_base_fee FOR TESTING. METHODS mice_base_fee FOR TESTING. METHODS wasp_base_fee FOR TESTING. METHODS unknown_pest_zero FOR TESTING. METHODS area_surcharge_step FOR TESTING. METHODS area_surcharge_rounds FOR TESTING. METHODS no_surcharge_at_100 FOR TESTING. METHODS urgent_surcharge FOR TESTING. METHODS contract_discount FOR TESTING. METHODS discount_excludes_urgent FOR TESTING. METHODS minimum_fee FOR TESTING. ENDCLASS. CLASS {{p}}pest_test_hidden IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}pest_fee( ). ENDMETHOD. METHOD expect_fee. cl_abap_unit_assert=>assert_equals( exp = iv_expected act = iv_actual msg = iv_case ). ENDMETHOD. METHOD rats_base_fee. expect_fee( iv_expected = 120 iv_actual = mo_cut->calculate_fee( iv_pest_type = 'RATS' iv_area = 50 iv_urgent = abap_false iv_contract = abap_false ) iv_case = 'RATS base fee' ). ENDMETHOD. METHOD mice_base_fee. expect_fee( iv_expected = 55 iv_actual = mo_cut->calculate_fee( iv_pest_type = 'MICE' iv_area = 0 iv_urgent = abap_false iv_contract = abap_false ) iv_case = 'MICE base fee' ). ENDMETHOD. METHOD wasp_base_fee. expect_fee( iv_expected = 150 iv_actual = mo_cut->calculate_fee( iv_pest_type = 'WASP' iv_area = 100 iv_urgent = abap_false iv_contract = abap_false ) iv_case = 'WASP base fee' ). ENDMETHOD. METHOD unknown_pest_zero. expect_fee( iv_expected = 0 iv_actual = mo_cut->calculate_fee( iv_pest_type = 'BIRD' iv_area = 300 iv_urgent = abap_true iv_contract = abap_true ) iv_case = 'unknown pest type' ). ENDMETHOD. METHOD area_surcharge_step. expect_fee( iv_expected = 135 iv_actual = mo_cut->calculate_fee( iv_pest_type = 'RATS' iv_area = 101 iv_urgent = abap_false iv_contract = abap_false ) iv_case = 'one started area step' ). ENDMETHOD. METHOD area_surcharge_rounds. expect_fee( iv_expected = 165 iv_actual = mo_cut->calculate_fee( iv_pest_type = 'RATS' iv_area = 250 iv_urgent = abap_false iv_contract = abap_false ) iv_case = 'three started area steps' ). ENDMETHOD. METHOD no_surcharge_at_100. expect_fee( iv_expected = 80 iv_actual = mo_cut->calculate_fee( iv_pest_type = 'ANTS' iv_area = 100 iv_urgent = abap_false iv_contract = abap_false ) iv_case = 'no area surcharge at 100' ). ENDMETHOD. METHOD urgent_surcharge. expect_fee( iv_expected = 125 iv_actual = mo_cut->calculate_fee( iv_pest_type = 'ANTS' iv_area = 100 iv_urgent = abap_true iv_contract = abap_false ) iv_case = 'urgent surcharge' ). ENDMETHOD. METHOD contract_discount. expect_fee( iv_expected = 135 iv_actual = mo_cut->calculate_fee( iv_pest_type = 'RATS' iv_area = 200 iv_urgent = abap_false iv_contract = abap_true ) iv_case = 'contract discount' ). ENDMETHOD. METHOD discount_excludes_urgent. expect_fee( iv_expected = 153 iv_actual = mo_cut->calculate_fee( iv_pest_type = 'RATS' iv_area = 0 iv_urgent = abap_true iv_contract = abap_true ) iv_case = 'discount without urgent surcharge' ). ENDMETHOD. METHOD minimum_fee. expect_fee( iv_expected = 50 iv_actual = mo_cut->calculate_fee( iv_pest_type = 'MICE' iv_area = 0 iv_urgent = abap_false iv_contract = abap_true ) iv_case = 'minimum fee' ). ENDMETHOD. ENDCLASS.