CLASS ltc_harvest_evaluator DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}harvest_evaluator. METHODS setup. METHODS sums_quantities FOR TESTING. METHODS counts_members_once FOR TESTING. METHODS ignores_unknown_member FOR TESTING. METHODS ignores_zero_quantity FOR TESTING. METHODS sorts_by_total FOR TESTING. ENDCLASS. CLASS ltc_harvest_evaluator IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}harvest_evaluator( ). ENDMETHOD. METHOD sums_quantities. 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 = 10 ) ( member_id = 'M00001' variety = 'RIES' quantity_kg = 15 ) ). DATA(lt_result) = mo_cut->evaluate( it_report = lt_report it_member = lt_member ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ). cl_abap_unit_assert=>assert_equals( exp = 25 act = lt_result[ 1 ]-total_kg ). ENDMETHOD. METHOD counts_members_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 = 5 ) ( member_id = 'M00002' variety = 'RIES' quantity_kg = 5 ) ). DATA(lt_result) = mo_cut->evaluate( it_report = lt_report it_member = lt_member ). cl_abap_unit_assert=>assert_equals( exp = 20 act = lt_result[ 1 ]-total_kg ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lt_result[ 1 ]-member_count ). ENDMETHOD. METHOD ignores_unknown_member. 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 = 10 ) ( member_id = 'M00009' variety = 'RIES' quantity_kg = 99 ) ). DATA(lt_result) = mo_cut->evaluate( it_report = lt_report it_member = lt_member ). cl_abap_unit_assert=>assert_equals( exp = 10 act = lt_result[ 1 ]-total_kg ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lt_result[ 1 ]-member_count ). ENDMETHOD. METHOD ignores_zero_quantity. 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 = 40 ) ). DATA(lt_result) = mo_cut->evaluate( it_report = lt_report it_member = lt_member ). cl_abap_unit_assert=>assert_equals( exp = 40 act = lt_result[ 1 ]-total_kg ). ENDMETHOD. METHOD sorts_by_total. 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 = 'RIES' quantity_kg = 5 ) ( member_id = 'M00002' variety = 'SPAE' quantity_kg = 30 ) ( member_id = 'M00003' variety = 'SILV' quantity_kg = 20 ) ). DATA(lt_result) = mo_cut->evaluate( it_report = lt_report it_member = lt_member ). cl_abap_unit_assert=>assert_equals( exp = 'SPAE' act = lt_result[ 1 ]-variety ). cl_abap_unit_assert=>assert_equals( exp = 'SILV' act = lt_result[ 2 ]-variety ). cl_abap_unit_assert=>assert_equals( exp = 'RIES' act = lt_result[ 3 ]-variety ). ENDMETHOD. ENDCLASS.