Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
221 lines
6.7 KiB
ABAP
221 lines
6.7 KiB
ABAP
CLASS {{p}}overdraft_test DEFINITION PUBLIC FINAL CREATE PUBLIC
|
|
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
|
PRIVATE SECTION.
|
|
CONSTANTS c_zero TYPE {{p}}if_overdraft=>ty_amount VALUE '0.00'.
|
|
DATA mo_cut TYPE REF TO {{p}}if_overdraft.
|
|
METHODS setup.
|
|
METHODS non_positive_amount FOR TESTING.
|
|
METHODS zero_days FOR TESTING.
|
|
METHODS grace_days_free FOR TESTING.
|
|
METHODS tier_one_rate FOR TESTING.
|
|
METHODS tier_two_boundary FOR TESTING.
|
|
METHODS tier_three_boundary FOR TESTING.
|
|
METHODS tier_four_boundary FOR TESTING.
|
|
METHODS business_discount FOR TESTING.
|
|
METHODS business_rate_floor FOR TESTING.
|
|
METHODS minimum_interest FOR TESTING.
|
|
METHODS rounding_half_up FOR TESTING.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}overdraft_test IMPLEMENTATION.
|
|
METHOD setup.
|
|
CREATE OBJECT mo_cut TYPE {{p}}overdraft_calc.
|
|
ENDMETHOD.
|
|
|
|
METHOD non_positive_amount.
|
|
DATA lv_act TYPE {{p}}if_overdraft=>ty_amount.
|
|
|
|
CALL METHOD mo_cut->calculate
|
|
EXPORTING
|
|
iv_amount = '0.00'
|
|
iv_days = 30
|
|
iv_segment = {{p}}if_overdraft=>c_segment_private
|
|
RECEIVING
|
|
rv_interest = lv_act.
|
|
cl_abap_unit_assert=>assert_equals( exp = c_zero act = lv_act
|
|
msg = 'zero amount' ).
|
|
|
|
CALL METHOD mo_cut->calculate
|
|
EXPORTING
|
|
iv_amount = '-250.00'
|
|
iv_days = 30
|
|
iv_segment = {{p}}if_overdraft=>c_segment_private
|
|
RECEIVING
|
|
rv_interest = lv_act.
|
|
cl_abap_unit_assert=>assert_equals( exp = c_zero act = lv_act
|
|
msg = 'negative amount' ).
|
|
ENDMETHOD.
|
|
|
|
METHOD zero_days.
|
|
DATA lv_act TYPE {{p}}if_overdraft=>ty_amount.
|
|
|
|
CALL METHOD mo_cut->calculate
|
|
EXPORTING
|
|
iv_amount = '1000.00'
|
|
iv_days = 0
|
|
iv_segment = {{p}}if_overdraft=>c_segment_private
|
|
RECEIVING
|
|
rv_interest = lv_act.
|
|
cl_abap_unit_assert=>assert_equals( exp = c_zero act = lv_act ).
|
|
ENDMETHOD.
|
|
|
|
METHOD grace_days_free.
|
|
DATA lv_act TYPE {{p}}if_overdraft=>ty_amount.
|
|
|
|
CALL METHOD mo_cut->calculate
|
|
EXPORTING
|
|
iv_amount = '30000.00'
|
|
iv_days = 3
|
|
iv_segment = {{p}}if_overdraft=>c_segment_private
|
|
RECEIVING
|
|
rv_interest = lv_act.
|
|
cl_abap_unit_assert=>assert_equals( exp = c_zero act = lv_act ).
|
|
ENDMETHOD.
|
|
|
|
METHOD tier_one_rate.
|
|
DATA lv_act TYPE {{p}}if_overdraft=>ty_amount.
|
|
DATA lv_exp TYPE {{p}}if_overdraft=>ty_amount.
|
|
|
|
lv_exp = '120.00'.
|
|
CALL METHOD mo_cut->calculate
|
|
EXPORTING
|
|
iv_amount = '1000.00'
|
|
iv_days = 363
|
|
iv_segment = {{p}}if_overdraft=>c_segment_private
|
|
RECEIVING
|
|
rv_interest = lv_act.
|
|
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_act ).
|
|
ENDMETHOD.
|
|
|
|
METHOD tier_two_boundary.
|
|
DATA lv_act TYPE {{p}}if_overdraft=>ty_amount.
|
|
DATA lv_exp TYPE {{p}}if_overdraft=>ty_amount.
|
|
|
|
lv_exp = '100.00'.
|
|
CALL METHOD mo_cut->calculate
|
|
EXPORTING
|
|
iv_amount = '1000.01'
|
|
iv_days = 363
|
|
iv_segment = {{p}}if_overdraft=>c_segment_private
|
|
RECEIVING
|
|
rv_interest = lv_act.
|
|
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_act
|
|
msg = 'amount above 1000' ).
|
|
ENDMETHOD.
|
|
|
|
METHOD tier_three_boundary.
|
|
DATA lv_act TYPE {{p}}if_overdraft=>ty_amount.
|
|
DATA lv_exp TYPE {{p}}if_overdraft=>ty_amount.
|
|
|
|
lv_exp = '400.00'.
|
|
CALL METHOD mo_cut->calculate
|
|
EXPORTING
|
|
iv_amount = '5000.01'
|
|
iv_days = 363
|
|
iv_segment = {{p}}if_overdraft=>c_segment_private
|
|
RECEIVING
|
|
rv_interest = lv_act.
|
|
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_act
|
|
msg = 'amount above 5000' ).
|
|
|
|
lv_exp = '1600.00'.
|
|
CALL METHOD mo_cut->calculate
|
|
EXPORTING
|
|
iv_amount = '20000.00'
|
|
iv_days = 363
|
|
iv_segment = {{p}}if_overdraft=>c_segment_private
|
|
RECEIVING
|
|
rv_interest = lv_act.
|
|
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_act
|
|
msg = 'amount 20000' ).
|
|
ENDMETHOD.
|
|
|
|
METHOD tier_four_boundary.
|
|
DATA lv_act TYPE {{p}}if_overdraft=>ty_amount.
|
|
DATA lv_exp TYPE {{p}}if_overdraft=>ty_amount.
|
|
|
|
lv_exp = '1300.00'.
|
|
CALL METHOD mo_cut->calculate
|
|
EXPORTING
|
|
iv_amount = '20000.01'
|
|
iv_days = 363
|
|
iv_segment = {{p}}if_overdraft=>c_segment_private
|
|
RECEIVING
|
|
rv_interest = lv_act.
|
|
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_act ).
|
|
ENDMETHOD.
|
|
|
|
METHOD business_discount.
|
|
DATA lv_act TYPE {{p}}if_overdraft=>ty_amount.
|
|
DATA lv_exp TYPE {{p}}if_overdraft=>ty_amount.
|
|
|
|
lv_exp = '13.33'.
|
|
CALL METHOD mo_cut->calculate
|
|
EXPORTING
|
|
iv_amount = '2000.00'
|
|
iv_days = 33
|
|
iv_segment = {{p}}if_overdraft=>c_segment_business
|
|
RECEIVING
|
|
rv_interest = lv_act.
|
|
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_act ).
|
|
ENDMETHOD.
|
|
|
|
METHOD business_rate_floor.
|
|
DATA lv_act TYPE {{p}}if_overdraft=>ty_amount.
|
|
DATA lv_exp TYPE {{p}}if_overdraft=>ty_amount.
|
|
|
|
lv_exp = '1500.00'.
|
|
CALL METHOD mo_cut->calculate
|
|
EXPORTING
|
|
iv_amount = '30000.00'
|
|
iv_days = 363
|
|
iv_segment = {{p}}if_overdraft=>c_segment_business
|
|
RECEIVING
|
|
rv_interest = lv_act.
|
|
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_act ).
|
|
ENDMETHOD.
|
|
|
|
METHOD minimum_interest.
|
|
DATA lv_act TYPE {{p}}if_overdraft=>ty_amount.
|
|
DATA lv_exp TYPE {{p}}if_overdraft=>ty_amount.
|
|
|
|
lv_exp = '5.00'.
|
|
CALL METHOD mo_cut->calculate
|
|
EXPORTING
|
|
iv_amount = '500.00'
|
|
iv_days = 10
|
|
iv_segment = {{p}}if_overdraft=>c_segment_private
|
|
RECEIVING
|
|
rv_interest = lv_act.
|
|
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_act ).
|
|
ENDMETHOD.
|
|
|
|
METHOD rounding_half_up.
|
|
DATA lv_act TYPE {{p}}if_overdraft=>ty_amount.
|
|
DATA lv_exp TYPE {{p}}if_overdraft=>ty_amount.
|
|
|
|
lv_exp = '5.01'.
|
|
CALL METHOD mo_cut->calculate
|
|
EXPORTING
|
|
iv_amount = '715.00'
|
|
iv_days = 24
|
|
iv_segment = {{p}}if_overdraft=>c_segment_private
|
|
RECEIVING
|
|
rv_interest = lv_act.
|
|
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_act
|
|
msg = 'exact half cent' ).
|
|
|
|
lv_exp = '67.56'.
|
|
CALL METHOD mo_cut->calculate
|
|
EXPORTING
|
|
iv_amount = '1234.56'
|
|
iv_days = 200
|
|
iv_segment = {{p}}if_overdraft=>c_segment_private
|
|
RECEIVING
|
|
rv_interest = lv_act.
|
|
cl_abap_unit_assert=>assert_equals( exp = lv_exp act = lv_act
|
|
msg = 'round up' ).
|
|
ENDMETHOD.
|
|
ENDCLASS.
|