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}}if_toll_pricer. METHODS setup. METHODS minimum_toll FOR TESTING. METHODS car_and_van_rate FOR TESTING. METHODS lorry_rate FOR TESTING. METHODS transponder_discount FOR TESTING. METHODS discount_after_minimum FOR TESTING. METHODS night_lorry_surcharge FOR TESTING. METHODS night_car_no_surcharge FOR TESTING. METHODS discount_and_night FOR TESTING. METHODS lower_case_class FOR TESTING. METHODS unknown_class FOR TESTING. METHODS zero_distance FOR TESTING. METHODS distance_too_long FOR TESTING. ENDCLASS. CLASS {{p}}t02_hidden IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}toll_pricer( ). ENDMETHOD. METHOD minimum_toll. DATA(ls_result) = mo_cut->price_journey( VALUE #( vehicle_class = 'M' distance_km = 10 ) ). cl_abap_unit_assert=>assert_equals( exp = {{p}}if_toll_pricer=>c_reason-ok act = ls_result-reason ). cl_abap_unit_assert=>assert_equals( exp = 100 act = ls_result-amount_cents ). ENDMETHOD. METHOD car_and_van_rate. DATA(ls_car) = mo_cut->price_journey( VALUE #( vehicle_class = 'C' distance_km = 50 ) ). cl_abap_unit_assert=>assert_equals( exp = 500 act = ls_car-amount_cents msg = `car 50 km` ). DATA(ls_van) = mo_cut->price_journey( VALUE #( vehicle_class = 'V' distance_km = 20 ) ). cl_abap_unit_assert=>assert_equals( exp = 360 act = ls_van-amount_cents msg = `van 20 km` ). DATA(ls_max) = mo_cut->price_journey( VALUE #( vehicle_class = 'C' distance_km = 130 ) ). cl_abap_unit_assert=>assert_equals( exp = 1300 act = ls_max-amount_cents msg = `car 130 km` ). ENDMETHOD. METHOD lorry_rate. DATA(ls_result) = mo_cut->price_journey( VALUE #( vehicle_class = 'L' distance_km = 100 ) ). cl_abap_unit_assert=>assert_equals( exp = {{p}}if_toll_pricer=>c_reason-ok act = ls_result-reason ). cl_abap_unit_assert=>assert_equals( exp = 3000 act = ls_result-amount_cents ). ENDMETHOD. METHOD transponder_discount. DATA(ls_result) = mo_cut->price_journey( VALUE #( vehicle_class = 'C' distance_km = 100 has_transponder = abap_true ) ). cl_abap_unit_assert=>assert_equals( exp = 900 act = ls_result-amount_cents ). ENDMETHOD. METHOD discount_after_minimum. DATA(ls_result) = mo_cut->price_journey( VALUE #( vehicle_class = 'C' distance_km = 5 has_transponder = abap_true ) ). cl_abap_unit_assert=>assert_equals( exp = 90 act = ls_result-amount_cents ). ENDMETHOD. METHOD night_lorry_surcharge. DATA(ls_result) = mo_cut->price_journey( VALUE #( vehicle_class = 'L' distance_km = 100 at_night = abap_true ) ). cl_abap_unit_assert=>assert_equals( exp = 3750 act = ls_result-amount_cents ). ENDMETHOD. METHOD night_car_no_surcharge. DATA(ls_result) = mo_cut->price_journey( VALUE #( vehicle_class = 'C' distance_km = 100 at_night = abap_true ) ). cl_abap_unit_assert=>assert_equals( exp = 1000 act = ls_result-amount_cents ). ENDMETHOD. METHOD discount_and_night. DATA(ls_result) = mo_cut->price_journey( VALUE #( vehicle_class = 'L' distance_km = 100 has_transponder = abap_true at_night = abap_true ) ). cl_abap_unit_assert=>assert_equals( exp = 3375 act = ls_result-amount_cents ). ENDMETHOD. METHOD lower_case_class. DATA(ls_result) = mo_cut->price_journey( VALUE #( vehicle_class = 'c' distance_km = 50 ) ). cl_abap_unit_assert=>assert_equals( exp = 500 act = ls_result-amount_cents ). ENDMETHOD. METHOD unknown_class. DATA(ls_result) = mo_cut->price_journey( VALUE #( vehicle_class = 'X' distance_km = 50 ) ). cl_abap_unit_assert=>assert_equals( exp = {{p}}if_toll_pricer=>c_reason-vehicle act = ls_result-reason ). cl_abap_unit_assert=>assert_equals( exp = 0 act = ls_result-amount_cents ). ENDMETHOD. METHOD zero_distance. DATA(ls_result) = mo_cut->price_journey( VALUE #( vehicle_class = 'C' distance_km = 0 ) ). cl_abap_unit_assert=>assert_equals( exp = {{p}}if_toll_pricer=>c_reason-distance act = ls_result-reason ). cl_abap_unit_assert=>assert_equals( exp = 0 act = ls_result-amount_cents ). ENDMETHOD. METHOD distance_too_long. DATA(ls_result) = mo_cut->price_journey( VALUE #( vehicle_class = 'C' distance_km = 131 ) ). cl_abap_unit_assert=>assert_equals( exp = {{p}}if_toll_pricer=>c_reason-distance act = ls_result-reason ). cl_abap_unit_assert=>assert_equals( exp = 0 act = ls_result-amount_cents ). ENDMETHOD. ENDCLASS.