CLASS {{p}}t02_hidden DEFINITION PUBLIC FINAL CREATE PUBLIC FOR TESTING DURATION SHORT RISK LEVEL HARMLESS. PRIVATE SECTION. DATA mo_cut TYPE REF TO {{p}}if_stock_cover. METHODS setup. METHODS all_ok FOR TESTING. METHODS shortage_is_reported FOR TESTING. METHODS stock_used_in_order FOR TESTING. METHODS negative_stock_ignored FOR TESTING. METHODS zero_requirement_invalid FOR TESTING. METHODS negative_req_invalid FOR TESTING. METHODS missing_stock_is_short FOR TESTING. METHODS case_and_blanks_ignored FOR TESTING. METHODS stock_items_are_summed FOR TESTING. METHODS no_requirements FOR TESTING. METHODS shortages_filter_sort FOR TESTING. METHODS shortages_empty_all_ok FOR TESTING. ENDCLASS. CLASS {{p}}t02_hidden IMPLEMENTATION. METHOD setup. mo_cut = NEW {{p}}stock_cover_checker( ). ENDMETHOD. METHOD all_ok. DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item( ( material = 'MAT-A' plant = 'P1' quantity = 100 ) ( material = 'MAT-B' plant = 'P1' quantity = 50 ) ). DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement( ( material = 'MAT-A' plant = 'P1' required = 30 ) ( material = 'MAT-B' plant = 'P1' required = 50 ) ). DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result( ( material = 'MAT-A' plant = 'P1' required = 30 available = 100 shortage = 0 status = 'OK' ) ( material = 'MAT-B' plant = 'P1' required = 50 available = 50 shortage = 0 status = 'OK' ) ). cl_abap_unit_assert=>assert_equals( exp = lt_exp act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ). ENDMETHOD. METHOD shortage_is_reported. DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item( ( material = 'MAT-A' plant = 'P1' quantity = 30 ) ). DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement( ( material = 'MAT-A' plant = 'P1' required = 50 ) ). DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result( ( material = 'MAT-A' plant = 'P1' required = 50 available = 30 shortage = 20 status = 'SHORT' ) ). cl_abap_unit_assert=>assert_equals( exp = lt_exp act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ). ENDMETHOD. METHOD stock_used_in_order. DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item( ( material = 'MAT-A' plant = 'P1' quantity = 100 ) ). DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement( ( material = 'MAT-A' plant = 'P1' required = 60 ) ( material = 'MAT-A' plant = 'P1' required = 60 ) ). DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result( ( material = 'MAT-A' plant = 'P1' required = 60 available = 100 shortage = 0 status = 'OK' ) ( material = 'MAT-A' plant = 'P1' required = 60 available = 40 shortage = 20 status = 'SHORT' ) ). cl_abap_unit_assert=>assert_equals( exp = lt_exp act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ). ENDMETHOD. METHOD negative_stock_ignored. DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item( ( material = 'MAT-A' plant = 'P1' quantity = 100 ) ( material = 'MAT-A' plant = 'P1' quantity = -40 ) ). DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement( ( material = 'MAT-A' plant = 'P1' required = 100 ) ). DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result( ( material = 'MAT-A' plant = 'P1' required = 100 available = 100 shortage = 0 status = 'OK' ) ). cl_abap_unit_assert=>assert_equals( exp = lt_exp act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ). ENDMETHOD. METHOD zero_requirement_invalid. DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item( ( material = 'MAT-A' plant = 'P1' quantity = 50 ) ). DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement( ( material = 'MAT-A' plant = 'P1' required = 0 ) ( material = 'MAT-A' plant = 'P1' required = 50 ) ). DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result( ( material = 'MAT-A' plant = 'P1' required = 0 available = 50 shortage = 0 status = 'INVALID' ) ( material = 'MAT-A' plant = 'P1' required = 50 available = 50 shortage = 0 status = 'OK' ) ). cl_abap_unit_assert=>assert_equals( exp = lt_exp act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ). ENDMETHOD. METHOD negative_req_invalid. DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item( ( material = 'MAT-A' plant = 'P1' quantity = 50 ) ). DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement( ( material = 'MAT-A' plant = 'P1' required = -10 ) ). DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result( ( material = 'MAT-A' plant = 'P1' required = -10 available = 50 shortage = 0 status = 'INVALID' ) ). cl_abap_unit_assert=>assert_equals( exp = lt_exp act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ). ENDMETHOD. METHOD missing_stock_is_short. DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item( ). DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement( ( material = 'MAT-X' plant = 'P9' required = 25 ) ). DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result( ( material = 'MAT-X' plant = 'P9' required = 25 available = 0 shortage = 25 status = 'SHORT' ) ). cl_abap_unit_assert=>assert_equals( exp = lt_exp act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ). ENDMETHOD. METHOD case_and_blanks_ignored. DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item( ( material = 'mat-a' plant = 'p1' quantity = 80 ) ). DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement( ( material = ' MAT-A ' plant = 'P1 ' required = 80 ) ). DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result( ( material = ' MAT-A ' plant = 'P1 ' required = 80 available = 80 shortage = 0 status = 'OK' ) ). cl_abap_unit_assert=>assert_equals( exp = lt_exp act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ). ENDMETHOD. METHOD stock_items_are_summed. DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item( ( material = 'MAT-A' plant = 'P1' quantity = 10 ) ( material = 'MAT-A' plant = 'P1' quantity = 20 ) ( material = 'MAT-A' plant = 'P2' quantity = 5 ) ). DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement( ( material = 'MAT-A' plant = 'P1' required = 30 ) ( material = 'MAT-A' plant = 'P2' required = 5 ) ). DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result( ( material = 'MAT-A' plant = 'P1' required = 30 available = 30 shortage = 0 status = 'OK' ) ( material = 'MAT-A' plant = 'P2' required = 5 available = 5 shortage = 0 status = 'OK' ) ). cl_abap_unit_assert=>assert_equals( exp = lt_exp act = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ) ). ENDMETHOD. METHOD no_requirements. DATA(lt_stock) = VALUE {{p}}if_stock_cover=>tt_stock_item( ( material = 'MAT-A' plant = 'P1' quantity = 10 ) ). DATA(lt_req) = VALUE {{p}}if_stock_cover=>tt_requirement( ). DATA(lt_act) = mo_cut->check( it_stock = lt_stock it_requirement = lt_req ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( lt_act ) ). ENDMETHOD. METHOD shortages_filter_sort. DATA(lt_in) = VALUE {{p}}if_stock_cover=>tt_result( ( material = 'MAT-C' plant = 'P1' required = 10 available = 0 shortage = 10 status = 'SHORT' ) ( material = 'MAT-A' plant = 'P2' required = 10 available = 0 shortage = 10 status = 'SHORT' ) ( material = 'MAT-B' plant = 'P1' required = 10 available = 10 shortage = 0 status = 'OK' ) ( material = 'MAT-A' plant = 'P1' required = 10 available = 0 shortage = 10 status = 'SHORT' ) ( material = 'MAT-D' plant = 'P1' required = 10 available = 10 shortage = 0 status = 'INVALID' ) ). DATA(lt_exp) = VALUE {{p}}if_stock_cover=>tt_result( ( material = 'MAT-A' plant = 'P1' required = 10 available = 0 shortage = 10 status = 'SHORT' ) ( material = 'MAT-A' plant = 'P2' required = 10 available = 0 shortage = 10 status = 'SHORT' ) ( material = 'MAT-C' plant = 'P1' required = 10 available = 0 shortage = 10 status = 'SHORT' ) ). cl_abap_unit_assert=>assert_equals( exp = lt_exp act = mo_cut->shortages( lt_in ) ). ENDMETHOD. METHOD shortages_empty_all_ok. DATA(lt_in) = VALUE {{p}}if_stock_cover=>tt_result( ( material = 'MAT-A' plant = 'P1' required = 10 available = 10 shortage = 0 status = 'OK' ) ( material = 'MAT-B' plant = 'P1' required = 10 available = 10 shortage = 0 status = 'INVALID' ) ). cl_abap_unit_assert=>assert_equals( exp = 0 act = lines( mo_cut->shortages( lt_in ) ) ). ENDMETHOD. ENDCLASS.