CLASS ltc_toll_pricer DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}if_toll_pricer. METHODS setup. METHODS car_toll FOR TESTING. METHODS minimum_toll FOR TESTING. METHODS transponder_discount FOR TESTING. METHODS night_lorry FOR TESTING. METHODS unknown_class FOR TESTING. METHODS distance_out_of_range FOR TESTING. ENDCLASS. CLASS ltc_toll_pricer IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}toll_pricer( ). ENDMETHOD. METHOD car_toll. 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 minimum_toll. DATA(ls_result) = mo_cut->price_journey( VALUE #( vehicle_class = 'M' distance_km = 5 ) ). cl_abap_unit_assert=>assert_equals( exp = 100 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 night_lorry. 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 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 distance_out_of_range. 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 ). ENDMETHOD. ENDCLASS.