CLASS {{p}}t_lic_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}if_licence_merge. METHODS setup. METHODS merges_both_lists FOR TESTING. METHODS sums_duplicates FOR TESTING. METHODS ignores_zero_seats FOR TESTING. METHODS ignores_negative_seats FOR TESTING. METHODS ignores_blank_keys FOR TESTING. METHODS normalizes_keys FOR TESTING. METHODS sorts_result FOR TESTING. METHODS keeps_secondary_only FOR TESTING. METHODS empty_lists FOR TESTING. METHODS takes_highest_price FOR TESTING. ENDCLASS. CLASS {{p}}t_lic_hidden IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}licence_merger( ). ENDMETHOD. METHOD merges_both_lists. DATA(lt_primary) = VALUE {{p}}if_licence_merge=>tt_licences( ( product = 'ALPHA' cost_centre = '1000' seats = 5 unit_price = '100.00' ) ( product = 'BETA' cost_centre = '2000' seats = 3 unit_price = '50.00' ) ). DATA(lt_secondary) = VALUE {{p}}if_licence_merge=>tt_licences( ( product = 'ALPHA' cost_centre = '1000' seats = 2 unit_price = '120.00' ) ( product = 'GAMMA' cost_centre = '3000' seats = 4 unit_price = '10.00' ) ). 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 ). 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 ). ls_row = lt_act[ 3 ]. cl_abap_unit_assert=>assert_equals( exp = 'GAMMA' act = ls_row-product ). cl_abap_unit_assert=>assert_equals( exp = 4 act = ls_row-seats ). ENDMETHOD. METHOD sums_duplicates. DATA(lt_primary) = VALUE {{p}}if_licence_merge=>tt_licences( ( product = 'ALPHA' cost_centre = '1000' seats = 5 unit_price = '100.00' ) ( product = 'ALPHA' cost_centre = '1000' seats = 3 unit_price = '90.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 = 8 act = ls_row-seats ). cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}if_licence_merge=>ty_price( '100.00' ) act = ls_row-unit_price ). ENDMETHOD. METHOD ignores_zero_seats. DATA(lt_primary) = VALUE {{p}}if_licence_merge=>tt_licences( ( product = 'ALPHA' cost_centre = '1000' seats = 0 unit_price = '100.00' ) ( product = 'BETA' cost_centre = '2000' seats = 4 unit_price = '10.00' ) ). DATA(lt_secondary) = VALUE {{p}}if_licence_merge=>tt_licences( ( product = 'ALPHA' cost_centre = '1000' seats = 0 unit_price = '50.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 = 'BETA' act = ls_row-product ). cl_abap_unit_assert=>assert_equals( exp = 4 act = ls_row-seats ). ENDMETHOD. METHOD ignores_negative_seats. DATA(lt_primary) = VALUE {{p}}if_licence_merge=>tt_licences( ( product = 'ALPHA' cost_centre = '1000' seats = -3 unit_price = '100.00' ) ). DATA(lt_secondary) = VALUE {{p}}if_licence_merge=>tt_licences( ( product = 'BETA' cost_centre = '2000' seats = 2 unit_price = '10.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 = 'BETA' act = ls_row-product ). cl_abap_unit_assert=>assert_equals( exp = 2 act = ls_row-seats ). ENDMETHOD. METHOD ignores_blank_keys. DATA(lt_primary) = VALUE {{p}}if_licence_merge=>tt_licences( ( product = '' cost_centre = '1000' seats = 5 unit_price = '10.00' ) ( product = 'ALPHA' cost_centre = '' seats = 5 unit_price = '10.00' ) ( product = ' ' cost_centre = '2000' seats = 5 unit_price = '10.00' ) ( product = 'BETA' cost_centre = '2000' seats = 1 unit_price = '2.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 ). cl_abap_unit_assert=>assert_equals( exp = '2000' act = ls_row-cost_centre ). cl_abap_unit_assert=>assert_equals( exp = 1 act = ls_row-seats ). ENDMETHOD. METHOD normalizes_keys. DATA(lt_primary) = VALUE {{p}}if_licence_merge=>tt_licences( ( product = 'alpha' cost_centre = '1000' seats = 2 unit_price = '10.00' ) ( product = ' beta ' cost_centre = '2000' seats = 1 unit_price = '5.00' ) ). DATA(lt_secondary) = VALUE {{p}}if_licence_merge=>tt_licences( ( product = 'ALPHA' cost_centre = '1000' seats = 3 unit_price = '20.00' ) ). DATA(lt_act) = mo_cut->merge( it_primary = lt_primary it_secondary = lt_secondary ). cl_abap_unit_assert=>assert_equals( exp = 2 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 ). cl_abap_unit_assert=>assert_equals( exp = 5 act = ls_row-seats ). ls_row = lt_act[ 2 ]. cl_abap_unit_assert=>assert_equals( exp = 'BETA' act = ls_row-product ). cl_abap_unit_assert=>assert_equals( exp = '2000' act = ls_row-cost_centre ). ENDMETHOD. METHOD sorts_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[ 2 ]. cl_abap_unit_assert=>assert_equals( exp = 'ALPHA' act = ls_row-product ). cl_abap_unit_assert=>assert_equals( exp = '3000' act = ls_row-cost_centre ). ls_row = lt_act[ 3 ]. cl_abap_unit_assert=>assert_equals( exp = 'BETA' act = ls_row-product ). cl_abap_unit_assert=>assert_equals( exp = '2000' act = ls_row-cost_centre ). ENDMETHOD. METHOD keeps_secondary_only. DATA(lt_primary) = VALUE {{p}}if_licence_merge=>tt_licences( ( product = 'ALPHA' cost_centre = '1000' seats = 1 unit_price = '5.00' ) ). DATA(lt_secondary) = VALUE {{p}}if_licence_merge=>tt_licences( ( product = 'DELTA' cost_centre = '4000' seats = 2 unit_price = '7.00' ) ). DATA(lt_act) = mo_cut->merge( it_primary = lt_primary it_secondary = lt_secondary ). cl_abap_unit_assert=>assert_equals( exp = 2 act = lines( lt_act ) ). DATA(ls_row) = lt_act[ 2 ]. cl_abap_unit_assert=>assert_equals( exp = 'DELTA' act = ls_row-product ). cl_abap_unit_assert=>assert_equals( exp = '4000' act = ls_row-cost_centre ). cl_abap_unit_assert=>assert_equals( exp = 2 act = ls_row-seats ). ENDMETHOD. METHOD empty_lists. 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. METHOD takes_highest_price. DATA(lt_primary) = VALUE {{p}}if_licence_merge=>tt_licences( ( product = 'ALPHA' cost_centre = '1000' seats = 1 unit_price = '80.00' ) ). DATA(lt_secondary) = VALUE {{p}}if_licence_merge=>tt_licences( ( product = 'ALPHA' cost_centre = '1000' seats = 1 unit_price = '95.50' ) ). 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 = 2 act = ls_row-seats ). cl_abap_unit_assert=>assert_equals( exp = CONV {{p}}if_licence_merge=>ty_price( '95.50' ) act = ls_row-unit_price ). ENDMETHOD. ENDCLASS.