CLASS {{p}}t41_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS call_score IMPORTING iv_years TYPE i iv_degree TYPE string iv_match TYPE i EXPORTING ev_score TYPE i ev_rating TYPE string ev_subrc TYPE sysubrc. METHODS class_experience_points FOR TESTING. METHODS class_education_points FOR TESTING. METHODS class_skill_rounding FOR TESTING. METHODS class_rating_limits FOR TESTING. METHODS class_invalid_years FOR TESTING. METHODS class_invalid_match FOR TESTING. METHODS class_invalid_degree FOR TESTING. METHODS func_returns_result FOR TESTING. METHODS func_raises_years FOR TESTING. METHODS func_raises_match FOR TESTING. METHODS func_raises_degree FOR TESTING. ENDCLASS. CLASS {{p}}t41_hidden IMPLEMENTATION. METHOD call_score. CLEAR: ev_score, ev_rating. CALL FUNCTION '{{P}}APPL_SCORE' EXPORTING iv_years = iv_years iv_degree = iv_degree iv_match = iv_match IMPORTING ev_score = ev_score ev_rating = ev_rating EXCEPTIONS invalid_years = 1 invalid_match = 2 invalid_degree = 3 OTHERS = 4. ev_subrc = sy-subrc. ENDMETHOD. METHOD class_experience_points. DATA(lo_scorer) = NEW {{p}}app_scorer( ). DATA(ls_two) = lo_scorer->evaluate( iv_years = 2 iv_degree = 'VOC' iv_match = 0 ). cl_abap_unit_assert=>assert_equals( exp = 26 act = ls_two-score ). DATA(ls_cap) = lo_scorer->evaluate( iv_years = 9 iv_degree = 'VOC' iv_match = 0 ). cl_abap_unit_assert=>assert_equals( exp = 50 act = ls_cap-score ). ENDMETHOD. METHOD class_education_points. DATA(lo_scorer) = NEW {{p}}app_scorer( ). DATA(ls_phd) = lo_scorer->evaluate( iv_years = 0 iv_degree = 'PHD' iv_match = 0 ). cl_abap_unit_assert=>assert_equals( exp = 30 act = ls_phd-score ). DATA(ls_mas) = lo_scorer->evaluate( iv_years = 0 iv_degree = 'MAS' iv_match = 0 ). cl_abap_unit_assert=>assert_equals( exp = 25 act = ls_mas-score ). DATA(ls_bac) = lo_scorer->evaluate( iv_years = 0 iv_degree = 'BAC' iv_match = 0 ). cl_abap_unit_assert=>assert_equals( exp = 20 act = ls_bac-score ). DATA(ls_voc) = lo_scorer->evaluate( iv_years = 0 iv_degree = 'VOC' iv_match = 0 ). cl_abap_unit_assert=>assert_equals( exp = 10 act = ls_voc-score ). ENDMETHOD. METHOD class_skill_rounding. DATA(lo_scorer) = NEW {{p}}app_scorer( ). DATA(ls_full) = lo_scorer->evaluate( iv_years = 0 iv_degree = 'VOC' iv_match = 100 ). cl_abap_unit_assert=>assert_equals( exp = 40 act = ls_full-score ). DATA(ls_half) = lo_scorer->evaluate( iv_years = 0 iv_degree = 'VOC' iv_match = 35 ). cl_abap_unit_assert=>assert_equals( exp = 21 act = ls_half-score ). DATA(ls_down) = lo_scorer->evaluate( iv_years = 0 iv_degree = 'VOC' iv_match = 33 ). cl_abap_unit_assert=>assert_equals( exp = 20 act = ls_down-score ). DATA(ls_low) = lo_scorer->evaluate( iv_years = 0 iv_degree = 'VOC' iv_match = 1 ). cl_abap_unit_assert=>assert_equals( exp = 10 act = ls_low-score ). ENDMETHOD. METHOD class_rating_limits. DATA(lo_scorer) = NEW {{p}}app_scorer( ). DATA(ls_invite) = lo_scorer->evaluate( iv_years = 5 iv_degree = 'MAS' iv_match = 33 ). cl_abap_unit_assert=>assert_equals( exp = 75 act = ls_invite-score ). cl_abap_unit_assert=>assert_equals( exp = 'INVITE' act = ls_invite-rating ). DATA(ls_review) = lo_scorer->evaluate( iv_years = 5 iv_degree = 'MAS' iv_match = 30 ). cl_abap_unit_assert=>assert_equals( exp = 74 act = ls_review-score ). cl_abap_unit_assert=>assert_equals( exp = 'REVIEW' act = ls_review-rating ). DATA(ls_edge) = lo_scorer->evaluate( iv_years = 5 iv_degree = 'VOC' iv_match = 0 ). cl_abap_unit_assert=>assert_equals( exp = 50 act = ls_edge-score ). cl_abap_unit_assert=>assert_equals( exp = 'REVIEW' act = ls_edge-rating ). DATA(ls_low) = lo_scorer->evaluate( iv_years = 3 iv_degree = 'MAS' iv_match = 0 ). cl_abap_unit_assert=>assert_equals( exp = 49 act = ls_low-score ). cl_abap_unit_assert=>assert_equals( exp = 'REJECT' act = ls_low-rating ). ENDMETHOD. METHOD class_invalid_years. DATA(lo_scorer) = NEW {{p}}app_scorer( ). DATA(ls_result) = lo_scorer->evaluate( iv_years = -1 iv_degree = 'PHD' iv_match = 100 ). cl_abap_unit_assert=>assert_equals( exp = 'YEAR' act = ls_result-status ). cl_abap_unit_assert=>assert_equals( exp = 0 act = ls_result-score ). cl_abap_unit_assert=>assert_initial( act = ls_result-rating ). ENDMETHOD. METHOD class_invalid_match. DATA(lo_scorer) = NEW {{p}}app_scorer( ). DATA(ls_high) = lo_scorer->evaluate( iv_years = 1 iv_degree = 'PHD' iv_match = 101 ). cl_abap_unit_assert=>assert_equals( exp = 'MATC' act = ls_high-status ). DATA(ls_low) = lo_scorer->evaluate( iv_years = 1 iv_degree = 'PHD' iv_match = -1 ). cl_abap_unit_assert=>assert_equals( exp = 'MATC' act = ls_low-status ). cl_abap_unit_assert=>assert_equals( exp = 0 act = ls_low-score ). ENDMETHOD. METHOD class_invalid_degree. DATA(lo_scorer) = NEW {{p}}app_scorer( ). DATA(ls_result) = lo_scorer->evaluate( iv_years = 1 iv_degree = 'XYZ' iv_match = 50 ). cl_abap_unit_assert=>assert_equals( exp = 'DEGR' act = ls_result-status ). cl_abap_unit_assert=>assert_initial( act = ls_result-rating ). ENDMETHOD. METHOD func_returns_result. call_score( EXPORTING iv_years = 5 iv_degree = 'PHD' iv_match = 100 IMPORTING ev_score = DATA(lv_score) ev_rating = DATA(lv_rating) ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_rc ). cl_abap_unit_assert=>assert_equals( exp = 100 act = lv_score ). cl_abap_unit_assert=>assert_equals( exp = 'INVITE' act = lv_rating ). ENDMETHOD. METHOD func_raises_years. call_score( EXPORTING iv_years = -3 iv_degree = 'PHD' iv_match = 100 IMPORTING ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lv_rc ). ENDMETHOD. METHOD func_raises_match. call_score( EXPORTING iv_years = 5 iv_degree = 'PHD' iv_match = 200 IMPORTING ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lv_rc ). ENDMETHOD. METHOD func_raises_degree. call_score( EXPORTING iv_years = 5 iv_degree = 'ABC' iv_match = 100 IMPORTING ev_subrc = DATA(lv_rc) ). cl_abap_unit_assert=>assert_equals( exp = 3 act = lv_rc ). ENDMETHOD. ENDCLASS.