CLASS {{p}}adopt_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. TYPES: BEGIN OF ty_result, deposit TYPE decfloat34, visit_day TYPE string, reason TYPE string, END OF ty_result. METHODS review IMPORTING iv_species TYPE string iv_age_years TYPE i iv_housing TYPE string iv_garden TYPE abap_bool iv_pets TYPE i RETURNING VALUE(rs_result) TYPE ty_result. METHODS dog_deposit FOR TESTING. METHODS cat_deposit FOR TESTING. METHODS rabbit_deposit FOR TESTING. METHODS pet_surcharge FOR TESTING. METHODS pet_limit FOR TESTING. METHODS dog_flat_no_garden FOR TESTING. METHODS too_young FOR TESTING. METHODS age_limit FOR TESTING. METHODS unknown_species FOR TESTING. METHODS check_order FOR TESTING. METHODS rejected_unchanged FOR TESTING. ENDCLASS. CLASS {{p}}adopt_hidden IMPLEMENTATION. METHOD review. TRY. CALL FUNCTION '{{P}}ADOPT_REVIEW' EXPORTING iv_species = iv_species iv_age_years = iv_age_years iv_housing = iv_housing iv_garden = iv_garden iv_pets = iv_pets IMPORTING ev_deposit = rs_result-deposit ev_visit_day = rs_result-visit_day. CATCH {{p}}cx_adopt_reject INTO DATA(lo_error). rs_result-reason = lo_error->mv_reason. ENDTRY. ENDMETHOD. METHOD dog_deposit. DATA(ls_result) = review( iv_species = `DOG` iv_age_years = 30 iv_housing = `HOUSE` iv_garden = abap_false iv_pets = 0 ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 150 ) act = ls_result-deposit ). cl_abap_unit_assert=>assert_equals( exp = `WED` act = ls_result-visit_day ). cl_abap_unit_assert=>assert_initial( ls_result-reason ). ENDMETHOD. METHOD cat_deposit. DATA(ls_result) = review( iv_species = `CAT` iv_age_years = 25 iv_housing = `FLAT` iv_garden = abap_false iv_pets = 0 ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 80 ) act = ls_result-deposit ). cl_abap_unit_assert=>assert_equals( exp = `WED` act = ls_result-visit_day ). ENDMETHOD. METHOD rabbit_deposit. DATA(ls_result) = review( iv_species = `RABBIT` iv_age_years = 20 iv_housing = `FLAT` iv_garden = abap_false iv_pets = 0 ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 40 ) act = ls_result-deposit ). cl_abap_unit_assert=>assert_equals( exp = `WED` act = ls_result-visit_day ). ENDMETHOD. METHOD pet_surcharge. DATA(ls_result) = review( iv_species = `DOG` iv_age_years = 40 iv_housing = `HOUSE` iv_garden = abap_true iv_pets = 2 ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 162 ) act = ls_result-deposit ). cl_abap_unit_assert=>assert_equals( exp = `SAT` act = ls_result-visit_day ). ENDMETHOD. METHOD pet_limit. DATA(ls_result) = review( iv_species = `DOG` iv_age_years = 30 iv_housing = `HOUSE` iv_garden = abap_true iv_pets = 3 ). cl_abap_unit_assert=>assert_equals( exp = `TOO_MANY_PETS` act = ls_result-reason ). cl_abap_unit_assert=>assert_initial( ls_result-deposit ). ENDMETHOD. METHOD dog_flat_no_garden. DATA(ls_result) = review( iv_species = `DOG` iv_age_years = 30 iv_housing = `FLAT` iv_garden = abap_false iv_pets = 0 ). cl_abap_unit_assert=>assert_equals( exp = `NO_GARDEN` act = ls_result-reason ). ENDMETHOD. METHOD too_young. DATA(ls_result) = review( iv_species = `DOG` iv_age_years = 17 iv_housing = `HOUSE` iv_garden = abap_true iv_pets = 0 ). cl_abap_unit_assert=>assert_equals( exp = `TOO_YOUNG` act = ls_result-reason ). ENDMETHOD. METHOD age_limit. DATA(ls_result) = review( iv_species = `DOG` iv_age_years = 18 iv_housing = `HOUSE` iv_garden = abap_true iv_pets = 0 ). cl_abap_unit_assert=>assert_initial( ls_result-reason ). cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 150 ) act = ls_result-deposit ). cl_abap_unit_assert=>assert_equals( exp = `SAT` act = ls_result-visit_day ). ENDMETHOD. METHOD unknown_species. DATA(ls_result) = review( iv_species = `BIRD` iv_age_years = 30 iv_housing = `HOUSE` iv_garden = abap_true iv_pets = 0 ). cl_abap_unit_assert=>assert_equals( exp = `UNKNOWN_SPECIES` act = ls_result-reason ). ENDMETHOD. METHOD check_order. DATA(ls_first) = review( iv_species = `BIRD` iv_age_years = 17 iv_housing = `HOUSE` iv_garden = abap_true iv_pets = 0 ). cl_abap_unit_assert=>assert_equals( exp = `TOO_YOUNG` act = ls_first-reason ). DATA(ls_second) = review( iv_species = `BIRD` iv_age_years = 30 iv_housing = `HOUSE` iv_garden = abap_true iv_pets = 5 ). cl_abap_unit_assert=>assert_equals( exp = `UNKNOWN_SPECIES` act = ls_second-reason ). DATA(ls_third) = review( iv_species = `DOG` iv_age_years = 30 iv_housing = `FLAT` iv_garden = abap_false iv_pets = 5 ). cl_abap_unit_assert=>assert_equals( exp = `NO_GARDEN` act = ls_third-reason ). ENDMETHOD. METHOD rejected_unchanged. DATA(ls_result) = review( iv_species = `DOG` iv_age_years = 30 iv_housing = `FLAT` iv_garden = abap_false iv_pets = 0 ). cl_abap_unit_assert=>assert_equals( exp = `NO_GARDEN` act = ls_result-reason ). cl_abap_unit_assert=>assert_initial( ls_result-deposit ). cl_abap_unit_assert=>assert_initial( ls_result-visit_day ). ENDMETHOD. ENDCLASS.