CLASS ltc_towing_fee DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}towing_fee. METHODS setup. METHODS minimum_fee FOR TESTING. METHODS distance_charge FOR TESTING. METHODS night_surcharge FOR TESTING. METHODS weekend_surcharge FOR TESTING. METHODS invalid_class FOR TESTING. METHODS invalid_distance FOR TESTING. ENDCLASS. CLASS ltc_towing_fee IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}towing_fee( ). ENDMETHOD. METHOD minimum_fee. DATA(ls_result) = mo_cut->calculate( iv_vehicle_class = 'S' iv_distance_km = 3 iv_hour = 12 iv_is_weekend = abap_false ). cl_abap_unit_assert=>assert_equals( exp = {{p}}towing_fee=>c_status-ok act = ls_result-status ). cl_abap_unit_assert=>assert_equals( exp = 80 act = ls_result-fee ). ENDMETHOD. METHOD distance_charge. DATA(ls_result) = mo_cut->calculate( iv_vehicle_class = 'M' iv_distance_km = 30 iv_hour = 12 iv_is_weekend = abap_false ). cl_abap_unit_assert=>assert_equals( exp = 130 act = ls_result-fee ). ENDMETHOD. METHOD night_surcharge. DATA(ls_result) = mo_cut->calculate( iv_vehicle_class = 'M' iv_distance_km = 30 iv_hour = 23 iv_is_weekend = abap_false ). cl_abap_unit_assert=>assert_equals( exp = 165 act = ls_result-fee ). ENDMETHOD. METHOD weekend_surcharge. DATA(ls_result) = mo_cut->calculate( iv_vehicle_class = 'M' iv_distance_km = 30 iv_hour = 12 iv_is_weekend = abap_true ). cl_abap_unit_assert=>assert_equals( exp = 150 act = ls_result-fee ). ENDMETHOD. METHOD invalid_class. DATA(ls_result) = mo_cut->calculate( iv_vehicle_class = 'X' iv_distance_km = 30 iv_hour = 12 iv_is_weekend = abap_false ). cl_abap_unit_assert=>assert_equals( exp = {{p}}towing_fee=>c_status-bad_class act = ls_result-status ). ENDMETHOD. METHOD invalid_distance. DATA(ls_result) = mo_cut->calculate( iv_vehicle_class = 'M' iv_distance_km = 0 iv_hour = 12 iv_is_weekend = abap_false ). cl_abap_unit_assert=>assert_equals( exp = {{p}}towing_fee=>c_status-bad_distance act = ls_result-status ). ENDMETHOD. ENDCLASS.