CLASS {{p}}t42_test DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS fee_for IMPORTING iv_type TYPE string iv_area TYPE decfloat34 iv_stain TYPE abap_bool DEFAULT abap_false RETURNING VALUE(rv_fee) TYPE decfloat34. METHODS carpet_fee FOR TESTING. METHODS minimum_fee FOR TESTING. METHODS stain_surcharge FOR TESTING. METHODS invalid_type FOR TESTING. METHODS invalid_area FOR TESTING. METHODS stain_not_allowed FOR TESTING. METHODS area_too_large FOR TESTING. ENDCLASS. CLASS {{p}}t42_test IMPLEMENTATION. METHOD fee_for. DATA lv_note TYPE string. CALL FUNCTION '{{P}}CARPET_FEE' EXPORTING iv_clean_type = iv_type iv_area_sqm = iv_area iv_stain = iv_stain IMPORTING ev_fee = rv_fee ev_note = lv_note EXCEPTIONS OTHERS = 1. cl_abap_unit_assert=>assert_subrc( exp = 0 ). ENDMETHOD. METHOD carpet_fee. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '70.00' ) act = fee_for( iv_type = `CP` iv_area = 20 ) ). ENDMETHOD. METHOD minimum_fee. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '40.00' ) act = fee_for( iv_type = `CP` iv_area = 5 ) ). ENDMETHOD. METHOD stain_surcharge. cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( '75.00' ) act = fee_for( iv_type = `UP` iv_area = 10 iv_stain = abap_true ) ). ENDMETHOD. METHOD invalid_type. DATA lv_fee TYPE decfloat34. CALL FUNCTION '{{P}}CARPET_FEE' EXPORTING iv_clean_type = `XX` iv_area_sqm = 10 iv_stain = abap_false IMPORTING ev_fee = lv_fee EXCEPTIONS invalid_type = 1 OTHERS = 2. cl_abap_unit_assert=>assert_equals( exp = 1 act = sy-subrc ). ENDMETHOD. METHOD invalid_area. DATA lv_fee TYPE decfloat34. CALL FUNCTION '{{P}}CARPET_FEE' EXPORTING iv_clean_type = `CP` iv_area_sqm = 0 iv_stain = abap_false IMPORTING ev_fee = lv_fee EXCEPTIONS invalid_area = 2 OTHERS = 3. cl_abap_unit_assert=>assert_equals( exp = 2 act = sy-subrc ). ENDMETHOD. METHOD stain_not_allowed. DATA lv_fee TYPE decfloat34. CALL FUNCTION '{{P}}CARPET_FEE' EXPORTING iv_clean_type = `RU` iv_area_sqm = 10 iv_stain = abap_true IMPORTING ev_fee = lv_fee EXCEPTIONS stain_not_allowed = 3 OTHERS = 4. cl_abap_unit_assert=>assert_equals( exp = 3 act = sy-subrc ). ENDMETHOD. METHOD area_too_large. DATA lv_fee TYPE decfloat34. CALL FUNCTION '{{P}}CARPET_FEE' EXPORTING iv_clean_type = `CP` iv_area_sqm = '120.5' iv_stain = abap_false IMPORTING ev_fee = lv_fee EXCEPTIONS area_too_large = 4 OTHERS = 5. cl_abap_unit_assert=>assert_equals( exp = 4 act = sy-subrc ). ENDMETHOD. ENDCLASS.