Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
90 lines
3.4 KiB
ABAP
90 lines
3.4 KiB
ABAP
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.
|