CLASS ltc_log_merger DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}log_merger. DATA mt_empty TYPE {{p}}log_merger=>tt_log. METHODS setup. METHODS merges_distinct_logs FOR TESTING. METHODS keeps_first_duplicate FOR TESTING. METHODS removes_small_logs FOR TESTING. METHODS sorts_result FOR TESTING. METHODS empty_input_is_empty FOR TESTING. METHODS counts_per_district FOR TESTING. ENDCLASS. CLASS ltc_log_merger IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}log_merger( ). ENDMETHOD. METHOD merges_distinct_logs. DATA(lt_result) = mo_cut->combine( it_first = VALUE #( ( log_no = 'LOG0000001' district = 'A001' length_cm = 500 diameter_cm = 30 ) ) it_second = VALUE #( ( log_no = 'LOG0000002' district = 'B001' length_cm = 600 diameter_cm = 40 ) ) ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_result ) ). cl_abap_unit_assert=>assert_equals( exp = 'LOG0000001' act = lt_result[ 1 ]-log_no ). cl_abap_unit_assert=>assert_equals( exp = 'LOG0000002' act = lt_result[ 2 ]-log_no ). ENDMETHOD. METHOD keeps_first_duplicate. DATA(lt_result) = mo_cut->combine( it_first = VALUE #( ( log_no = 'LOG0000001' district = 'A001' length_cm = 500 diameter_cm = 30 ) ) it_second = VALUE #( ( log_no = 'LOG0000001' district = 'B001' length_cm = 900 diameter_cm = 50 ) ) ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_result ) ). cl_abap_unit_assert=>assert_equals( exp = 'A001' act = lt_result[ 1 ]-district ). ENDMETHOD. METHOD removes_small_logs. DATA(lt_result) = mo_cut->combine( it_first = VALUE #( ( log_no = 'LOG0000001' district = 'A001' length_cm = 150 diameter_cm = 30 ) ) it_second = VALUE #( ( log_no = 'LOG0000002' district = 'A001' length_cm = 500 diameter_cm = 15 ) ) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_result ) ). ENDMETHOD. METHOD sorts_result. DATA(lt_result) = mo_cut->combine( it_first = VALUE #( ( log_no = 'LOG0000002' district = 'A001' length_cm = 500 diameter_cm = 30 ) ) it_second = VALUE #( ( log_no = 'LOG0000001' district = 'B001' length_cm = 500 diameter_cm = 30 ) ) ). cl_abap_unit_assert=>assert_equals( exp = 'LOG0000001' act = lt_result[ 1 ]-log_no ). cl_abap_unit_assert=>assert_equals( exp = 'LOG0000002' act = lt_result[ 2 ]-log_no ). ENDMETHOD. METHOD empty_input_is_empty. DATA(lt_result) = mo_cut->combine( it_first = mt_empty it_second = mt_empty ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_result ) ). ENDMETHOD. METHOD counts_per_district. DATA(lt_stat) = mo_cut->count_by_district( it_log = VALUE #( ( log_no = 'LOG0000001' district = 'A001' length_cm = 500 diameter_cm = 30 ) ( log_no = 'LOG0000002' district = 'A001' length_cm = 300 diameter_cm = 25 ) ) ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_stat ) ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lt_stat[ 1 ]-log_qty ). cl_abap_unit_assert=>assert_equals( exp = 800 act = lt_stat[ 1 ]-total_length_cm ). ENDMETHOD. ENDCLASS.