CLASS {{p}}t41_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS call IMPORTING iv_lesson_type TYPE string iv_vehicle TYPE string iv_minutes TYPE i EXPORTING ev_block TYPE abap_bool ev_fee TYPE decfloat34 ev_subrc TYPE sysubrc. METHODS car_rate FOR TESTING. METHODS truck_rate FOR TESTING. METHODS moto_rate FOR TESTING. METHODS night_surcharge FOR TESTING. METHODS motorway_surcharge FOR TESTING. METHODS rounding_half_up FOR TESTING. METHODS minimum_fee FOR TESTING. METHODS unknown_vehicle FOR TESTING. METHODS block_long_lesson FOR TESTING. METHODS no_block_normal_lesson FOR TESTING. METHODS invalid_minutes FOR TESTING. ENDCLASS. CLASS {{p}}t41_hidden IMPLEMENTATION. METHOD call. CLEAR ev_fee. CALL FUNCTION '{{P}}DRV_FEE' EXPORTING iv_lesson_type = iv_lesson_type iv_vehicle = iv_vehicle iv_minutes = iv_minutes IMPORTING ev_block = ev_block CHANGING cv_fee = ev_fee EXCEPTIONS invalid_minutes = 1 OTHERS = 2. ev_subrc = sy-subrc. ENDMETHOD. METHOD car_rate. DATA lv_fee TYPE decfloat34. DATA lv_exp TYPE decfloat34 VALUE '72.00'. call( EXPORTING iv_lesson_type = 'NORMAL' iv_vehicle = 'CAR' iv_minutes = 60 IMPORTING ev_fee = lv_fee ). cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). ENDMETHOD. METHOD truck_rate. DATA lv_fee TYPE decfloat34. DATA lv_exp TYPE decfloat34 VALUE '75.00'. call( EXPORTING iv_lesson_type = 'NORMAL' iv_vehicle = 'TRUCK' iv_minutes = 30 IMPORTING ev_fee = lv_fee ). cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). ENDMETHOD. METHOD moto_rate. DATA lv_fee TYPE decfloat34. DATA lv_exp TYPE decfloat34 VALUE '54.00'. call( EXPORTING iv_lesson_type = 'NORMAL' iv_vehicle = 'MOTORCYCLE' iv_minutes = 60 IMPORTING ev_fee = lv_fee ). cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). ENDMETHOD. METHOD night_surcharge. DATA lv_fee TYPE decfloat34. DATA lv_exp TYPE decfloat34 VALUE '90.00'. call( EXPORTING iv_lesson_type = 'NIGHT' iv_vehicle = 'CAR' iv_minutes = 60 IMPORTING ev_fee = lv_fee ). cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). ENDMETHOD. METHOD motorway_surcharge. DATA lv_fee TYPE decfloat34. DATA lv_exp TYPE decfloat34 VALUE '105.00'. call( EXPORTING iv_lesson_type = 'MOTORWAY' iv_vehicle = 'TRUCK' iv_minutes = 30 IMPORTING ev_fee = lv_fee ). cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). ENDMETHOD. METHOD rounding_half_up. DATA lv_fee TYPE decfloat34. DATA lv_exp TYPE decfloat34 VALUE '21.88'. call( EXPORTING iv_lesson_type = 'NIGHT' iv_vehicle = 'TRUCK' iv_minutes = 7 IMPORTING ev_fee = lv_fee ). cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). ENDMETHOD. METHOD minimum_fee. DATA lv_fee TYPE decfloat34. DATA lv_exp TYPE decfloat34 VALUE '15.00'. call( EXPORTING iv_lesson_type = 'NORMAL' iv_vehicle = 'MOTORCYCLE' iv_minutes = 10 IMPORTING ev_fee = lv_fee ). cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). ENDMETHOD. METHOD unknown_vehicle. DATA lv_fee TYPE decfloat34. DATA lv_block TYPE abap_bool. DATA lv_rc TYPE sysubrc. DATA lv_exp TYPE decfloat34. call( EXPORTING iv_lesson_type = 'NORMAL' iv_vehicle = 'BOAT' iv_minutes = 200 IMPORTING ev_fee = lv_fee ev_block = lv_block 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 ). cl_abap_unit_assert=>assert_equals( exp = abap_false act = lv_block ). ENDMETHOD. METHOD block_long_lesson. DATA lv_fee TYPE decfloat34. DATA lv_block TYPE abap_bool. DATA lv_exp TYPE decfloat34 VALUE '145.20'. call( EXPORTING iv_lesson_type = 'NORMAL' iv_vehicle = 'CAR' iv_minutes = 121 IMPORTING ev_fee = lv_fee ev_block = lv_block ). cl_abap_unit_assert=>assert_equals( exp = abap_true act = lv_block ). cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). ENDMETHOD. METHOD no_block_normal_lesson. DATA lv_fee TYPE decfloat34. DATA lv_block TYPE abap_bool. DATA lv_exp TYPE decfloat34 VALUE '144.00'. call( EXPORTING iv_lesson_type = 'NORMAL' iv_vehicle = 'CAR' iv_minutes = 120 IMPORTING ev_fee = lv_fee ev_block = lv_block ). cl_abap_unit_assert=>assert_equals( exp = abap_false act = lv_block ). cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_fee ). ENDMETHOD. METHOD invalid_minutes. DATA lv_fee TYPE decfloat34. DATA lv_rc TYPE sysubrc. call( EXPORTING iv_lesson_type = 'NORMAL' iv_vehicle = 'CAR' iv_minutes = 0 IMPORTING ev_fee = lv_fee ev_subrc = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rc ). ENDMETHOD. ENDCLASS.