CLASS {{p}}t88_test DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS fee_for IMPORTING iv_type TYPE string iv_hours TYPE decfloat34 RETURNING VALUE(rv_fee) TYPE decfloat34. METHODS day_fee FOR TESTING. METHODS night_fee FOR TESTING. METHODS holiday_fee FOR TESTING. METHODS minimum_fee FOR TESTING. METHODS invalid_hours FOR TESTING. ENDCLASS. CLASS {{p}}t88_test IMPLEMENTATION. METHOD fee_for. DATA lv_skip TYPE abap_bool. CALL FUNCTION '{{P}}GUARD_FEE' EXPORTING iv_shift_type = iv_type iv_hours = iv_hours IMPORTING ev_surcharge = lv_skip CHANGING cv_fee = rv_fee EXCEPTIONS invalid_hours = 1 OTHERS = 2. cl_abap_unit_assert=>assert_equals( exp = 0 act = sy-subrc ). ENDMETHOD. METHOD day_fee. DATA lv_exp TYPE decfloat34 VALUE '102.00'. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = fee_for( iv_type = 'DAY' iv_hours = 4 ) ). ENDMETHOD. METHOD night_fee. DATA lv_exp TYPE decfloat34 VALUE '127.50'. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = fee_for( iv_type = 'NIGHT' iv_hours = 4 ) ). ENDMETHOD. METHOD holiday_fee. DATA lv_exp TYPE decfloat34 VALUE '204.00'. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = fee_for( iv_type = 'HOLIDAY' iv_hours = 4 ) ). ENDMETHOD. METHOD minimum_fee. DATA lv_exp TYPE decfloat34 VALUE '50.00'. cl_abap_unit_assert=>assert_equals( exp = lv_exp act = fee_for( iv_type = 'DAY' iv_hours = 1 ) ). ENDMETHOD. METHOD invalid_hours. DATA lv_fee TYPE decfloat34 VALUE '7.00'. DATA lv_expected TYPE decfloat34 VALUE '7.00'. CALL FUNCTION '{{P}}GUARD_FEE' EXPORTING iv_shift_type = 'DAY' iv_hours = 0 CHANGING cv_fee = lv_fee EXCEPTIONS invalid_hours = 1 OTHERS = 2. cl_abap_unit_assert=>assert_equals( exp = 1 act = sy-subrc ). cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lv_fee ). ENDMETHOD. ENDCLASS.