CLASS {{p}}t14_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS verify_donation IMPORTING iv_age TYPE i iv_weight TYPE decfloat34 iv_hb TYPE decfloat34 iv_days TYPE i EXPORTING ev_reason TYPE string ev_retry TYPE i. METHODS eligible FOR TESTING. METHODS too_young FOR TESTING. METHODS too_old FOR TESTING. METHODS underweight FOR TESTING. METHODS low_hb FOR TESTING. METHODS too_soon FOR TESTING. METHODS never_donated FOR TESTING. METHODS invalid_input FOR TESTING. METHODS first_rule_wins FOR TESTING. METHODS boundary_ok FOR TESTING. ENDCLASS. CLASS {{p}}t14_hidden IMPLEMENTATION. METHOD verify_donation. CLEAR: ev_reason, ev_retry. TRY. CALL FUNCTION '{{P}}DONOR_CHECK' EXPORTING iv_age = iv_age iv_weight = iv_weight iv_hb = iv_hb iv_days_since_last = iv_days. CATCH {{p}}cx_donor_check INTO DATA(lx_check). ev_reason = lx_check->mv_reason. ev_retry = lx_check->mv_retry_days. ENDTRY. ENDMETHOD. METHOD eligible. verify_donation( EXPORTING iv_age = 30 iv_weight = 70 iv_hb = 14 iv_days = 200 IMPORTING ev_reason = DATA(lv_reason) ev_retry = DATA(lv_retry) ). cl_abap_unit_assert=>assert_initial( act = lv_reason ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_retry ). ENDMETHOD. METHOD too_young. verify_donation( EXPORTING iv_age = 17 iv_weight = 70 iv_hb = 14 iv_days = 200 IMPORTING ev_reason = DATA(lv_reason) ev_retry = DATA(lv_retry) ). cl_abap_unit_assert=>assert_equals( exp = 'TOO_YOUNG' act = lv_reason ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_retry ). ENDMETHOD. METHOD too_old. verify_donation( EXPORTING iv_age = 66 iv_weight = 70 iv_hb = 14 iv_days = 200 IMPORTING ev_reason = DATA(lv_reason) ). cl_abap_unit_assert=>assert_equals( exp = 'TOO_OLD' act = lv_reason ). ENDMETHOD. METHOD underweight. verify_donation( EXPORTING iv_age = 30 iv_weight = '49.9' iv_hb = 14 iv_days = 200 IMPORTING ev_reason = DATA(lv_reason) ). cl_abap_unit_assert=>assert_equals( exp = 'UNDERWEIGHT' act = lv_reason ). ENDMETHOD. METHOD low_hb. verify_donation( EXPORTING iv_age = 30 iv_weight = 70 iv_hb = '12.4' iv_days = 200 IMPORTING ev_reason = DATA(lv_reason) ). cl_abap_unit_assert=>assert_equals( exp = 'LOW_HB' act = lv_reason ). ENDMETHOD. METHOD too_soon. verify_donation( EXPORTING iv_age = 30 iv_weight = 70 iv_hb = 14 iv_days = 30 IMPORTING ev_reason = DATA(lv_reason) ev_retry = DATA(lv_retry) ). cl_abap_unit_assert=>assert_equals( exp = 'TOO_SOON' act = lv_reason ). cl_abap_unit_assert=>assert_equals( exp = 26 act = lv_retry ). ENDMETHOD. METHOD never_donated. verify_donation( EXPORTING iv_age = 40 iv_weight = 80 iv_hb = 15 iv_days = 99999 IMPORTING ev_reason = DATA(lv_reason) ). cl_abap_unit_assert=>assert_initial( act = lv_reason ). ENDMETHOD. METHOD invalid_input. verify_donation( EXPORTING iv_age = -1 iv_weight = 70 iv_hb = 14 iv_days = 200 IMPORTING ev_reason = DATA(lv_reason) ev_retry = DATA(lv_retry) ). cl_abap_unit_assert=>assert_equals( exp = 'INVALID_INPUT' act = lv_reason ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_retry ). ENDMETHOD. METHOD first_rule_wins. verify_donation( EXPORTING iv_age = 17 iv_weight = 40 iv_hb = 10 iv_days = 10 IMPORTING ev_reason = DATA(lv_reason) ). cl_abap_unit_assert=>assert_equals( exp = 'TOO_YOUNG' act = lv_reason ). ENDMETHOD. METHOD boundary_ok. verify_donation( EXPORTING iv_age = 18 iv_weight = 50 iv_hb = '12.5' iv_days = 56 IMPORTING ev_reason = DATA(lv_reason) ). cl_abap_unit_assert=>assert_initial( act = lv_reason ). ENDMETHOD. ENDCLASS.