CLASS {{p}}t02_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}towing_fee. METHODS setup. METHODS minimum_fee_applies FOR TESTING. METHODS distance_charge FOR TESTING. METHODS first_ten_km_free FOR TESTING. METHODS night_surcharge FOR TESTING. METHODS weekend_surcharge FOR TESTING. METHODS night_and_weekend FOR TESTING. METHODS night_hour_boundaries FOR TESTING. METHODS rounds_up_to_five FOR TESTING. METHODS large_vehicle_long_trip FOR TESTING. METHODS rejects_unknown_class FOR TESTING. METHODS rejects_bad_distance FOR TESTING. METHODS rejects_bad_hour FOR TESTING. ENDCLASS. CLASS {{p}}t02_hidden IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}towing_fee( ). ENDMETHOD. METHOD minimum_fee_applies. DATA(ls_result) = mo_cut->calculate( iv_vehicle_class = 'S' iv_distance_km = 5 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 first_ten_km_free. DATA(ls_ten) = mo_cut->calculate( iv_vehicle_class = 'M' iv_distance_km = 10 iv_hour = 12 iv_is_weekend = abap_false ). DATA(ls_twenty) = mo_cut->calculate( iv_vehicle_class = 'M' iv_distance_km = 20 iv_hour = 12 iv_is_weekend = abap_false ). cl_abap_unit_assert=>assert_equals( exp = 90 act = ls_ten-fee ). cl_abap_unit_assert=>assert_equals( exp = 110 act = ls_twenty-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 night_and_weekend. DATA(ls_result) = mo_cut->calculate( iv_vehicle_class = 'S' iv_distance_km = 10 iv_hour = 23 iv_is_weekend = abap_true ). cl_abap_unit_assert=>assert_equals( exp = 85 act = ls_result-fee ). ENDMETHOD. METHOD night_hour_boundaries. DATA(ls_22) = mo_cut->calculate( iv_vehicle_class = 'M' iv_distance_km = 10 iv_hour = 22 iv_is_weekend = abap_false ). DATA(ls_21) = mo_cut->calculate( iv_vehicle_class = 'M' iv_distance_km = 10 iv_hour = 21 iv_is_weekend = abap_false ). DATA(ls_5) = mo_cut->calculate( iv_vehicle_class = 'M' iv_distance_km = 10 iv_hour = 5 iv_is_weekend = abap_false ). DATA(ls_6) = mo_cut->calculate( iv_vehicle_class = 'M' iv_distance_km = 10 iv_hour = 6 iv_is_weekend = abap_false ). cl_abap_unit_assert=>assert_equals( exp = 115 act = ls_22-fee msg = `hour 22` ). cl_abap_unit_assert=>assert_equals( exp = 90 act = ls_21-fee msg = `hour 21` ). cl_abap_unit_assert=>assert_equals( exp = 115 act = ls_5-fee msg = `hour 5` ). cl_abap_unit_assert=>assert_equals( exp = 90 act = ls_6-fee msg = `hour 6` ). ENDMETHOD. METHOD rounds_up_to_five. DATA(ls_result) = mo_cut->calculate( iv_vehicle_class = 'M' iv_distance_km = 11 iv_hour = 12 iv_is_weekend = abap_false ). cl_abap_unit_assert=>assert_equals( exp = 95 act = ls_result-fee ). ENDMETHOD. METHOD large_vehicle_long_trip. DATA(ls_result) = mo_cut->calculate( iv_vehicle_class = 'L' iv_distance_km = 100 iv_hour = 12 iv_is_weekend = abap_false ). cl_abap_unit_assert=>assert_equals( exp = 320 act = ls_result-fee ). ENDMETHOD. METHOD rejects_unknown_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 ). cl_abap_unit_assert=>assert_equals( exp = 0 act = ls_result-fee ). ENDMETHOD. METHOD rejects_bad_distance. DATA(ls_zero) = mo_cut->calculate( iv_vehicle_class = 'M' iv_distance_km = 0 iv_hour = 12 iv_is_weekend = abap_false ). DATA(ls_far) = mo_cut->calculate( iv_vehicle_class = 'M' iv_distance_km = 501 iv_hour = 12 iv_is_weekend = abap_false ). cl_abap_unit_assert=>assert_equals( exp = {{p}}towing_fee=>c_status-bad_distance act = ls_zero-status ). cl_abap_unit_assert=>assert_equals( exp = {{p}}towing_fee=>c_status-bad_distance act = ls_far-status ). ENDMETHOD. METHOD rejects_bad_hour. DATA(ls_24) = mo_cut->calculate( iv_vehicle_class = 'M' iv_distance_km = 10 iv_hour = 24 iv_is_weekend = abap_false ). DATA(ls_neg) = mo_cut->calculate( iv_vehicle_class = 'M' iv_distance_km = 10 iv_hour = -1 iv_is_weekend = abap_false ). cl_abap_unit_assert=>assert_equals( exp = {{p}}towing_fee=>c_status-bad_hour act = ls_24-status ). cl_abap_unit_assert=>assert_equals( exp = {{p}}towing_fee=>c_status-bad_hour act = ls_neg-status ). ENDMETHOD. ENDCLASS.