Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com> Claude-Session: https://claude.ai/code/session_014aUaQeLnwbb1zTpN7kHeat
221 lines
9.4 KiB
ABAP
221 lines
9.4 KiB
ABAP
CLASS {{p}}t14_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC
|
|
FOR TESTING DURATION SHORT RISK LEVEL HARMLESS.
|
|
|
|
PRIVATE SECTION.
|
|
TYPES ty_orders TYPE STANDARD TABLE OF {{p}}roasts.
|
|
TYPES ty_totals TYPE STANDARD TABLE OF {{p}}blends.
|
|
|
|
METHODS run
|
|
IMPORTING it_orders TYPE ty_orders
|
|
EXPORTING et_totals TYPE ty_totals
|
|
ev_grand_total TYPE decfloat34
|
|
ev_subrc TYPE sysubrc.
|
|
|
|
METHODS sums_per_blend FOR TESTING.
|
|
METHODS sorted_by_total FOR TESTING.
|
|
METHODS tie_break_by_blend FOR TESTING.
|
|
METHODS ignores_zero FOR TESTING.
|
|
METHODS ignores_negative FOR TESTING.
|
|
METHODS empty_input FOR TESTING.
|
|
METHODS no_production_line FOR TESTING.
|
|
METHODS grand_total FOR TESTING.
|
|
METHODS single_line FOR TESTING.
|
|
METHODS one_blend_many_lines FOR TESTING.
|
|
ENDCLASS.
|
|
|
|
|
|
CLASS {{p}}t14_hidden IMPLEMENTATION.
|
|
|
|
METHOD run.
|
|
CLEAR: et_totals, ev_grand_total.
|
|
CALL FUNCTION '{{P}}ROAST_SUM'
|
|
EXPORTING
|
|
it_orders = it_orders
|
|
IMPORTING
|
|
et_totals = et_totals
|
|
ev_grand_total = ev_grand_total
|
|
EXCEPTIONS
|
|
OTHERS = 1.
|
|
ev_subrc = sy-subrc.
|
|
ENDMETHOD.
|
|
|
|
METHOD sums_per_blend.
|
|
DATA lt_orders TYPE ty_orders.
|
|
APPEND VALUE #( order_id = '0000000001' blend = 'PILS' quantity_kg = '10.000' ) TO lt_orders.
|
|
APPEND VALUE #( order_id = '0000000002' blend = 'PILS' quantity_kg = '5.000' ) TO lt_orders.
|
|
APPEND VALUE #( order_id = '0000000003' blend = 'WEIZ' quantity_kg = '7.000' ) TO lt_orders.
|
|
|
|
DATA lt_totals TYPE ty_totals.
|
|
run( EXPORTING it_orders = lt_orders
|
|
IMPORTING et_totals = lt_totals ev_subrc = DATA(lv_subrc) ).
|
|
|
|
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_totals ) ).
|
|
|
|
DATA ls_tot TYPE {{p}}blends.
|
|
READ TABLE lt_totals INTO ls_tot INDEX 1.
|
|
cl_abap_unit_assert=>assert_equals( exp = 'PILS' act = ls_tot-blend ).
|
|
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 15 ) act = CONV decfloat34( ls_tot-total_kg ) ).
|
|
|
|
READ TABLE lt_totals INTO ls_tot INDEX 2.
|
|
cl_abap_unit_assert=>assert_equals( exp = 'WEIZ' act = ls_tot-blend ).
|
|
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 7 ) act = CONV decfloat34( ls_tot-total_kg ) ).
|
|
ENDMETHOD.
|
|
|
|
METHOD sorted_by_total.
|
|
DATA lt_orders TYPE ty_orders.
|
|
APPEND VALUE #( order_id = '0000000001' blend = 'ARAB' quantity_kg = '5.000' ) TO lt_orders.
|
|
APPEND VALUE #( order_id = '0000000002' blend = 'ROBU' quantity_kg = '30.000' ) TO lt_orders.
|
|
APPEND VALUE #( order_id = '0000000003' blend = 'KONA' quantity_kg = '12.000' ) TO lt_orders.
|
|
|
|
DATA lt_totals TYPE ty_totals.
|
|
run( EXPORTING it_orders = lt_orders
|
|
IMPORTING et_totals = lt_totals ev_subrc = DATA(lv_subrc) ).
|
|
|
|
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 3 act = lines( lt_totals ) ).
|
|
|
|
DATA ls_tot TYPE {{p}}blends.
|
|
READ TABLE lt_totals INTO ls_tot INDEX 1.
|
|
cl_abap_unit_assert=>assert_equals( exp = 'ROBU' act = ls_tot-blend ).
|
|
READ TABLE lt_totals INTO ls_tot INDEX 2.
|
|
cl_abap_unit_assert=>assert_equals( exp = 'KONA' act = ls_tot-blend ).
|
|
READ TABLE lt_totals INTO ls_tot INDEX 3.
|
|
cl_abap_unit_assert=>assert_equals( exp = 'ARAB' act = ls_tot-blend ).
|
|
ENDMETHOD.
|
|
|
|
METHOD tie_break_by_blend.
|
|
DATA lt_orders TYPE ty_orders.
|
|
APPEND VALUE #( order_id = '0000000001' blend = 'ROBU' quantity_kg = '6.000' ) TO lt_orders.
|
|
APPEND VALUE #( order_id = '0000000002' blend = 'ARAB' quantity_kg = '6.000' ) TO lt_orders.
|
|
|
|
DATA lt_totals TYPE ty_totals.
|
|
run( EXPORTING it_orders = lt_orders
|
|
IMPORTING et_totals = lt_totals ev_subrc = DATA(lv_subrc) ).
|
|
|
|
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_totals ) ).
|
|
|
|
DATA ls_tot TYPE {{p}}blends.
|
|
READ TABLE lt_totals INTO ls_tot INDEX 1.
|
|
cl_abap_unit_assert=>assert_equals( exp = 'ARAB' act = ls_tot-blend ).
|
|
READ TABLE lt_totals INTO ls_tot INDEX 2.
|
|
cl_abap_unit_assert=>assert_equals( exp = 'ROBU' act = ls_tot-blend ).
|
|
ENDMETHOD.
|
|
|
|
METHOD ignores_zero.
|
|
DATA lt_orders TYPE ty_orders.
|
|
APPEND VALUE #( order_id = '0000000001' blend = 'PILS' quantity_kg = '0.000' ) TO lt_orders.
|
|
APPEND VALUE #( order_id = '0000000002' blend = 'WEIZ' quantity_kg = '4.000' ) TO lt_orders.
|
|
|
|
DATA lt_totals TYPE ty_totals.
|
|
run( EXPORTING it_orders = lt_orders
|
|
IMPORTING et_totals = lt_totals ev_subrc = DATA(lv_subrc) ).
|
|
|
|
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_totals ) ).
|
|
|
|
DATA ls_tot TYPE {{p}}blends.
|
|
READ TABLE lt_totals INTO ls_tot INDEX 1.
|
|
cl_abap_unit_assert=>assert_equals( exp = 'WEIZ' act = ls_tot-blend ).
|
|
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 4 ) act = CONV decfloat34( ls_tot-total_kg ) ).
|
|
ENDMETHOD.
|
|
|
|
METHOD ignores_negative.
|
|
DATA lt_orders TYPE ty_orders.
|
|
APPEND VALUE #( order_id = '0000000001' blend = 'PILS' quantity_kg = '-3.000' ) TO lt_orders.
|
|
APPEND VALUE #( order_id = '0000000002' blend = 'WEIZ' quantity_kg = '4.000' ) TO lt_orders.
|
|
|
|
DATA lt_totals TYPE ty_totals.
|
|
run( EXPORTING it_orders = lt_orders
|
|
IMPORTING et_totals = lt_totals ev_subrc = DATA(lv_subrc) ).
|
|
|
|
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_totals ) ).
|
|
|
|
DATA ls_tot TYPE {{p}}blends.
|
|
READ TABLE lt_totals INTO ls_tot INDEX 1.
|
|
cl_abap_unit_assert=>assert_equals( exp = 'WEIZ' act = ls_tot-blend ).
|
|
ENDMETHOD.
|
|
|
|
METHOD empty_input.
|
|
DATA lt_orders TYPE ty_orders.
|
|
DATA lt_totals TYPE ty_totals.
|
|
DATA lv_grand TYPE decfloat34 VALUE 99.
|
|
run( EXPORTING it_orders = lt_orders
|
|
IMPORTING et_totals = lt_totals ev_grand_total = lv_grand ev_subrc = DATA(lv_subrc) ).
|
|
|
|
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_totals ) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 0 ) act = lv_grand ).
|
|
ENDMETHOD.
|
|
|
|
METHOD no_production_line.
|
|
DATA lt_orders TYPE ty_orders.
|
|
APPEND VALUE #( order_id = '0000000001' blend = 'PILS' quantity_kg = '0.000' ) TO lt_orders.
|
|
APPEND VALUE #( order_id = '0000000002' blend = 'WEIZ' quantity_kg = '-8.000' ) TO lt_orders.
|
|
|
|
DATA lt_totals TYPE ty_totals.
|
|
DATA lv_grand TYPE decfloat34.
|
|
run( EXPORTING it_orders = lt_orders
|
|
IMPORTING et_totals = lt_totals ev_grand_total = lv_grand ev_subrc = DATA(lv_subrc) ).
|
|
|
|
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_totals ) ).
|
|
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 0 ) act = lv_grand ).
|
|
ENDMETHOD.
|
|
|
|
METHOD grand_total.
|
|
DATA lt_orders TYPE ty_orders.
|
|
APPEND VALUE #( order_id = '0000000001' blend = 'PILS' quantity_kg = '10.000' ) TO lt_orders.
|
|
APPEND VALUE #( order_id = '0000000002' blend = 'WEIZ' quantity_kg = '2.000' ) TO lt_orders.
|
|
APPEND VALUE #( order_id = '0000000003' blend = 'KOLS' quantity_kg = '8.000' ) TO lt_orders.
|
|
APPEND VALUE #( order_id = '0000000004' blend = 'PILS' quantity_kg = '5.000' ) TO lt_orders.
|
|
|
|
DATA lt_totals TYPE ty_totals.
|
|
DATA lv_grand TYPE decfloat34.
|
|
run( EXPORTING it_orders = lt_orders
|
|
IMPORTING et_totals = lt_totals ev_grand_total = lv_grand ev_subrc = DATA(lv_subrc) ).
|
|
|
|
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ).
|
|
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 25 ) act = lv_grand ).
|
|
ENDMETHOD.
|
|
|
|
METHOD single_line.
|
|
DATA lt_orders TYPE ty_orders.
|
|
APPEND VALUE #( order_id = '0000000001' blend = 'KONA' quantity_kg = '3.000' ) TO lt_orders.
|
|
|
|
DATA lt_totals TYPE ty_totals.
|
|
run( EXPORTING it_orders = lt_orders
|
|
IMPORTING et_totals = lt_totals ev_subrc = DATA(lv_subrc) ).
|
|
|
|
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_totals ) ).
|
|
|
|
DATA ls_tot TYPE {{p}}blends.
|
|
READ TABLE lt_totals INTO ls_tot INDEX 1.
|
|
cl_abap_unit_assert=>assert_equals( exp = 'KONA' act = ls_tot-blend ).
|
|
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 3 ) act = CONV decfloat34( ls_tot-total_kg ) ).
|
|
ENDMETHOD.
|
|
|
|
METHOD one_blend_many_lines.
|
|
DATA lt_orders TYPE ty_orders.
|
|
APPEND VALUE #( order_id = '0000000001' blend = 'PILS' quantity_kg = '1.000' ) TO lt_orders.
|
|
APPEND VALUE #( order_id = '0000000002' blend = 'PILS' quantity_kg = '2.000' ) TO lt_orders.
|
|
APPEND VALUE #( order_id = '0000000003' blend = 'PILS' quantity_kg = '3.000' ) TO lt_orders.
|
|
APPEND VALUE #( order_id = '0000000004' blend = 'PILS' quantity_kg = '4.000' ) TO lt_orders.
|
|
|
|
DATA lt_totals TYPE ty_totals.
|
|
run( EXPORTING it_orders = lt_orders
|
|
IMPORTING et_totals = lt_totals ev_subrc = DATA(lv_subrc) ).
|
|
|
|
cl_abap_unit_assert=>assert_equals( exp = 0 act = lv_subrc ).
|
|
cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_totals ) ).
|
|
|
|
DATA ls_tot TYPE {{p}}blends.
|
|
READ TABLE lt_totals INTO ls_tot INDEX 1.
|
|
cl_abap_unit_assert=>assert_equals( exp = 'PILS' act = ls_tot-blend ).
|
|
cl_abap_unit_assert=>assert_equals( exp = CONV decfloat34( 10 ) act = CONV decfloat34( ls_tot-total_kg ) ).
|
|
ENDMETHOD.
|
|
ENDCLASS.
|