CLASS ltc_parking_eval DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. CONSTANTS: c_fee_000 TYPE p LENGTH 8 DECIMALS 2 VALUE '0.00', c_fee_200 TYPE p LENGTH 8 DECIMALS 2 VALUE '2.00', c_fee_2000 TYPE p LENGTH 8 DECIMALS 2 VALUE '20.00'. DATA mo_cut TYPE REF TO {{p}}if_park_eval. METHODS setup. "! @testing {{p}}parking_eval METHODS free_minutes_are_free FOR TESTING. "! @testing {{p}}parking_eval METHODS one_hour_is_charged FOR TESTING. "! @testing {{p}}parking_eval METHODS fee_is_capped FOR TESTING. "! @testing {{p}}parking_eval METHODS invalid_tariff_is_ignored FOR TESTING. "! @testing {{p}}parking_eval METHODS groups_by_park FOR TESTING. "! @testing {{p}}parking_eval METHODS empty_input_gives_no_row FOR TESTING. ENDCLASS. CLASS ltc_parking_eval IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}parking_eval( ). ENDMETHOD. METHOD free_minutes_are_free. DATA(lt_result) = mo_cut->summarize( VALUE {{p}}if_park_eval=>tt_session( ( park_id = 'P001' tariff = 'A' duration_min = 30 ) ) ). cl_abap_unit_assert=>assert_equals( exp = c_fee_000 act = lt_result[ 1 ]-total_fee ). ENDMETHOD. METHOD one_hour_is_charged. DATA(lt_result) = mo_cut->summarize( VALUE {{p}}if_park_eval=>tt_session( ( park_id = 'P001' tariff = 'A' duration_min = 31 ) ) ). cl_abap_unit_assert=>assert_equals( exp = c_fee_200 act = lt_result[ 1 ]-total_fee ). ENDMETHOD. METHOD fee_is_capped. DATA(lt_result) = mo_cut->summarize( VALUE {{p}}if_park_eval=>tt_session( ( park_id = 'P001' tariff = 'C' duration_min = 400 ) ) ). cl_abap_unit_assert=>assert_equals( exp = c_fee_2000 act = lt_result[ 1 ]-total_fee ). ENDMETHOD. METHOD invalid_tariff_is_ignored. DATA(lt_result) = mo_cut->summarize( VALUE {{p}}if_park_eval=>tt_session( ( park_id = 'P001' tariff = 'X' duration_min = 120 ) ) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_result ) ). ENDMETHOD. METHOD groups_by_park. DATA(lt_result) = mo_cut->summarize( VALUE {{p}}if_park_eval=>tt_session( ( park_id = 'P002' tariff = 'A' duration_min = 60 ) ( park_id = 'P001' tariff = 'A' duration_min = 60 ) ) ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_result ) ). cl_abap_unit_assert=>assert_equals( exp = 'P001' act = lt_result[ 1 ]-park_id ). cl_abap_unit_assert=>assert_equals( exp = 'P002' act = lt_result[ 2 ]-park_id ). ENDMETHOD. METHOD empty_input_gives_no_row. DATA(lt_result) = mo_cut->summarize( VALUE {{p}}if_park_eval=>tt_session( ) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_result ) ). ENDMETHOD. ENDCLASS.