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:
68
tasks_gen/eval/G0103/reference/overdue_fine.clas.abap
Normal file
68
tasks_gen/eval/G0103/reference/overdue_fine.clas.abap
Normal file
@@ -0,0 +1,68 @@
|
||||
CLASS {{p}}overdue_fine DEFINITION PUBLIC FINAL CREATE PUBLIC.
|
||||
PUBLIC SECTION.
|
||||
TYPES ty_media TYPE c LENGTH 8.
|
||||
TYPES ty_amount TYPE p LENGTH 8 DECIMALS 2.
|
||||
TYPES:
|
||||
BEGIN OF ty_result,
|
||||
days_overdue TYPE i,
|
||||
chargeable_days TYPE i,
|
||||
fine TYPE ty_amount,
|
||||
END OF ty_result.
|
||||
|
||||
METHODS calculate
|
||||
IMPORTING iv_due_date TYPE d
|
||||
iv_return_date TYPE d
|
||||
iv_media TYPE ty_media
|
||||
RETURNING VALUE(rs_result) TYPE ty_result.
|
||||
|
||||
PRIVATE SECTION.
|
||||
TYPES:
|
||||
BEGIN OF ty_media_rule,
|
||||
media TYPE ty_media,
|
||||
rate TYPE ty_amount,
|
||||
grace_days TYPE i,
|
||||
END OF ty_media_rule,
|
||||
tt_media_rule TYPE HASHED TABLE OF ty_media_rule WITH UNIQUE KEY media.
|
||||
|
||||
CONSTANTS:
|
||||
c_max_fine TYPE ty_amount VALUE '25.00',
|
||||
c_reminder_fee TYPE ty_amount VALUE '5.00',
|
||||
c_reminder_day TYPE i VALUE 30.
|
||||
|
||||
METHODS media_rule
|
||||
IMPORTING iv_media TYPE ty_media
|
||||
RETURNING VALUE(rs_rule) TYPE ty_media_rule.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS {{p}}overdue_fine IMPLEMENTATION.
|
||||
METHOD calculate.
|
||||
rs_result-days_overdue = iv_return_date - iv_due_date.
|
||||
IF rs_result-days_overdue <= 0.
|
||||
CLEAR rs_result.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
DATA(ls_rule) = media_rule( iv_media ).
|
||||
IF ls_rule IS INITIAL.
|
||||
RETURN.
|
||||
ENDIF.
|
||||
|
||||
rs_result-chargeable_days = nmax( val1 = rs_result-days_overdue - ls_rule-grace_days
|
||||
val2 = 0 ).
|
||||
rs_result-fine = rs_result-chargeable_days * ls_rule-rate.
|
||||
IF rs_result-days_overdue > c_reminder_day.
|
||||
rs_result-fine = rs_result-fine + c_reminder_fee.
|
||||
ENDIF.
|
||||
rs_result-fine = nmin( val1 = rs_result-fine
|
||||
val2 = c_max_fine ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD media_rule.
|
||||
DATA(lt_rules) = VALUE tt_media_rule(
|
||||
( media = 'BOOK' rate = '0.30' grace_days = 7 )
|
||||
( media = 'DVD' rate = '1.50' grace_days = 2 )
|
||||
( media = 'GAME' rate = '2.50' grace_days = 0 ) ).
|
||||
READ TABLE lt_rules INTO rs_rule WITH TABLE KEY media = iv_media.
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
89
tasks_gen/eval/G0103/reference/overdue_fine.testclasses.abap
Normal file
89
tasks_gen/eval/G0103/reference/overdue_fine.testclasses.abap
Normal file
@@ -0,0 +1,89 @@
|
||||
CLASS ltc_overdue_fine DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
||||
PRIVATE SECTION.
|
||||
DATA mo_cut TYPE REF TO {{p}}overdue_fine.
|
||||
METHODS setup.
|
||||
METHODS not_late_no_fine FOR TESTING.
|
||||
METHODS book_in_grace FOR TESTING.
|
||||
METHODS book_over_grace FOR TESTING.
|
||||
METHODS dvd_over_grace FOR TESTING.
|
||||
METHODS game_no_grace FOR TESTING.
|
||||
METHODS reminder_fee FOR TESTING.
|
||||
METHODS fine_is_capped FOR TESTING.
|
||||
METHODS unknown_media FOR TESTING.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_overdue_fine IMPLEMENTATION.
|
||||
METHOD setup.
|
||||
mo_cut = NEW {{p}}overdue_fine( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD not_late_no_fine.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_due_date = '20250110'
|
||||
iv_return_date = '20250109'
|
||||
iv_media = 'BOOK' ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV {{p}}overdue_fine=>ty_amount( '0.00' )
|
||||
act = ls_result-fine ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD book_in_grace.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_due_date = '20250101'
|
||||
iv_return_date = '20250108'
|
||||
iv_media = 'BOOK' ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 0 act = ls_result-chargeable_days ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD book_over_grace.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_due_date = '20250101'
|
||||
iv_return_date = '20250109'
|
||||
iv_media = 'BOOK' ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV {{p}}overdue_fine=>ty_amount( '0.30' )
|
||||
act = ls_result-fine ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD dvd_over_grace.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_due_date = '20250101'
|
||||
iv_return_date = '20250104'
|
||||
iv_media = 'DVD' ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV {{p}}overdue_fine=>ty_amount( '1.50' )
|
||||
act = ls_result-fine ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD game_no_grace.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_due_date = '20250101'
|
||||
iv_return_date = '20250102'
|
||||
iv_media = 'GAME' ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV {{p}}overdue_fine=>ty_amount( '2.50' )
|
||||
act = ls_result-fine ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD reminder_fee.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_due_date = '20250101'
|
||||
iv_return_date = '20250215'
|
||||
iv_media = 'BOOK' ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV {{p}}overdue_fine=>ty_amount( '16.40' )
|
||||
act = ls_result-fine ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD fine_is_capped.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_due_date = '20250101'
|
||||
iv_return_date = '20250113'
|
||||
iv_media = 'GAME' ).
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
exp = CONV {{p}}overdue_fine=>ty_amount( '25.00' )
|
||||
act = ls_result-fine ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD unknown_media.
|
||||
DATA(ls_result) = mo_cut->calculate( iv_due_date = '20250101'
|
||||
iv_return_date = '20250105'
|
||||
iv_media = 'TAPE' ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 4 act = ls_result-days_overdue ).
|
||||
cl_abap_unit_assert=>assert_equals( exp = 0 act = ls_result-chargeable_days ).
|
||||
ENDMETHOD.
|
||||
ENDCLASS.
|
||||
Reference in New Issue
Block a user