CLASS ltc_licence_merger DEFINITION FINAL FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}if_licence_merge. METHODS setup. METHODS merges_two_lists FOR TESTING. METHODS ignores_invalid_rows FOR TESTING. METHODS normalizes_keys FOR TESTING. METHODS sorts_the_result FOR TESTING. METHODS empty_input FOR TESTING. ENDCLASS. CLASS ltc_licence_merger IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}licence_merger( ). ENDMETHOD. METHOD merges_two_lists. DATA(lt_primary) = VALUE {{p}}if_licence_merge=>tt_licences( ( product = 'ALPHA' cost_centre = '1000' seats = 5 unit_price = '100.00' ) ). DATA(lt_secondary) = VALUE {{p}}if_licence_merge=>tt_licences( ( product = 'ALPHA' cost_centre = '1000' seats = 2 unit_price = '120.00' ) ). DATA(lt_act) = mo_cut->merge( it_primary = lt_primary it_secondary = lt_secondary ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_act ) ). DATA(ls_row) = lt_act[ 1 ]. cl_abap_unit_assert=>assert_equals( exp = 7 act = ls_row-seats ). cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}if_licence_merge=>ty_price( '120.00' ) act = ls_row-unit_price ). ENDMETHOD. METHOD ignores_invalid_rows. DATA(lt_primary) = VALUE {{p}}if_licence_merge=>tt_licences( ( product = '' cost_centre = '1000' seats = 5 unit_price = '10.00' ) ( product = 'ALPHA' cost_centre = '1000' seats = 0 unit_price = '10.00' ) ( product = 'BETA' cost_centre = '2000' seats = 2 unit_price = '3.00' ) ). DATA(lt_secondary) = VALUE {{p}}if_licence_merge=>tt_licences( ). DATA(lt_act) = mo_cut->merge( it_primary = lt_primary it_secondary = lt_secondary ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_act ) ). DATA(ls_row) = lt_act[ 1 ]. cl_abap_unit_assert=>assert_equals( exp = 'BETA' act = ls_row-product ). ENDMETHOD. METHOD normalizes_keys. DATA(lt_primary) = VALUE {{p}}if_licence_merge=>tt_licences( ( product = ' alpha ' cost_centre = '1000' seats = 1 unit_price = '2.00' ) ). DATA(lt_secondary) = VALUE {{p}}if_licence_merge=>tt_licences( ( product = 'ALPHA' cost_centre = '1000' seats = 1 unit_price = '2.00' ) ). DATA(lt_act) = mo_cut->merge( it_primary = lt_primary it_secondary = lt_secondary ). cl_abap_unit_assert=>assert_equals( exp = 1 act = lines( lt_act ) ). DATA(ls_row) = lt_act[ 1 ]. cl_abap_unit_assert=>assert_equals( exp = 'ALPHA' act = ls_row-product ). cl_abap_unit_assert=>assert_equals( exp = 2 act = ls_row-seats ). ENDMETHOD. METHOD sorts_the_result. DATA(lt_primary) = VALUE {{p}}if_licence_merge=>tt_licences( ( product = 'BETA' cost_centre = '2000' seats = 1 unit_price = '1.00' ) ( product = 'ALPHA' cost_centre = '3000' seats = 1 unit_price = '1.00' ) ( product = 'ALPHA' cost_centre = '1000' seats = 1 unit_price = '1.00' ) ). DATA(lt_secondary) = VALUE {{p}}if_licence_merge=>tt_licences( ). DATA(lt_act) = mo_cut->merge( it_primary = lt_primary it_secondary = lt_secondary ). cl_abap_unit_assert=>assert_equals( exp = 3 act = lines( lt_act ) ). DATA(ls_row) = lt_act[ 1 ]. cl_abap_unit_assert=>assert_equals( exp = 'ALPHA' act = ls_row-product ). cl_abap_unit_assert=>assert_equals( exp = '1000' act = ls_row-cost_centre ). ls_row = lt_act[ 3 ]. cl_abap_unit_assert=>assert_equals( exp = 'BETA' act = ls_row-product ). ENDMETHOD. METHOD empty_input. DATA(lt_empty) = VALUE {{p}}if_licence_merge=>tt_licences( ). DATA(lt_act) = mo_cut->merge( it_primary = lt_empty it_secondary = lt_empty ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_act ) ). ENDMETHOD. ENDCLASS.