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.