CLASS {{p}}t41_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS get_fee IMPORTING iv_type TYPE string iv_days TYPE i iv_value TYPE decfloat34 iv_fee TYPE decfloat34 DEFAULT 0 EXPORTING ev_blocked TYPE abap_bool ev_fee TYPE decfloat34 ev_subrc TYPE sysubrc. METHODS book_percent FOR TESTING. METHODS book_maximum FOR TESTING. METHODS book_rounding FOR TESTING. METHODS book_zero_days FOR TESTING. METHODS book_not_blocked FOR TESTING. METHODS dvd_percent FOR TESTING. METHODS dvd_maximum FOR TESTING. METHODS magazine_daily FOR TESTING. METHODS reference_blocked FOR TESTING. METHODS other_type_zero FOR TESTING. METHODS negative_days FOR TESTING. ENDCLASS. CLASS {{p}}t41_hidden IMPLEMENTATION. METHOD get_fee. ev_fee = iv_fee. CALL FUNCTION '{{P}}LIB_FEE' EXPORTING iv_media_type = iv_type iv_days_late = iv_days iv_value = iv_value IMPORTING ev_blocked = ev_blocked CHANGING cv_fee = ev_fee EXCEPTIONS invalid_days = 1 OTHERS = 2. ev_subrc = sy-subrc. ENDMETHOD. METHOD book_percent. DATA lv_fee TYPE decfloat34. DATA lv_exp TYPE decfloat34 VALUE '1.50'. get_fee( EXPORTING iv_type = 'BOOK' iv_days = 3 iv_value = 100 IMPORTING ev_fee = lv_fee ). cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). ENDMETHOD. METHOD book_maximum. DATA lv_fee TYPE decfloat34. DATA lv_exp TYPE decfloat34 VALUE '5.00'. get_fee( EXPORTING iv_type = 'BOOK' iv_days = 2 iv_value = 1000 IMPORTING ev_fee = lv_fee ). cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). ENDMETHOD. METHOD book_rounding. DATA lv_fee TYPE decfloat34. DATA lv_exp TYPE decfloat34 VALUE '1.67'. get_fee( EXPORTING iv_type = 'BOOK' iv_days = 1 iv_value = 333 IMPORTING ev_fee = lv_fee ). cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). ENDMETHOD. METHOD book_zero_days. DATA lv_fee TYPE decfloat34. DATA lv_exp TYPE decfloat34 VALUE '0.00'. DATA lv_rc TYPE sysubrc. get_fee( EXPORTING iv_type = 'BOOK' iv_days = 0 iv_value = 100 IMPORTING ev_fee = lv_fee ev_subrc = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). ENDMETHOD. METHOD book_not_blocked. DATA lv_blocked TYPE abap_bool. get_fee( EXPORTING iv_type = 'BOOK' iv_days = 1 iv_value = 100 IMPORTING ev_blocked = lv_blocked ). cl_abap_unit_assert=>assert_equals( exp = abap_false act = lv_blocked ). ENDMETHOD. METHOD dvd_percent. DATA lv_fee TYPE decfloat34. DATA lv_exp TYPE decfloat34 VALUE '4.00'. get_fee( EXPORTING iv_type = 'DVD' iv_days = 2 iv_value = 200 IMPORTING ev_fee = lv_fee ). cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). ENDMETHOD. METHOD dvd_maximum. DATA lv_fee TYPE decfloat34. DATA lv_exp TYPE decfloat34 VALUE '12.00'. get_fee( EXPORTING iv_type = 'DVD' iv_days = 3 iv_value = 1000 IMPORTING ev_fee = lv_fee ). cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). ENDMETHOD. METHOD magazine_daily. DATA lv_fee TYPE decfloat34. DATA lv_exp TYPE decfloat34 VALUE '1.20'. get_fee( EXPORTING iv_type = 'MAG' iv_days = 4 iv_value = 50 IMPORTING ev_fee = lv_fee ). cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). ENDMETHOD. METHOD reference_blocked. DATA lv_fee TYPE decfloat34. DATA lv_blocked TYPE abap_bool. DATA lv_exp TYPE decfloat34 VALUE '7.00'. get_fee( EXPORTING iv_type = 'REF' iv_days = 2 iv_value = 100 iv_fee = 7 IMPORTING ev_blocked = lv_blocked ev_fee = lv_fee ). cl_abap_unit_assert=>assert_equals( exp = abap_true act = lv_blocked ). cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). ENDMETHOD. METHOD other_type_zero. DATA lv_fee TYPE decfloat34. DATA lv_blocked TYPE abap_bool. DATA lv_exp TYPE decfloat34 VALUE '0.00'. get_fee( EXPORTING iv_type = 'XX' iv_days = 2 iv_value = 100 IMPORTING ev_blocked = lv_blocked ev_fee = lv_fee ). cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). cl_abap_unit_assert=>assert_equals( exp = abap_false act = lv_blocked ). ENDMETHOD. METHOD negative_days. DATA lv_rc TYPE sysubrc. get_fee( EXPORTING iv_type = 'BOOK' iv_days = -1 iv_value = 100 IMPORTING ev_subrc = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rc ). ENDMETHOD. ENDCLASS.