CLASS {{p}}track_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. TYPES ty_paths TYPE {{P}}TRACK_TYPES=>tt_path. TYPES ty_fees TYPE {{P}}TRACK_TYPES=>tt_fee. TYPES ty_km TYPE {{P}}TRACK_TYPES=>ty_km. TYPES ty_money TYPE {{P}}TRACK_TYPES=>ty_money. METHODS call_fm IMPORTING it_paths TYPE ty_paths EXPORTING et_fees TYPE ty_fees ev_subrc TYPE sysubrc. METHODS one_path_one_row FOR TESTING. METHODS groups_and_sorts FOR TESTING. METHODS night_surcharge FOR TESTING. METHODS minimum_fee FOR TESTING. METHODS rounds_up FOR TESTING. METHODS invalid_distance FOR TESTING. METHODS invalid_category FOR TESTING. METHODS empty_input FOR TESTING. ENDCLASS. CLASS {{p}}track_hidden IMPLEMENTATION. METHOD call_fm. CALL FUNCTION '{{P}}TRACK_FEE' EXPORTING it_paths = it_paths IMPORTING et_fees = et_fees EXCEPTIONS invalid_distance = 1 invalid_category = 2 OTHERS = 3. ev_subrc = sy-subrc. ENDMETHOD. METHOD one_path_one_row. DATA lt_paths TYPE ty_paths. lt_paths = VALUE #( ( path_id = '00000001' train_cat = 'IC' distance_km = '100.00' night_flag = '' ) ). call_fm( EXPORTING it_paths = lt_paths IMPORTING et_fees = DATA(lt_fees) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_fees ) ). DATA(ls_fee) = lt_fees[ 1 ]. cl_abap_unit_assert=>assert_equals( exp = 'IC' act = ls_fee-train_cat ). cl_abap_unit_assert=>assert_equals( exp = 1 act = ls_fee-path_count ). cl_abap_unit_assert=>assert_equals( exp = CONV ty_km( '100.00' ) act = ls_fee-total_km ). cl_abap_unit_assert=>assert_equals( exp = CONV ty_money( '120.00' ) act = ls_fee-total_fee ). ENDMETHOD. METHOD groups_and_sorts. DATA lt_paths TYPE ty_paths. lt_paths = VALUE #( ( path_id = '00000001' train_cat = 'IC' distance_km = '100.00' night_flag = '' ) ( path_id = '00000002' train_cat = 'FR' distance_km = '100.00' night_flag = '' ) ( path_id = '00000003' train_cat = 'IC' distance_km = '50.00' night_flag = '' ) ). call_fm( EXPORTING it_paths = lt_paths IMPORTING et_fees = DATA(lt_fees) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_fees ) ). DATA(ls_first) = lt_fees[ 1 ]. DATA(ls_last) = lt_fees[ 2 ]. cl_abap_unit_assert=>assert_equals( exp = 'FR' act = ls_first-train_cat ). cl_abap_unit_assert=>assert_equals( exp = 1 act = ls_first-path_count ). cl_abap_unit_assert=>assert_equals( exp = CONV ty_money( '60.00' ) act = ls_first-total_fee ). cl_abap_unit_assert=>assert_equals( exp = 'IC' act = ls_last-train_cat ). cl_abap_unit_assert=>assert_equals( exp = 2 act = ls_last-path_count ). cl_abap_unit_assert=>assert_equals( exp = CONV ty_km( '150.00' ) act = ls_last-total_km ). cl_abap_unit_assert=>assert_equals( exp = CONV ty_money( '180.00' ) act = ls_last-total_fee ). ENDMETHOD. METHOD night_surcharge. DATA lt_paths TYPE ty_paths. lt_paths = VALUE #( ( path_id = '00000001' train_cat = 'RG' distance_km = '100.00' night_flag = 'X' ) ). call_fm( EXPORTING it_paths = lt_paths IMPORTING et_fees = DATA(lt_fees) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). DATA(ls_fee) = lt_fees[ 1 ]. cl_abap_unit_assert=>assert_equals( exp = CONV ty_money( '108.00' ) act = ls_fee-total_fee ). ENDMETHOD. METHOD minimum_fee. DATA lt_paths TYPE ty_paths. lt_paths = VALUE #( ( path_id = '00000001' train_cat = 'FR' distance_km = '2.00' night_flag = '' ) ). call_fm( EXPORTING it_paths = lt_paths IMPORTING et_fees = DATA(lt_fees) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). DATA(ls_fee) = lt_fees[ 1 ]. cl_abap_unit_assert=>assert_equals( exp = CONV ty_money( '5.00' ) act = ls_fee-total_fee ). ENDMETHOD. METHOD rounds_up. DATA lt_paths TYPE ty_paths. lt_paths = VALUE #( ( path_id = '00000001' train_cat = 'FR' distance_km = '10.01' night_flag = '' ) ). call_fm( EXPORTING it_paths = lt_paths IMPORTING et_fees = DATA(lt_fees) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). DATA(ls_fee) = lt_fees[ 1 ]. cl_abap_unit_assert=>assert_equals( exp = CONV ty_money( '6.01' ) act = ls_fee-total_fee ). ENDMETHOD. METHOD invalid_distance. DATA lt_paths TYPE ty_paths. lt_paths = VALUE #( ( path_id = '00000001' train_cat = 'IC' distance_km = '0.00' night_flag = '' ) ). call_fm( EXPORTING it_paths = lt_paths IMPORTING et_fees = DATA(lt_fees) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rc ). ENDMETHOD. METHOD invalid_category. DATA lt_paths TYPE ty_paths. lt_paths = VALUE #( ( path_id = '00000001' train_cat = 'XX' distance_km = '10.00' night_flag = '' ) ). call_fm( EXPORTING it_paths = lt_paths IMPORTING et_fees = DATA(lt_fees) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_rc ). ENDMETHOD. METHOD empty_input. DATA lt_paths TYPE ty_paths. call_fm( EXPORTING it_paths = lt_paths IMPORTING et_fees = DATA(lt_fees) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_fees ) ). ENDMETHOD. ENDCLASS.