Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
158 lines
6.2 KiB
ABAP
158 lines
6.2 KiB
ABAP
CLASS {{p}}t_prov_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
|
|
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
|
PRIVATE SECTION.
|
|
DATA mo_cut TYPE REF TO {{p}}provision_calc.
|
|
|
|
METHODS setup.
|
|
METHODS empty_order_raises FOR TESTING.
|
|
METHODS too_many_lines_raises FOR TESTING.
|
|
METHODS material_missing_raises FOR TESTING.
|
|
METHODS quantity_invalid_raises FOR TESTING.
|
|
METHODS price_negative_raises FOR TESTING.
|
|
METHODS duplicate_material_raises FOR TESTING.
|
|
METHODS limit_exceeded_raises FOR TESTING.
|
|
METHODS limit_boundary_is_ok FOR TESTING.
|
|
METHODS valid_order_is_ok FOR TESTING.
|
|
METHODS value_is_sum FOR TESTING.
|
|
METHODS value_rounds_total FOR TESTING.
|
|
METHODS invalid_order_propagates FOR TESTING.
|
|
|
|
METHODS expect_reason
|
|
IMPORTING it_lines TYPE {{p}}provision_calc=>tt_lines
|
|
iv_reason TYPE {{p}}provision_calc=>ty_reason.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}t_prov_hidden IMPLEMENTATION.
|
|
METHOD setup.
|
|
mo_cut = NEW {{p}}provision_calc( ).
|
|
ENDMETHOD.
|
|
|
|
METHOD expect_reason.
|
|
TRY.
|
|
mo_cut->check_order( it_lines ).
|
|
cl_abap_unit_assert=>fail( msg = |Expected reason { iv_reason }| ).
|
|
CATCH {{p}}cx_prov_error INTO DATA(lx_error).
|
|
cl_abap_unit_assert=>assert_equals( exp = iv_reason act = lx_error->reason ).
|
|
ENDTRY.
|
|
ENDMETHOD.
|
|
|
|
METHOD empty_order_raises.
|
|
DATA lt_lines TYPE {{p}}provision_calc=>tt_lines.
|
|
expect_reason( it_lines = lt_lines
|
|
iv_reason = {{p}}provision_calc=>c_empty_order ).
|
|
ENDMETHOD.
|
|
|
|
METHOD too_many_lines_raises.
|
|
DATA lt_lines TYPE {{p}}provision_calc=>tt_lines.
|
|
DATA ls_line TYPE {{p}}provision_calc=>ty_line.
|
|
DO 1000 TIMES.
|
|
ls_line = VALUE #( material = |M{ sy-index }| quantity = 1 price = 1 ).
|
|
INSERT ls_line INTO TABLE lt_lines.
|
|
ENDDO.
|
|
expect_reason( it_lines = lt_lines
|
|
iv_reason = {{p}}provision_calc=>c_too_many_lines ).
|
|
ENDMETHOD.
|
|
|
|
METHOD material_missing_raises.
|
|
DATA lt_lines TYPE {{p}}provision_calc=>tt_lines.
|
|
lt_lines = VALUE #( ( material = ` ` quantity = 1 price = 1 ) ).
|
|
expect_reason( it_lines = lt_lines
|
|
iv_reason = {{p}}provision_calc=>c_material_missing ).
|
|
ENDMETHOD.
|
|
|
|
METHOD quantity_invalid_raises.
|
|
DATA lt_lines TYPE {{p}}provision_calc=>tt_lines.
|
|
lt_lines = VALUE #( ( material = 'ROPE' quantity = 0 price = 1 ) ).
|
|
expect_reason( it_lines = lt_lines
|
|
iv_reason = {{p}}provision_calc=>c_quantity_invalid ).
|
|
|
|
lt_lines = VALUE #( ( material = 'ROPE' quantity = -1 price = 1 ) ).
|
|
expect_reason( it_lines = lt_lines
|
|
iv_reason = {{p}}provision_calc=>c_quantity_invalid ).
|
|
ENDMETHOD.
|
|
|
|
METHOD price_negative_raises.
|
|
DATA lt_lines TYPE {{p}}provision_calc=>tt_lines.
|
|
lt_lines = VALUE #( ( material = 'ROPE' quantity = 1 price = -1 ) ).
|
|
expect_reason( it_lines = lt_lines
|
|
iv_reason = {{p}}provision_calc=>c_price_negative ).
|
|
ENDMETHOD.
|
|
|
|
METHOD duplicate_material_raises.
|
|
DATA lt_lines TYPE {{p}}provision_calc=>tt_lines.
|
|
lt_lines = VALUE #( ( material = 'ROPE' quantity = 1 price = 1 )
|
|
( material = 'ROPE' quantity = 2 price = 1 ) ).
|
|
expect_reason( it_lines = lt_lines
|
|
iv_reason = {{p}}provision_calc=>c_duplicate_material ).
|
|
ENDMETHOD.
|
|
|
|
METHOD limit_exceeded_raises.
|
|
DATA lt_lines TYPE {{p}}provision_calc=>tt_lines.
|
|
lt_lines = VALUE #( ( material = 'ENGINE' quantity = 1 price = '100000.01' ) ).
|
|
expect_reason( it_lines = lt_lines
|
|
iv_reason = {{p}}provision_calc=>c_limit_exceeded ).
|
|
ENDMETHOD.
|
|
|
|
METHOD limit_boundary_is_ok.
|
|
DATA lt_lines TYPE {{p}}provision_calc=>tt_lines.
|
|
lt_lines = VALUE #( ( material = 'ENGINE' quantity = 1 price = '100000.00' ) ).
|
|
TRY.
|
|
mo_cut->check_order( lt_lines ).
|
|
CATCH {{p}}cx_prov_error INTO DATA(lx_error).
|
|
cl_abap_unit_assert=>fail( msg = |Unexpected reason { lx_error->reason }| ).
|
|
ENDTRY.
|
|
ENDMETHOD.
|
|
|
|
METHOD valid_order_is_ok.
|
|
DATA lt_lines TYPE {{p}}provision_calc=>tt_lines.
|
|
lt_lines = VALUE #( ( material = 'ROPE' quantity = 2 price = '3.50' )
|
|
( material = 'BOLT' quantity = 3 price = '1.25' ) ).
|
|
TRY.
|
|
mo_cut->check_order( lt_lines ).
|
|
CATCH {{p}}cx_prov_error INTO DATA(lx_error).
|
|
cl_abap_unit_assert=>fail( msg = |Unexpected reason { lx_error->reason }| ).
|
|
ENDTRY.
|
|
ENDMETHOD.
|
|
|
|
METHOD value_is_sum.
|
|
DATA lt_lines TYPE {{p}}provision_calc=>tt_lines.
|
|
lt_lines = VALUE #( ( material = 'ROPE' quantity = 2 price = '3.50' )
|
|
( material = 'BOLT' quantity = 3 price = '1.25' ) ).
|
|
DATA lv_expected TYPE {{p}}provision_calc=>ty_amount VALUE '10.75'.
|
|
DATA lv_value TYPE {{p}}provision_calc=>ty_amount.
|
|
TRY.
|
|
lv_value = mo_cut->calculate_value( lt_lines ).
|
|
CATCH {{p}}cx_prov_error INTO DATA(lx_error).
|
|
cl_abap_unit_assert=>fail( msg = |Unexpected reason { lx_error->reason }| ).
|
|
ENDTRY.
|
|
cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lv_value ).
|
|
ENDMETHOD.
|
|
|
|
METHOD value_rounds_total.
|
|
DATA lt_lines TYPE {{p}}provision_calc=>tt_lines.
|
|
lt_lines = VALUE #( ( material = 'ROPE' quantity = '1.005' price = '1.00' )
|
|
( material = 'BOLT' quantity = '1.005' price = '1.00' ) ).
|
|
DATA lv_expected TYPE {{p}}provision_calc=>ty_amount VALUE '2.01'.
|
|
DATA lv_value TYPE {{p}}provision_calc=>ty_amount.
|
|
TRY.
|
|
lv_value = mo_cut->calculate_value( lt_lines ).
|
|
CATCH {{p}}cx_prov_error INTO DATA(lx_error).
|
|
cl_abap_unit_assert=>fail( msg = |Unexpected reason { lx_error->reason }| ).
|
|
ENDTRY.
|
|
cl_abap_unit_assert=>assert_equals( exp = lv_expected act = lv_value ).
|
|
ENDMETHOD.
|
|
|
|
METHOD invalid_order_propagates.
|
|
DATA lt_lines TYPE {{p}}provision_calc=>tt_lines.
|
|
lt_lines = VALUE #( ( material = '' quantity = 1 price = 1 ) ).
|
|
TRY.
|
|
mo_cut->calculate_value( lt_lines ).
|
|
cl_abap_unit_assert=>fail( msg = 'Expected reason MATERIAL_MISSING' ).
|
|
CATCH {{p}}cx_prov_error INTO DATA(lx_error).
|
|
cl_abap_unit_assert=>assert_equals( exp = {{p}}provision_calc=>c_material_missing
|
|
act = lx_error->reason ).
|
|
ENDTRY.
|
|
ENDMETHOD.
|
|
ENDCLASS.
|