CLASS {{p}}t14_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS call IMPORTING iv_size TYPE string iv_long_hair TYPE abap_bool iv_weekend TYPE abap_bool iv_channel TYPE string iv_fee TYPE decfloat34 DEFAULT 7 EXPORTING ev_skip TYPE abap_bool ev_fee TYPE decfloat34 ev_subrc TYPE sysubrc. METHODS small_base FOR TESTING. METHODS medium_base FOR TESTING. METHODS large_base FOR TESTING. METHODS long_hair_surcharge FOR TESTING. METHODS weekend_surcharge FOR TESTING. METHODS combined_surcharges FOR TESTING. METHODS partner_skips FOR TESTING. METHODS invalid_size FOR TESTING. METHODS skip_false_for_shop FOR TESTING. METHODS partner_invalid_size FOR TESTING. ENDCLASS. CLASS {{p}}t14_hidden IMPLEMENTATION. METHOD call. ev_fee = iv_fee. CALL FUNCTION '{{P}}GROOM_FEE' EXPORTING iv_size = iv_size iv_long_hair = iv_long_hair iv_weekend = iv_weekend iv_channel = iv_channel IMPORTING ev_skip = ev_skip CHANGING cv_fee = ev_fee EXCEPTIONS invalid_size = 1 OTHERS = 2. ev_subrc = sy-subrc. ENDMETHOD. METHOD small_base. call( EXPORTING iv_size = `S` iv_long_hair = abap_false iv_weekend = abap_false iv_channel = `SHOP` IMPORTING ev_fee = DATA(lv_fee) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '26.50' ) act = lv_fee ). ENDMETHOD. METHOD medium_base. call( EXPORTING iv_size = `M` iv_long_hair = abap_false iv_weekend = abap_false iv_channel = `WEB` IMPORTING ev_fee = DATA(lv_fee) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '42.50' ) act = lv_fee ). ENDMETHOD. METHOD large_base. call( EXPORTING iv_size = `L` iv_long_hair = abap_false iv_weekend = abap_false iv_channel = `SHOP` IMPORTING ev_fee = DATA(lv_fee) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '64.50' ) act = lv_fee ). ENDMETHOD. METHOD long_hair_surcharge. " 26.50 + 15 % of 26.50 = 26.50 + 3.98 call( EXPORTING iv_size = `S` iv_long_hair = abap_true iv_weekend = abap_false iv_channel = `SHOP` IMPORTING ev_fee = DATA(lv_fee) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '30.48' ) act = lv_fee ). ENDMETHOD. METHOD weekend_surcharge. call( EXPORTING iv_size = `M` iv_long_hair = abap_false iv_weekend = abap_true iv_channel = `SHOP` IMPORTING ev_fee = DATA(lv_fee) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '52.50' ) act = lv_fee ). ENDMETHOD. METHOD combined_surcharges. " 64.50 + 15 % of 64.50 = 64.50 + 9.68, plus 10.00 call( EXPORTING iv_size = `L` iv_long_hair = abap_true iv_weekend = abap_true iv_channel = `WEB` IMPORTING ev_fee = DATA(lv_fee) ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '84.18' ) act = lv_fee ). ENDMETHOD. METHOD partner_skips. call( EXPORTING iv_size = `M` iv_long_hair = abap_false iv_weekend = abap_false iv_channel = `PARTNER` iv_fee = 7 IMPORTING ev_skip = DATA(lv_skip) ev_fee = DATA(lv_fee) ). cl_abap_unit_assert=>assert_equals( exp = abap_true act = lv_skip ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 7 ) act = lv_fee ). ENDMETHOD. METHOD invalid_size. call( EXPORTING iv_size = `X` iv_long_hair = abap_false iv_weekend = abap_false iv_channel = `SHOP` IMPORTING ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rc ). ENDMETHOD. METHOD skip_false_for_shop. call( EXPORTING iv_size = `S` iv_long_hair = abap_false iv_weekend = abap_false iv_channel = `SHOP` IMPORTING ev_skip = DATA(lv_skip) ). cl_abap_unit_assert=>assert_equals( exp = abap_false act = lv_skip ). ENDMETHOD. METHOD partner_invalid_size. call( EXPORTING iv_size = `X` iv_long_hair = abap_false iv_weekend = abap_false iv_channel = `PARTNER` IMPORTING ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rc ). ENDMETHOD. ENDCLASS.