CLASS {{p}}t41_test DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS fee_for IMPORTING iv_type TYPE string iv_days TYPE i iv_value TYPE decfloat34 RETURNING VALUE(rv_fee) TYPE decfloat34. METHODS book_fee FOR TESTING. METHODS dvd_fee FOR TESTING. METHODS fee_limits FOR TESTING. METHODS magazine_fee FOR TESTING. METHODS negative_days FOR TESTING. ENDCLASS. CLASS {{p}}t41_test IMPLEMENTATION. METHOD fee_for. DATA lv_blocked TYPE abap_bool. CALL FUNCTION '{{P}}LIB_FEE' EXPORTING iv_media_type = iv_type iv_days_late = iv_days iv_value = iv_value IMPORTING ev_blocked = lv_blocked CHANGING cv_fee = rv_fee EXCEPTIONS invalid_days = 1 OTHERS = 2. cl_abap_unit_assert=>assert_subrc( exp = 0 ). ENDMETHOD. METHOD book_fee. DATA lv_fee TYPE decfloat34. DATA lv_exp TYPE decfloat34 VALUE '1.50'. lv_fee = fee_for( iv_type = 'BOOK' iv_days = 3 iv_value = 100 ). cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). ENDMETHOD. METHOD dvd_fee. DATA lv_fee TYPE decfloat34. DATA lv_exp TYPE decfloat34 VALUE '4.00'. lv_fee = fee_for( iv_type = 'DVD' iv_days = 2 iv_value = 200 ). cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). ENDMETHOD. METHOD fee_limits. DATA lv_fee TYPE decfloat34. DATA lv_exp TYPE decfloat34. lv_exp = '5.00'. lv_fee = fee_for( iv_type = 'BOOK' iv_days = 2 iv_value = 1000 ). cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). lv_exp = '12.00'. lv_fee = fee_for( iv_type = 'DVD' iv_days = 3 iv_value = 1000 ). cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). ENDMETHOD. METHOD magazine_fee. DATA lv_fee TYPE decfloat34. DATA lv_exp TYPE decfloat34 VALUE '1.20'. lv_fee = fee_for( iv_type = 'MAG' iv_days = 4 iv_value = 50 ). cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). ENDMETHOD. METHOD negative_days. DATA lv_fee TYPE decfloat34. CALL FUNCTION '{{P}}LIB_FEE' EXPORTING iv_media_type = 'BOOK' iv_days_late = -1 iv_value = 100 CHANGING cv_fee = lv_fee EXCEPTIONS invalid_days = 1 OTHERS = 2. cl_abap_unit_assert=>assert_equals( exp = 1 act = sy-subrc ). ENDMETHOD. ENDCLASS.