CLASS {{p}}t37_test DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS price_for IMPORTING iv_program TYPE string iv_vehicle TYPE string iv_wax TYPE abap_bool DEFAULT abap_false iv_fleet TYPE abap_bool DEFAULT abap_false EXPORTING ev_price TYPE decfloat34 ev_reject TYPE abap_bool ev_subrc TYPE sysubrc. METHODS base_prices FOR TESTING. METHODS vehicle_surcharge FOR TESTING. METHODS extra_wax FOR TESTING. METHODS fleet_discount FOR TESTING. METHODS large_basic_rejected FOR TESTING. METHODS invalid_program FOR TESTING. METHODS invalid_vehicle FOR TESTING. ENDCLASS. CLASS {{p}}t37_test IMPLEMENTATION. METHOD price_for. ev_price = 0. CALL FUNCTION '{{P}}WASH_FEE' EXPORTING iv_program = iv_program iv_vehicle = iv_vehicle iv_extra_wax = iv_wax iv_fleet = iv_fleet IMPORTING ev_reject = ev_reject CHANGING cv_price = ev_price EXCEPTIONS invalid_program = 1 invalid_vehicle = 2 OTHERS = 3. ev_subrc = sy-subrc. ENDMETHOD. METHOD base_prices. price_for( EXPORTING iv_program = 'BASIC' iv_vehicle = 'S' IMPORTING ev_price = DATA(lv_basic) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '8.50' ) act = lv_basic ). price_for( EXPORTING iv_program = 'PLUS' iv_vehicle = 'S' IMPORTING ev_price = DATA(lv_plus) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '12.50' ) act = lv_plus ). price_for( EXPORTING iv_program = 'PREMIUM' iv_vehicle = 'S' IMPORTING ev_price = DATA(lv_premium) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '18.50' ) act = lv_premium ). ENDMETHOD. METHOD vehicle_surcharge. price_for( EXPORTING iv_program = 'PLUS' iv_vehicle = 'M' IMPORTING ev_price = DATA(lv_medium) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '15.00' ) act = lv_medium ). price_for( EXPORTING iv_program = 'PLUS' iv_vehicle = 'L' IMPORTING ev_price = DATA(lv_large) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '18.00' ) act = lv_large ). ENDMETHOD. METHOD extra_wax. price_for( EXPORTING iv_program = 'BASIC' iv_vehicle = 'S' iv_wax = abap_true IMPORTING ev_price = DATA(lv_basic) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '12.00' ) act = lv_basic ). price_for( EXPORTING iv_program = 'PREMIUM' iv_vehicle = 'S' iv_wax = abap_true IMPORTING ev_price = DATA(lv_premium) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '18.50' ) act = lv_premium ). ENDMETHOD. METHOD fleet_discount. price_for( EXPORTING iv_program = 'BASIC' iv_vehicle = 'S' iv_fleet = abap_true IMPORTING ev_price = DATA(lv_price) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '7.23' ) act = lv_price ). ENDMETHOD. METHOD large_basic_rejected. price_for( EXPORTING iv_program = 'BASIC' iv_vehicle = 'L' IMPORTING ev_price = DATA(lv_price) ev_reject = DATA(lv_reject) ). cl_abap_unit_assert=>assert_equals( exp = abap_true act = lv_reject ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 0 ) act = lv_price ). ENDMETHOD. METHOD invalid_program. price_for( EXPORTING iv_program = 'GOLD' iv_vehicle = 'S' IMPORTING ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rc ). ENDMETHOD. METHOD invalid_vehicle. price_for( EXPORTING iv_program = 'BASIC' iv_vehicle = 'XL' IMPORTING ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_rc ). ENDMETHOD. ENDCLASS.