CLASS {{p}}harvest_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}harvest_evaluator. METHODS setup. METHODS assert_rows IMPORTING it_act TYPE {{p}}if_harvest=>tt_result it_exp TYPE {{p}}if_harvest=>tt_result iv_msg TYPE string. METHODS empty_input FOR TESTING. METHODS unknown_member_ignored FOR TESTING. METHODS zero_quantity_ignored FOR TESTING. METHODS negative_quantity_ignored FOR TESTING. METHODS same_member_counts_once FOR TESTING. METHODS two_varieties_separated FOR TESTING. METHODS sorted_by_total_desc FOR TESTING. METHODS tie_broken_by_variety FOR TESTING. METHODS all_reports_ignored FOR TESTING. METHODS member_without_report FOR TESTING. ENDCLASS. CLASS {{p}}harvest_hidden IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}harvest_evaluator( ). ENDMETHOD. METHOD assert_rows. cl_abap_unit_assert=>assert_equals( exp = lines( it_exp ) act = lines( it_act ) msg = |{ iv_msg }: number of rows| ). LOOP AT it_exp ASSIGNING FIELD-SYMBOL(). READ TABLE it_act ASSIGNING FIELD-SYMBOL() INDEX sy-tabix. IF sy-subrc <> 0. RETURN. ENDIF. cl_abap_unit_assert=>assert_equals( exp = -variety act = -variety msg = |{ iv_msg }: variety| ). cl_abap_unit_assert=>assert_equals( exp = -total_kg act = -total_kg msg = |{ iv_msg }: total_kg| ). cl_abap_unit_assert=>assert_equals( exp = -member_count act = -member_count msg = |{ iv_msg }: member_count| ). ENDLOOP. ENDMETHOD. METHOD empty_input. DATA lt_report TYPE {{p}}if_harvest=>tt_report. DATA lt_member TYPE {{p}}if_harvest=>tt_member. DATA(lt_result) = mo_cut->evaluate( it_report = lt_report it_member = lt_member ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_result ) ). ENDMETHOD. METHOD unknown_member_ignored. DATA(lt_member) = VALUE {{p}}if_harvest=>tt_member( ( member_id = 'M00001' member_name = 'Hof Adler' ) ( member_id = 'M00002' member_name = 'Hof Birke' ) ). DATA(lt_report) = VALUE {{p}}if_harvest=>tt_report( ( member_id = 'M00001' variety = 'RIES' quantity_kg = 100 ) ( member_id = 'M00009' variety = 'RIES' quantity_kg = 50 ) ). DATA(lt_result) = mo_cut->evaluate( it_report = lt_report it_member = lt_member ). assert_rows( it_act = lt_result it_exp = VALUE #( ( variety = 'RIES' total_kg = 100 member_count = 1 ) ) iv_msg = 'unknown member' ). ENDMETHOD. METHOD zero_quantity_ignored. DATA(lt_member) = VALUE {{p}}if_harvest=>tt_member( ( member_id = 'M00001' member_name = 'Hof Adler' ) ). DATA(lt_report) = VALUE {{p}}if_harvest=>tt_report( ( member_id = 'M00001' variety = 'RIES' quantity_kg = 0 ) ( member_id = 'M00001' variety = 'RIES' quantity_kg = 30 ) ). DATA(lt_result) = mo_cut->evaluate( it_report = lt_report it_member = lt_member ). assert_rows( it_act = lt_result it_exp = VALUE #( ( variety = 'RIES' total_kg = 30 member_count = 1 ) ) iv_msg = 'zero quantity' ). ENDMETHOD. METHOD negative_quantity_ignored. DATA(lt_member) = VALUE {{p}}if_harvest=>tt_member( ( member_id = 'M00001' member_name = 'Hof Adler' ) ). DATA(lt_report) = VALUE {{p}}if_harvest=>tt_report( ( member_id = 'M00001' variety = 'RIES' quantity_kg = -5 ) ( member_id = 'M00001' variety = 'RIES' quantity_kg = 20 ) ). DATA(lt_result) = mo_cut->evaluate( it_report = lt_report it_member = lt_member ). assert_rows( it_act = lt_result it_exp = VALUE #( ( variety = 'RIES' total_kg = 20 member_count = 1 ) ) iv_msg = 'negative quantity' ). ENDMETHOD. METHOD same_member_counts_once. DATA(lt_member) = VALUE {{p}}if_harvest=>tt_member( ( member_id = 'M00001' member_name = 'Hof Adler' ) ( member_id = 'M00002' member_name = 'Hof Birke' ) ). DATA(lt_report) = VALUE {{p}}if_harvest=>tt_report( ( member_id = 'M00001' variety = 'RIES' quantity_kg = 10 ) ( member_id = 'M00001' variety = 'RIES' quantity_kg = 20 ) ( member_id = 'M00002' variety = 'RIES' quantity_kg = 5 ) ). DATA(lt_result) = mo_cut->evaluate( it_report = lt_report it_member = lt_member ). assert_rows( it_act = lt_result it_exp = VALUE #( ( variety = 'RIES' total_kg = 35 member_count = 2 ) ) iv_msg = 'same member' ). ENDMETHOD. METHOD two_varieties_separated. DATA(lt_member) = VALUE {{p}}if_harvest=>tt_member( ( member_id = 'M00001' member_name = 'Hof Adler' ) ( member_id = 'M00002' member_name = 'Hof Birke' ) ). DATA(lt_report) = VALUE {{p}}if_harvest=>tt_report( ( member_id = 'M00001' variety = 'RIES' quantity_kg = 10 ) ( member_id = 'M00002' variety = 'RIES' quantity_kg = 10 ) ( member_id = 'M00001' variety = 'SPAE' quantity_kg = 7 ) ). DATA(lt_result) = mo_cut->evaluate( it_report = lt_report it_member = lt_member ). assert_rows( it_act = lt_result it_exp = VALUE #( ( variety = 'RIES' total_kg = 20 member_count = 2 ) ( variety = 'SPAE' total_kg = 7 member_count = 1 ) ) iv_msg = 'two varieties' ). ENDMETHOD. METHOD sorted_by_total_desc. DATA(lt_member) = VALUE {{p}}if_harvest=>tt_member( ( member_id = 'M00001' member_name = 'Hof Adler' ) ( member_id = 'M00002' member_name = 'Hof Birke' ) ( member_id = 'M00003' member_name = 'Hof Zeder' ) ( member_id = 'M00004' member_name = 'Hof Eiche' ) ). DATA(lt_report) = VALUE {{p}}if_harvest=>tt_report( ( member_id = 'M00001' variety = 'RIES' quantity_kg = 10 ) ( member_id = 'M00002' variety = 'SPAE' quantity_kg = 30 ) ( member_id = 'M00003' variety = 'SILV' quantity_kg = 20 ) ( member_id = 'M00004' variety = 'SPAE' quantity_kg = 5 ) ). DATA(lt_result) = mo_cut->evaluate( it_report = lt_report it_member = lt_member ). assert_rows( it_act = lt_result it_exp = VALUE #( ( variety = 'SPAE' total_kg = 35 member_count = 2 ) ( variety = 'SILV' total_kg = 20 member_count = 1 ) ( variety = 'RIES' total_kg = 10 member_count = 1 ) ) iv_msg = 'sort by total' ). ENDMETHOD. METHOD tie_broken_by_variety. DATA(lt_member) = VALUE {{p}}if_harvest=>tt_member( ( member_id = 'M00001' member_name = 'Hof Adler' ) ( member_id = 'M00002' member_name = 'Hof Birke' ) ( member_id = 'M00003' member_name = 'Hof Zeder' ) ). DATA(lt_report) = VALUE {{p}}if_harvest=>tt_report( ( member_id = 'M00001' variety = 'SPAE' quantity_kg = 10 ) ( member_id = 'M00002' variety = 'RIES' quantity_kg = 10 ) ( member_id = 'M00003' variety = 'SILV' quantity_kg = 10 ) ). DATA(lt_result) = mo_cut->evaluate( it_report = lt_report it_member = lt_member ). assert_rows( it_act = lt_result it_exp = VALUE #( ( variety = 'RIES' total_kg = 10 member_count = 1 ) ( variety = 'SILV' total_kg = 10 member_count = 1 ) ( variety = 'SPAE' total_kg = 10 member_count = 1 ) ) iv_msg = 'tie by variety' ). ENDMETHOD. METHOD all_reports_ignored. DATA(lt_member) = VALUE {{p}}if_harvest=>tt_member( ( member_id = 'M00001' member_name = 'Hof Adler' ) ). DATA(lt_report) = VALUE {{p}}if_harvest=>tt_report( ( member_id = 'M00009' variety = 'RIES' quantity_kg = 10 ) ( member_id = 'M00001' variety = 'RIES' quantity_kg = 0 ) ( member_id = 'M00001' variety = 'SPAE' quantity_kg = -3 ) ). DATA(lt_result) = mo_cut->evaluate( it_report = lt_report it_member = lt_member ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_result ) ). ENDMETHOD. METHOD member_without_report. DATA(lt_member) = VALUE {{p}}if_harvest=>tt_member( ( member_id = 'M00001' member_name = 'Hof Adler' ) ( member_id = 'M00002' member_name = 'Hof Birke' ) ). DATA(lt_report) = VALUE {{p}}if_harvest=>tt_report( ( member_id = 'M00001' variety = 'RIES' quantity_kg = 5 ) ). DATA(lt_result) = mo_cut->evaluate( it_report = lt_report it_member = lt_member ). assert_rows( it_act = lt_result it_exp = VALUE #( ( variety = 'RIES' total_kg = 5 member_count = 1 ) ) iv_msg = 'member without report' ). ENDMETHOD. ENDCLASS.