CLASS {{p}}t14_test DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. METHODS run_check 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_donor FOR TESTING. METHODS rejects_too_young FOR TESTING. METHODS rejects_low_hb FOR TESTING. METHODS rejects_too_soon FOR TESTING. METHODS rejects_invalid FOR TESTING. ENDCLASS. CLASS {{p}}t14_test IMPLEMENTATION. METHOD run_check. 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_donor. run_check( EXPORTING iv_age = 30 iv_weight = 70 iv_hb = 14 iv_days = 200 IMPORTING ev_reason = DATA(lv_reason) ). cl_abap_unit_assert=>assert_initial( act = lv_reason ). ENDMETHOD. METHOD rejects_too_young. run_check( EXPORTING iv_age = 17 iv_weight = 70 iv_hb = 14 iv_days = 200 IMPORTING ev_reason = DATA(lv_reason) ). cl_abap_unit_assert=>assert_equals( exp = 'TOO_YOUNG' act = lv_reason ). ENDMETHOD. METHOD rejects_low_hb. run_check( EXPORTING iv_age = 30 iv_weight = 70 iv_hb = 12 iv_days = 200 IMPORTING ev_reason = DATA(lv_reason) ). cl_abap_unit_assert=>assert_equals( exp = 'LOW_HB' act = lv_reason ). ENDMETHOD. METHOD rejects_too_soon. run_check( EXPORTING iv_age = 30 iv_weight = 70 iv_hb = 14 iv_days = 20 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 = 36 act = lv_retry ). ENDMETHOD. METHOD rejects_invalid. run_check( EXPORTING iv_age = 30 iv_weight = -1 iv_hb = 14 iv_days = 200 IMPORTING ev_reason = DATA(lv_reason) ). cl_abap_unit_assert=>assert_equals( exp = 'INVALID_INPUT' act = lv_reason ). ENDMETHOD. ENDCLASS.