CLASS {{p}}t31_hidden DEFINITION PUBLIC FINAL FOR TESTING RISK LEVEL HARMLESS DURATION SHORT CREATE PUBLIC. 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_350 TYPE p LENGTH 8 DECIMALS 2 VALUE '3.50', c_fee_400 TYPE p LENGTH 8 DECIMALS 2 VALUE '4.00', c_fee_500 TYPE p LENGTH 8 DECIMALS 2 VALUE '5.00', c_fee_1000 TYPE p LENGTH 8 DECIMALS 2 VALUE '10.00', c_fee_1250 TYPE p LENGTH 8 DECIMALS 2 VALUE '12.50', 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 empty_input FOR TESTING. "! @testing {{p}}parking_eval METHODS free_minutes FOR TESTING. "! @testing {{p}}parking_eval METHODS one_started_hour FOR TESTING. "! @testing {{p}}parking_eval METHODS two_started_hours FOR TESTING. "! @testing {{p}}parking_eval METHODS rates_per_tariff FOR TESTING. "! @testing {{p}}parking_eval METHODS fee_is_capped FOR TESTING. "! @testing {{p}}parking_eval METHODS invalid_tariff_ignored FOR TESTING. "! @testing {{p}}parking_eval METHODS zero_duration_ignored FOR TESTING. "! @testing {{p}}parking_eval METHODS groups_and_sorts_parks FOR TESTING. "! @testing {{p}}parking_eval METHODS sums_sessions_of_park FOR TESTING. ENDCLASS. CLASS {{p}}t31_hidden IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}parking_eval( ). ENDMETHOD. METHOD empty_input. 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. METHOD free_minutes. DATA(lt_result) = mo_cut->summarize( VALUE {{p}}if_park_eval=>tt_session( ( park_id = 'P001' tariff = 'A' duration_min = 20 ) ( park_id = 'P001' tariff = 'A' duration_min = 30 ) ) ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ). DATA(ls_row) = lt_result[ 1 ]. cl_abap_unit_assert=>assert_equals( exp = 2 act = ls_row-session_cnt ). cl_abap_unit_assert=>assert_equals( exp = 50 act = ls_row-total_min ). cl_abap_unit_assert=>assert_equals( exp = c_fee_000 act = ls_row-total_fee ). ENDMETHOD. METHOD one_started_hour. 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 two_started_hours. DATA(lt_result) = mo_cut->summarize( VALUE {{p}}if_park_eval=>tt_session( ( park_id = 'P001' tariff = 'A' duration_min = 91 ) ( park_id = 'P002' tariff = 'A' duration_min = 150 ) ) ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_result ) ). cl_abap_unit_assert=>assert_equals( exp = c_fee_400 act = lt_result[ 1 ]-total_fee ). cl_abap_unit_assert=>assert_equals( exp = c_fee_400 act = lt_result[ 2 ]-total_fee ). ENDMETHOD. METHOD rates_per_tariff. DATA(lt_result) = mo_cut->summarize( VALUE {{p}}if_park_eval=>tt_session( ( park_id = 'P001' tariff = 'A' duration_min = 90 ) ( park_id = 'P002' tariff = 'B' duration_min = 90 ) ( park_id = 'P003' tariff = 'C' duration_min = 90 ) ) ). cl_abap_unit_assert=>assert_equals( exp = 3 act = lines( lt_result ) ). cl_abap_unit_assert=>assert_equals( exp = c_fee_200 act = lt_result[ 1 ]-total_fee ). cl_abap_unit_assert=>assert_equals( exp = c_fee_350 act = lt_result[ 2 ]-total_fee ). cl_abap_unit_assert=>assert_equals( exp = c_fee_500 act = lt_result[ 3 ]-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 ) ( park_id = 'P002' tariff = 'C' duration_min = 150 ) ) ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_result ) ). cl_abap_unit_assert=>assert_equals( exp = c_fee_2000 act = lt_result[ 1 ]-total_fee ). cl_abap_unit_assert=>assert_equals( exp = c_fee_1000 act = lt_result[ 2 ]-total_fee ). ENDMETHOD. METHOD invalid_tariff_ignored. DATA(lt_result) = mo_cut->summarize( VALUE {{p}}if_park_eval=>tt_session( ( park_id = 'P001' tariff = 'X' duration_min = 120 ) ( park_id = 'P002' tariff = 'A' duration_min = 90 ) ( park_id = 'P002' tariff = 'X' duration_min = 200 ) ) ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ). DATA(ls_row) = lt_result[ 1 ]. cl_abap_unit_assert=>assert_equals( exp = 'P002' act = ls_row-park_id ). cl_abap_unit_assert=>assert_equals( exp = 1 act = ls_row-session_cnt ). cl_abap_unit_assert=>assert_equals( exp = 90 act = ls_row-total_min ). cl_abap_unit_assert=>assert_equals( exp = c_fee_200 act = ls_row-total_fee ). ENDMETHOD. METHOD zero_duration_ignored. DATA(lt_result) = mo_cut->summarize( VALUE {{p}}if_park_eval=>tt_session( ( park_id = 'P001' tariff = 'A' duration_min = 0 ) ( park_id = 'P001' tariff = 'B' duration_min = -5 ) ) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_result ) ). ENDMETHOD. METHOD groups_and_sorts_parks. DATA(lt_result) = mo_cut->summarize( VALUE {{p}}if_park_eval=>tt_session( ( park_id = 'P003' tariff = 'A' duration_min = 60 ) ( park_id = 'P001' tariff = 'B' 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 = 'P003' act = lt_result[ 2 ]-park_id ). ENDMETHOD. METHOD sums_sessions_of_park. DATA(lt_result) = mo_cut->summarize( VALUE {{p}}if_park_eval=>tt_session( ( park_id = 'P001' tariff = 'A' duration_min = 45 ) ( park_id = 'P001' tariff = 'B' duration_min = 200 ) ( park_id = 'P001' tariff = 'A' duration_min = 30 ) ) ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ). DATA(ls_row) = lt_result[ 1 ]. cl_abap_unit_assert=>assert_equals( exp = 3 act = ls_row-session_cnt ). cl_abap_unit_assert=>assert_equals( exp = 275 act = ls_row-total_min ). cl_abap_unit_assert=>assert_equals( exp = c_fee_1250 act = ls_row-total_fee ). ENDMETHOD. ENDCLASS.