Fix coverage with several contract classes; table annotation and file path checks; clean task dir on write
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
This commit is contained in:
60
tasks_gen/eval/G0130/reference/cx_presc_error.clas.abap
Normal file
60
tasks_gen/eval/G0130/reference/cx_presc_error.clas.abap
Normal file
@@ -0,0 +1,60 @@
|
||||
CLASS {{p}}cx_presc_error DEFINITION
|
||||
PUBLIC
|
||||
INHERITING FROM cx_root
|
||||
FINAL
|
||||
CREATE PUBLIC.
|
||||
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_reason TYPE c LENGTH 12.
|
||||
|
||||
CONSTANTS:
|
||||
BEGIN OF c_reason,
|
||||
empty TYPE ty_reason VALUE 'EMPTY',
|
||||
expired TYPE ty_reason VALUE 'EXPIRED',
|
||||
quantity TYPE ty_reason VALUE 'QUANTITY',
|
||||
unknown TYPE ty_reason VALUE 'UNKNOWN',
|
||||
dose TYPE ty_reason VALUE 'DOSE',
|
||||
duplicate TYPE ty_reason VALUE 'DUPLICATE',
|
||||
END OF c_reason.
|
||||
|
||||
METHODS constructor
|
||||
IMPORTING iv_reason TYPE ty_reason.
|
||||
|
||||
METHODS get_reason
|
||||
RETURNING VALUE(rv_reason) TYPE ty_reason.
|
||||
|
||||
METHODS get_message_text
|
||||
RETURNING VALUE(rv_text) TYPE string.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA mv_reason TYPE ty_reason.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}cx_presc_error IMPLEMENTATION.
|
||||
METHOD constructor.
|
||||
super->constructor( ).
|
||||
mv_reason = iv_reason.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_reason.
|
||||
rv_reason = mv_reason.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD get_message_text.
|
||||
CASE mv_reason.
|
||||
WHEN c_reason-empty.
|
||||
rv_text = 'The prescription has no items'.
|
||||
WHEN c_reason-expired.
|
||||
rv_text = 'The prescription is expired'.
|
||||
WHEN c_reason-quantity.
|
||||
rv_text = 'The quantity is not positive'.
|
||||
WHEN c_reason-unknown.
|
||||
rv_text = 'The drug is not in the drug master'.
|
||||
WHEN c_reason-dose.
|
||||
rv_text = 'The daily dose is not allowed'.
|
||||
WHEN c_reason-duplicate.
|
||||
rv_text = 'The drug appears more than once'.
|
||||
ENDCASE.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
103
tasks_gen/eval/G0130/reference/prescription_check.clas.abap
Normal file
103
tasks_gen/eval/G0130/reference/prescription_check.clas.abap
Normal file
@@ -0,0 +1,103 @@
|
||||
CLASS {{p}}prescription_check DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_drug_id TYPE c LENGTH 10.
|
||||
|
||||
TYPES:
|
||||
BEGIN OF ty_item,
|
||||
drug_id TYPE ty_drug_id,
|
||||
quantity TYPE i,
|
||||
daily_dose TYPE i,
|
||||
END OF ty_item,
|
||||
tt_item TYPE STANDARD TABLE OF ty_item WITH EMPTY KEY.
|
||||
|
||||
METHODS constructor.
|
||||
|
||||
METHODS validate
|
||||
IMPORTING iv_issue_date TYPE d
|
||||
iv_valid_days TYPE i
|
||||
iv_as_of_date TYPE d
|
||||
it_item TYPE tt_item
|
||||
RAISING {{p}}cx_presc_error.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA mo_drug_master TYPE REF TO {{p}}drug_master.
|
||||
|
||||
METHODS expiry_date
|
||||
IMPORTING iv_issue_date TYPE d
|
||||
iv_valid_days TYPE i
|
||||
RETURNING VALUE(rv_expiry) TYPE d.
|
||||
|
||||
METHODS check_items
|
||||
IMPORTING it_item TYPE tt_item
|
||||
RAISING {{p}}cx_presc_error.
|
||||
|
||||
METHODS check_item
|
||||
IMPORTING is_item TYPE ty_item
|
||||
RAISING {{p}}cx_presc_error.
|
||||
|
||||
METHODS check_duplicates
|
||||
IMPORTING it_item TYPE tt_item
|
||||
RAISING {{p}}cx_presc_error.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}prescription_check IMPLEMENTATION.
|
||||
METHOD constructor.
|
||||
mo_drug_master = NEW {{p}}drug_master( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD validate.
|
||||
IF it_item IS INITIAL.
|
||||
RAISE EXCEPTION TYPE {{p}}cx_presc_error
|
||||
EXPORTING iv_reason = {{p}}cx_presc_error=>c_reason-empty.
|
||||
ENDIF.
|
||||
|
||||
IF iv_as_of_date > expiry_date( iv_issue_date = iv_issue_date
|
||||
iv_valid_days = iv_valid_days ).
|
||||
RAISE EXCEPTION TYPE {{p}}cx_presc_error
|
||||
EXPORTING iv_reason = {{p}}cx_presc_error=>c_reason-expired.
|
||||
ENDIF.
|
||||
|
||||
check_items( it_item ).
|
||||
check_duplicates( it_item ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD expiry_date.
|
||||
rv_expiry = iv_issue_date + iv_valid_days.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_items.
|
||||
LOOP AT it_item INTO DATA(ls_item).
|
||||
check_item( ls_item ).
|
||||
ENDLOOP.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_item.
|
||||
IF is_item-quantity < 1.
|
||||
RAISE EXCEPTION TYPE {{p}}cx_presc_error
|
||||
EXPORTING iv_reason = {{p}}cx_presc_error=>c_reason-quantity.
|
||||
ENDIF.
|
||||
|
||||
DATA(ls_drug) = mo_drug_master->get_drug( is_item-drug_id ).
|
||||
IF ls_drug IS INITIAL.
|
||||
RAISE EXCEPTION TYPE {{p}}cx_presc_error
|
||||
EXPORTING iv_reason = {{p}}cx_presc_error=>c_reason-unknown.
|
||||
ENDIF.
|
||||
|
||||
IF is_item-daily_dose < 1 OR is_item-daily_dose > ls_drug-max_daily_dose.
|
||||
RAISE EXCEPTION TYPE {{p}}cx_presc_error
|
||||
EXPORTING iv_reason = {{p}}cx_presc_error=>c_reason-dose.
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_duplicates.
|
||||
DATA lt_seen TYPE HASHED TABLE OF ty_item WITH UNIQUE KEY drug_id.
|
||||
LOOP AT it_item INTO DATA(ls_item).
|
||||
INSERT ls_item INTO TABLE lt_seen.
|
||||
IF sy-subrc <> 0.
|
||||
RAISE EXCEPTION TYPE {{p}}cx_presc_error
|
||||
EXPORTING iv_reason = {{p}}cx_presc_error=>c_reason-duplicate.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
@@ -0,0 +1,104 @@
|
||||
CLASS ltc_presc_check DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}prescription_check.
|
||||
|
||||
METHODS setup.
|
||||
METHODS valid_prescription FOR TESTING.
|
||||
METHODS empty_prescription FOR TESTING.
|
||||
METHODS expired_prescription FOR TESTING.
|
||||
METHODS unknown_drug FOR TESTING.
|
||||
METHODS bad_quantity FOR TESTING.
|
||||
METHODS bad_dose FOR TESTING.
|
||||
METHODS duplicate_drug FOR TESTING.
|
||||
METHODS message_of_empty FOR TESTING.
|
||||
|
||||
METHODS valid_item
|
||||
RETURNING VALUE(rt_item) TYPE {{p}}prescription_check=>tt_item.
|
||||
METHODS expect_reason
|
||||
IMPORTING iv_reason TYPE {{p}}cx_presc_error=>ty_reason
|
||||
it_item TYPE {{p}}prescription_check=>tt_item.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_presc_check IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}prescription_check( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD valid_item.
|
||||
rt_item = VALUE #( ( drug_id = 'IBU400' quantity = 10 daily_dose = 1200 ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD expect_reason.
|
||||
DATA lv_raised TYPE abap_bool.
|
||||
TRY.
|
||||
mo_cut->validate( iv_issue_date = '20240101'
|
||||
iv_valid_days = 30
|
||||
iv_as_of_date = '20240110'
|
||||
it_item = it_item ).
|
||||
CATCH {{p}}cx_presc_error INTO DATA(lx_error).
|
||||
lv_raised = abap_true.
|
||||
cl_abap_unit_assert=>assert_equals( exp = iv_reason
|
||||
act = lx_error->get_reason( ) ).
|
||||
ENDTRY.
|
||||
cl_abap_unit_assert=>assert_true( act = lv_raised ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD valid_prescription.
|
||||
TRY.
|
||||
mo_cut->validate( iv_issue_date = '20240101'
|
||||
iv_valid_days = 30
|
||||
iv_as_of_date = '20240110'
|
||||
it_item = valid_item( ) ).
|
||||
CATCH {{p}}cx_presc_error.
|
||||
cl_abap_unit_assert=>fail( msg = 'Unexpected exception' ).
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD empty_prescription.
|
||||
expect_reason( iv_reason = {{p}}cx_presc_error=>c_reason-empty
|
||||
it_item = VALUE {{p}}prescription_check=>tt_item( ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD expired_prescription.
|
||||
DATA lv_raised TYPE abap_bool.
|
||||
TRY.
|
||||
mo_cut->validate( iv_issue_date = '20240101'
|
||||
iv_valid_days = 30
|
||||
iv_as_of_date = '20240201'
|
||||
it_item = valid_item( ) ).
|
||||
CATCH {{p}}cx_presc_error INTO DATA(lx_error).
|
||||
lv_raised = abap_true.
|
||||
cl_abap_unit_assert=>assert_equals( exp = {{p}}cx_presc_error=>c_reason-expired
|
||||
act = lx_error->get_reason( ) ).
|
||||
ENDTRY.
|
||||
cl_abap_unit_assert=>assert_true( act = lv_raised ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD unknown_drug.
|
||||
expect_reason( iv_reason = {{p}}cx_presc_error=>c_reason-unknown
|
||||
it_item = VALUE #( ( drug_id = 'NODRUG' quantity = 5 daily_dose = 10 ) ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD bad_quantity.
|
||||
expect_reason( iv_reason = {{p}}cx_presc_error=>c_reason-quantity
|
||||
it_item = VALUE #( ( drug_id = 'IBU400' quantity = 0 daily_dose = 1200 ) ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD bad_dose.
|
||||
expect_reason( iv_reason = {{p}}cx_presc_error=>c_reason-dose
|
||||
it_item = VALUE #( ( drug_id = 'META50' quantity = 5 daily_dose = 500 ) ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD duplicate_drug.
|
||||
expect_reason( iv_reason = {{p}}cx_presc_error=>c_reason-duplicate
|
||||
it_item = VALUE #( ( drug_id = 'IBU400' quantity = 10 daily_dose = 1200 )
|
||||
( drug_id = 'IBU400' quantity = 10 daily_dose = 1200 ) ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD message_of_empty.
|
||||
DATA(lo_error) = NEW {{p}}cx_presc_error( iv_reason = {{p}}cx_presc_error=>c_reason-empty ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 'The prescription has no items'
|
||||
act = lo_error->get_message_text( ) ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user