CLASS {{p}}hut_fee_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS fee_of IMPORTING iv_type TYPE string iv_nights TYPE i iv_member TYPE abap_bool DEFAULT abap_false iv_breakfast TYPE abap_bool DEFAULT abap_false RETURNING VALUE(rv_fee) TYPE decfloat34. METHODS rc_of IMPORTING iv_type TYPE string iv_nights TYPE i RETURNING VALUE(rv_subrc) TYPE sysubrc. METHODS adult_one_night FOR TESTING. METHODS child_with_breakfast FOR TESTING. METHODS member_halves_rate FOR TESTING. METHODS dog_ignores_member FOR TESTING. METHODS dog_gets_no_breakfast FOR TESTING. METHODS unknown_type_as_adult FOR TESTING. METHODS lower_case_type FOR TESTING. METHODS three_nights_discount FOR TESTING. METHODS seven_nights_discount FOR TESTING. METHODS two_nights_no_discount FOR TESTING. METHODS member_full_stay FOR TESTING. METHODS invalid_nights_raise FOR TESTING. ENDCLASS. CLASS {{p}}hut_fee_hidden IMPLEMENTATION. METHOD fee_of. DATA lv_subrc TYPE sysubrc. CALL FUNCTION '{{P}}HUT_FEE' EXPORTING iv_guest_type = iv_type iv_nights = iv_nights iv_member = iv_member iv_breakfast = iv_breakfast IMPORTING ev_fee = rv_fee EXCEPTIONS invalid_nights = 1 OTHERS = 2. lv_subrc = sy-subrc. cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ). ENDMETHOD. METHOD rc_of. DATA lv_fee TYPE decfloat34. CALL FUNCTION '{{P}}HUT_FEE' EXPORTING iv_guest_type = iv_type iv_nights = iv_nights IMPORTING ev_fee = lv_fee EXCEPTIONS invalid_nights = 1 OTHERS = 2. rv_subrc = sy-subrc. ENDMETHOD. METHOD adult_one_night. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '28.00' ) act = fee_of( iv_type = `ADULT` iv_nights = 1 ) ). ENDMETHOD. METHOD child_with_breakfast. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '47.00' ) act = fee_of( iv_type = `CHILD` iv_nights = 2 iv_breakfast = abap_true ) ). ENDMETHOD. METHOD member_halves_rate. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '28.00' ) act = fee_of( iv_type = `ADULT` iv_nights = 2 iv_member = abap_true ) ). ENDMETHOD. METHOD dog_ignores_member. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '10.00' ) act = fee_of( iv_type = `DOG` iv_nights = 2 iv_member = abap_true ) ). ENDMETHOD. METHOD dog_gets_no_breakfast. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '10.00' ) act = fee_of( iv_type = `DOG` iv_nights = 2 iv_breakfast = abap_true ) ). ENDMETHOD. METHOD unknown_type_as_adult. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '28.00' ) act = fee_of( iv_type = `STUDENT` iv_nights = 1 ) ). ENDMETHOD. METHOD lower_case_type. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '7.00' ) act = fee_of( iv_type = `child` iv_nights = 1 iv_member = abap_true ) ). ENDMETHOD. METHOD three_nights_discount. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '75.60' ) act = fee_of( iv_type = `ADULT` iv_nights = 3 ) ). ENDMETHOD. METHOD seven_nights_discount. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '156.80' ) act = fee_of( iv_type = `ADULT` iv_nights = 7 ) ). ENDMETHOD. METHOD two_nights_no_discount. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '56.00' ) act = fee_of( iv_type = `ADULT` iv_nights = 2 ) ). ENDMETHOD. METHOD member_full_stay. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '144.90' ) act = fee_of( iv_type = `ADULT` iv_nights = 7 iv_member = abap_true iv_breakfast = abap_true ) ). ENDMETHOD. METHOD invalid_nights_raise. cl_abap_unit_assert=>assert_equals( exp = 1 act = rc_of( iv_type = `ADULT` iv_nights = 0 ) ). cl_abap_unit_assert=>assert_equals( exp = 1 act = rc_of( iv_type = `ADULT` iv_nights = -2 ) ). ENDMETHOD. ENDCLASS.