CLASS {{p}}track_test 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_money TYPE {{P}}TRACK_TYPES=>ty_money. METHODS fees_for IMPORTING it_paths TYPE ty_paths RETURNING VALUE(rt_fees) TYPE ty_fees. METHODS one_category FOR TESTING. METHODS two_categories FOR TESTING. METHODS night_surcharge FOR TESTING. METHODS invalid_distance FOR TESTING. ENDCLASS. CLASS {{p}}track_test IMPLEMENTATION. METHOD fees_for. CALL FUNCTION '{{P}}TRACK_FEE' EXPORTING it_paths = it_paths IMPORTING et_fees = rt_fees EXCEPTIONS invalid_distance = 1 invalid_category = 2 OTHERS = 3. cl_abap_unit_assert=>assert_subrc( exp = 0 ). ENDMETHOD. METHOD one_category. DATA lt_paths TYPE ty_paths. lt_paths = VALUE #( ( path_id = '00000001' train_cat = 'SP' distance_km = '10.00' night_flag = '' ) ). DATA(lt_fees) = fees_for( lt_paths ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_fees ) ). cl_abap_unit_assert=>assert_equals( exp = CONV ty_money( '15.00' ) act = lt_fees[ 1 ]-total_fee ). ENDMETHOD. METHOD two_categories. DATA lt_paths TYPE ty_paths. lt_paths = VALUE #( ( path_id = '00000001' train_cat = 'RG' distance_km = '20.00' night_flag = '' ) ( path_id = '00000002' train_cat = 'FR' distance_km = '20.00' night_flag = '' ) ). DATA(lt_fees) = fees_for( lt_paths ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_fees ) ). cl_abap_unit_assert=>assert_equals( exp = 'FR' act = lt_fees[ 1 ]-train_cat ). cl_abap_unit_assert=>assert_equals( exp = 'RG' act = lt_fees[ 2 ]-train_cat ). ENDMETHOD. METHOD night_surcharge. DATA lt_paths TYPE ty_paths. lt_paths = VALUE #( ( path_id = '00000001' train_cat = 'FR' distance_km = '50.00' night_flag = 'X' ) ). DATA(lt_fees) = fees_for( lt_paths ). cl_abap_unit_assert=>assert_equals( exp = CONV ty_money( '36.00' ) act = lt_fees[ 1 ]-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 = '' ) ). DATA lt_fees TYPE ty_fees. CALL FUNCTION '{{P}}TRACK_FEE' EXPORTING it_paths = lt_paths IMPORTING et_fees = lt_fees EXCEPTIONS invalid_distance = 1 OTHERS = 2. cl_abap_unit_assert=>assert_equals( exp = 1 act = sy-subrc ). ENDMETHOD. ENDCLASS.