CLASS {{p}}move_test DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS fee_for IMPORTING iv_order_no TYPE string iv_move_date TYPE d iv_work_hours TYPE decfloat34 iv_box_count TYPE i iv_calc_mode TYPE string RETURNING VALUE(rv_fee) TYPE decfloat34. METHODS eco_fee FOR TESTING. METHODS express_fee FOR TESTING. METHODS box_fee FOR TESTING. METHODS rejects_zero_hours FOR TESTING. METHODS first_error_wins FOR TESTING. ENDCLASS. CLASS {{p}}move_test IMPLEMENTATION. METHOD fee_for. DATA lv_msg TYPE string. CALL FUNCTION '{{P}}MOVE_FEE' EXPORTING iv_order_no = iv_order_no iv_move_date = iv_move_date iv_work_hours = iv_work_hours iv_box_count = iv_box_count iv_calc_mode = iv_calc_mode IMPORTING ev_fee = rv_fee ev_msg = lv_msg EXCEPTIONS invalid_order = 1 invalid_date = 2 invalid_hours = 3 invalid_count = 4 unknown_mode = 5 OTHERS = 6. cl_abap_unit_assert=>assert_subrc( exp = 0 ). ENDMETHOD. METHOD eco_fee. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 135 ) act = fee_for( iv_order_no = `A1` iv_move_date = '20250101' iv_work_hours = 3 iv_box_count = 0 iv_calc_mode = `ECO` ) ). ENDMETHOD. METHOD express_fee. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '93.6' ) act = fee_for( iv_order_no = `A2` iv_move_date = '20250101' iv_work_hours = 1 iv_box_count = 2 iv_calc_mode = `EXP` ) ). ENDMETHOD. METHOD box_fee. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 66 ) act = fee_for( iv_order_no = `A3` iv_move_date = '20250101' iv_work_hours = 1 iv_box_count = 4 iv_calc_mode = `STD` ) ). ENDMETHOD. METHOD rejects_zero_hours. DATA lv_fee TYPE decfloat34. CALL FUNCTION '{{P}}MOVE_FEE' EXPORTING iv_order_no = `A4` iv_move_date = '20250101' iv_work_hours = 0 iv_box_count = 0 iv_calc_mode = `STD` IMPORTING ev_fee = lv_fee EXCEPTIONS invalid_order = 1 invalid_date = 2 invalid_hours = 3 invalid_count = 4 unknown_mode = 5 OTHERS = 6. cl_abap_unit_assert=>assert_equals( exp = 3 act = sy-subrc ). ENDMETHOD. METHOD first_error_wins. DATA lv_fee TYPE decfloat34. CALL FUNCTION '{{P}}MOVE_FEE' EXPORTING iv_order_no = `` iv_move_date = '00000000' iv_work_hours = -1 iv_box_count = -1 iv_calc_mode = `FIX` IMPORTING ev_fee = lv_fee EXCEPTIONS invalid_order = 1 invalid_date = 2 invalid_hours = 3 invalid_count = 4 unknown_mode = 5 OTHERS = 6. cl_abap_unit_assert=>assert_equals( exp = 1 act = sy-subrc ). ENDMETHOD. ENDCLASS.