mirror of
https://github.com/abapGit/abapGit.git
synced 2025-04-30 11:46:38 +08:00
Apply filter after TADIR selection (#6462)
Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
This commit is contained in:
parent
bc00e4d911
commit
26883663b3
|
@ -216,7 +216,8 @@ CLASS zcl_abapgit_serialize IMPLEMENTATION.
|
|||
iv_ignore_subpackages = ms_local_settings-ignore_subpackages
|
||||
iv_only_local_objects = ms_local_settings-only_local_objects
|
||||
io_dot = mo_dot_abapgit
|
||||
ii_log = ii_log ).
|
||||
ii_log = ii_log
|
||||
it_filter = it_filter ).
|
||||
|
||||
CREATE OBJECT lo_filter.
|
||||
|
||||
|
|
|
@ -388,6 +388,8 @@ CLASS zcl_abapgit_tadir IMPLEMENTATION.
|
|||
METHOD zif_abapgit_tadir~read.
|
||||
|
||||
DATA: li_exit TYPE REF TO zif_abapgit_exit.
|
||||
DATA: lr_tadir TYPE REF TO zif_abapgit_definitions=>ty_tadir.
|
||||
DATA: lt_filter TYPE zif_abapgit_definitions=>ty_tadir_tt.
|
||||
|
||||
" Start recursion
|
||||
" hmm, some problems here, should TADIR also build path?
|
||||
|
@ -406,8 +408,26 @@ CLASS zcl_abapgit_tadir IMPLEMENTATION.
|
|||
CHANGING
|
||||
ct_tadir = rt_tadir ).
|
||||
|
||||
rt_tadir = check_exists( rt_tadir ).
|
||||
IF it_filter IS NOT INITIAL.
|
||||
"Apply filter manually instead of calling zcl_abapgit_repo_filter->apply,
|
||||
"so that we can execute a unit test. The method applies addition filtering
|
||||
"and does therefore additional selects
|
||||
lt_filter = it_filter.
|
||||
SORT lt_filter BY object obj_name.
|
||||
LOOP AT rt_tadir REFERENCE INTO lr_tadir.
|
||||
READ TABLE lt_filter TRANSPORTING NO FIELDS
|
||||
WITH KEY object = lr_tadir->object
|
||||
obj_name = lr_tadir->obj_name
|
||||
BINARY SEARCH.
|
||||
IF sy-subrc <> 0.
|
||||
DELETE rt_tadir.
|
||||
ENDIF.
|
||||
ENDLOOP.
|
||||
ENDIF.
|
||||
|
||||
IF iv_check_exists = abap_true.
|
||||
rt_tadir = check_exists( rt_tadir ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
|
|
@ -18,6 +18,8 @@ INTERFACE zif_abapgit_tadir
|
|||
!iv_only_local_objects TYPE abap_bool DEFAULT abap_false
|
||||
!io_dot TYPE REF TO zcl_abapgit_dot_abapgit OPTIONAL
|
||||
!ii_log TYPE REF TO zif_abapgit_log OPTIONAL
|
||||
!it_filter TYPE zif_abapgit_definitions=>ty_tadir_tt OPTIONAL
|
||||
!iv_check_exists TYPE abap_bool DEFAULT abap_true
|
||||
RETURNING
|
||||
VALUE(rt_tadir) TYPE zif_abapgit_definitions=>ty_tadir_tt
|
||||
RAISING
|
||||
|
|
14
test/zcl_abapgit_tadir_test.clas.abap
Normal file
14
test/zcl_abapgit_tadir_test.clas.abap
Normal file
|
@ -0,0 +1,14 @@
|
|||
CLASS zcl_abapgit_tadir_test DEFINITION
|
||||
PUBLIC
|
||||
FINAL
|
||||
CREATE PUBLIC .
|
||||
|
||||
PUBLIC SECTION.
|
||||
PROTECTED SECTION.
|
||||
PRIVATE SECTION.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
|
||||
CLASS ZCL_ABAPGIT_TADIR_TEST IMPLEMENTATION.
|
||||
ENDCLASS.
|
242
test/zcl_abapgit_tadir_test.clas.testclasses.abap
Normal file
242
test/zcl_abapgit_tadir_test.clas.testclasses.abap
Normal file
|
@ -0,0 +1,242 @@
|
|||
CLASS ltcl_build DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION MEDIUM FINAL.
|
||||
PRIVATE SECTION.
|
||||
CLASS-DATA gi_environment TYPE REF TO if_osql_test_environment.
|
||||
CLASS-METHODS class_setup.
|
||||
CLASS-METHODS class_teardown.
|
||||
CLASS-METHODS create_envoirment.
|
||||
|
||||
METHODS check_build_wo_filter FOR TESTING RAISING zcx_abapgit_exception.
|
||||
METHODS check_build_w_filter FOR TESTING RAISING zcx_abapgit_exception.
|
||||
ENDCLASS.
|
||||
|
||||
CLASS ltcl_build IMPLEMENTATION.
|
||||
|
||||
METHOD create_envoirment.
|
||||
|
||||
DATA lt_tables TYPE if_osql_test_environment=>ty_t_sobjnames.
|
||||
DATA ls_tadir TYPE tadir.
|
||||
DATA lt_tadir TYPE STANDARD TABLE OF tadir.
|
||||
DATA ls_tdevc TYPE tdevc.
|
||||
DATA lt_tdevc TYPE STANDARD TABLE OF tdevc.
|
||||
|
||||
APPEND 'TADIR' TO lt_tables.
|
||||
APPEND 'TDEVC' TO lt_tables.
|
||||
APPEND 'SOTR_HEADU' TO lt_tables.
|
||||
gi_environment = cl_osql_test_environment=>create( lt_tables ).
|
||||
|
||||
ls_tadir-pgmid = 'R3TR'.
|
||||
ls_tadir-object = 'DEVC'.
|
||||
ls_tadir-obj_name = 'BASIS'.
|
||||
ls_tadir-devclass = 'BASIS'.
|
||||
INSERT ls_tadir INTO TABLE lt_tadir.
|
||||
|
||||
ls_tadir-pgmid = 'R3TR'.
|
||||
ls_tadir-object = 'DEVC'.
|
||||
ls_tadir-obj_name = '/STMC/FND'.
|
||||
ls_tadir-devclass = '/STMC/FND'.
|
||||
INSERT ls_tadir INTO TABLE lt_tadir.
|
||||
|
||||
ls_tadir-pgmid = 'R3TR'.
|
||||
ls_tadir-object = 'DTEL'.
|
||||
ls_tadir-obj_name = 'DEVCLASS'.
|
||||
ls_tadir-devclass = 'BASIS'. "not in reality
|
||||
INSERT ls_tadir INTO TABLE lt_tadir.
|
||||
|
||||
ls_tadir-pgmid = 'R3TR'.
|
||||
ls_tadir-object = 'DTEL'.
|
||||
ls_tadir-obj_name = 'MATNR'.
|
||||
ls_tadir-devclass = 'BASIS'. "not in reality
|
||||
INSERT ls_tadir INTO TABLE lt_tadir.
|
||||
|
||||
gi_environment->insert_test_data( lt_tadir ).
|
||||
|
||||
ls_tdevc-devclass = 'BASIS'.
|
||||
INSERT ls_tdevc INTO TABLE lt_tdevc.
|
||||
|
||||
ls_tdevc-devclass = '$SWF_RUN_CNT'.
|
||||
ls_tdevc-parentcl = '/STMC/FND'. "not in reality
|
||||
INSERT ls_tdevc INTO TABLE lt_tdevc.
|
||||
|
||||
ls_tdevc-devclass = '/STMC/FND'.
|
||||
ls_tdevc-parentcl = 'BASIS'. "not in reality
|
||||
INSERT ls_tdevc INTO TABLE lt_tdevc.
|
||||
|
||||
gi_environment->insert_test_data( lt_tdevc ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD check_build_wo_filter.
|
||||
|
||||
DATA lo_dot TYPE REF TO zcl_abapgit_dot_abapgit.
|
||||
DATA li_log TYPE REF TO zif_abapgit_log.
|
||||
DATA lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt.
|
||||
DATA lo_ex TYPE REF TO zcx_abapgit_exception.
|
||||
DATA lv_top_package TYPE devclass.
|
||||
|
||||
lv_top_package = 'BASIS'.
|
||||
TRY.
|
||||
CREATE OBJECT li_log TYPE zcl_abapgit_log.
|
||||
|
||||
lo_dot = zcl_abapgit_dot_abapgit=>build_default( ).
|
||||
lo_dot->set_folder_logic( zif_abapgit_dot_abapgit=>c_folder_logic-full ).
|
||||
|
||||
lt_tadir = zcl_abapgit_factory=>get_tadir( )->read(
|
||||
iv_package = lv_top_package
|
||||
io_dot = lo_dot
|
||||
iv_check_exists = abap_false ).
|
||||
|
||||
cl_abap_unit_assert=>assert_not_initial( lt_tadir ).
|
||||
|
||||
READ TABLE lt_tadir TRANSPORTING NO FIELDS
|
||||
WITH KEY object = 'DEVC'
|
||||
obj_name = '$SWF_RUN_CNT'.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
cl_abap_unit_assert=>fail( |Object DEVC $SWF_RUN_CNT missing| ).
|
||||
ENDIF.
|
||||
|
||||
READ TABLE lt_tadir TRANSPORTING NO FIELDS
|
||||
WITH KEY object = 'DEVC'
|
||||
obj_name = 'BASIS'.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
cl_abap_unit_assert=>fail( |Object DEVC BASIS missing| ).
|
||||
ENDIF.
|
||||
|
||||
READ TABLE lt_tadir TRANSPORTING NO FIELDS
|
||||
WITH KEY object = 'DEVC'
|
||||
obj_name = '/STMC/FND'.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
cl_abap_unit_assert=>fail( |Object DEVC /STMC/FND missing| ).
|
||||
ENDIF.
|
||||
|
||||
READ TABLE lt_tadir TRANSPORTING NO FIELDS
|
||||
WITH KEY object = 'DTEL'
|
||||
obj_name = 'DEVCLASS'.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
cl_abap_unit_assert=>fail( |Object DTEL DEVCLASS missing| ).
|
||||
ENDIF.
|
||||
|
||||
READ TABLE lt_tadir TRANSPORTING NO FIELDS
|
||||
WITH KEY object = 'DTEL'
|
||||
obj_name = 'MATNR'.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
cl_abap_unit_assert=>fail( |Object DTEL MATNR missing| ).
|
||||
ENDIF.
|
||||
|
||||
READ TABLE lt_tadir TRANSPORTING NO FIELDS
|
||||
WITH KEY object = 'NSPC'
|
||||
obj_name = '/STMC/'.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
cl_abap_unit_assert=>fail( |Object NSPC /STMC/ missing| ).
|
||||
ENDIF.
|
||||
|
||||
CATCH zcx_abapgit_exception INTO lo_ex.
|
||||
cl_abap_unit_assert=>fail( lo_ex->get_text( ) ).
|
||||
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD check_build_w_filter.
|
||||
|
||||
DATA lo_dot TYPE REF TO zcl_abapgit_dot_abapgit.
|
||||
DATA li_log TYPE REF TO zif_abapgit_log.
|
||||
DATA lr_ex TYPE REF TO zcx_abapgit_exception.
|
||||
DATA lo_tadir TYPE REF TO zcl_abapgit_tadir.
|
||||
DATA lo_ex TYPE REF TO zcx_abapgit_exception.
|
||||
DATA lv_top_package TYPE devclass.
|
||||
DATA lt_filter TYPE zif_abapgit_definitions=>ty_tadir_tt.
|
||||
DATA ls_filter TYPE zif_abapgit_definitions=>ty_tadir.
|
||||
DATA lr_filter TYPE REF TO zif_abapgit_definitions=>ty_tadir.
|
||||
DATA lt_tadir TYPE zif_abapgit_definitions=>ty_tadir_tt.
|
||||
DATA lr_tadir TYPE REF TO zif_abapgit_definitions=>ty_tadir.
|
||||
DATA lv_msg TYPE string.
|
||||
|
||||
lv_top_package = 'BASIS'.
|
||||
|
||||
ls_filter-object = 'NSPC'.
|
||||
ls_filter-obj_name = '/STMC/'.
|
||||
INSERT ls_filter INTO TABLE lt_filter.
|
||||
|
||||
ls_filter-object = 'DEVC'.
|
||||
ls_filter-obj_name = '/STMC/FND'.
|
||||
INSERT ls_filter INTO TABLE lt_filter.
|
||||
|
||||
ls_filter-object = 'DTEL'.
|
||||
ls_filter-obj_name = 'DEVCLASS'.
|
||||
INSERT ls_filter INTO TABLE lt_filter.
|
||||
|
||||
ls_filter-object = 'DEVC'.
|
||||
ls_filter-obj_name = 'BASIS'.
|
||||
INSERT ls_filter INTO TABLE lt_filter.
|
||||
|
||||
ls_filter-object = 'DEVC'.
|
||||
ls_filter-obj_name = '$SWF_RUN_CNT'.
|
||||
INSERT ls_filter INTO TABLE lt_filter.
|
||||
|
||||
READ TABLE lt_filter TRANSPORTING NO FIELDS
|
||||
WITH KEY object = 'NSPC'.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
cl_abap_unit_assert=>fail( msg = |Read table lt_filter with table key obj_type = 'NSPC' failed'| ).
|
||||
ENDIF.
|
||||
|
||||
READ TABLE lt_filter TRANSPORTING NO FIELDS
|
||||
WITH KEY object = 'DEVC'.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
cl_abap_unit_assert=>fail( msg = |Read table lt_filter with table key obj_type = 'DEVC' failed'| ).
|
||||
ENDIF.
|
||||
|
||||
TRY.
|
||||
CREATE OBJECT li_log TYPE zcl_abapgit_log.
|
||||
|
||||
lo_dot = zcl_abapgit_dot_abapgit=>build_default( ).
|
||||
lo_dot->set_folder_logic( zif_abapgit_dot_abapgit=>c_folder_logic-full ).
|
||||
|
||||
lt_tadir = zcl_abapgit_factory=>get_tadir( )->read(
|
||||
iv_package = lv_top_package
|
||||
io_dot = lo_dot
|
||||
it_filter = lt_filter
|
||||
iv_check_exists = abap_false ).
|
||||
|
||||
cl_abap_unit_assert=>assert_not_initial( lt_tadir ).
|
||||
|
||||
IF lines( lt_tadir ) <> lines( lt_filter ).
|
||||
lv_msg = 'Differnt number of objects found than filtered:'.
|
||||
LOOP AT lt_tadir REFERENCE INTO lr_tadir.
|
||||
CONCATENATE lv_msg lr_tadir->obj_name INTO lv_msg SEPARATED BY ' | '.
|
||||
ENDLOOP.
|
||||
|
||||
CONCATENATE lv_msg '; requested:' INTO lv_msg SEPARATED BY space.
|
||||
LOOP AT lt_filter REFERENCE INTO lr_filter.
|
||||
CONCATENATE lv_msg lr_filter->obj_name INTO lv_msg SEPARATED BY ' | '.
|
||||
ENDLOOP.
|
||||
|
||||
cl_abap_unit_assert=>assert_equals(
|
||||
act = lines( lt_tadir )
|
||||
exp = lines( lt_filter )
|
||||
msg = lv_msg ).
|
||||
ENDIF.
|
||||
CATCH zcx_abapgit_exception INTO lo_ex.
|
||||
cl_abap_unit_assert=>fail( lo_ex->get_text( ) ).
|
||||
|
||||
ENDTRY.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD class_setup.
|
||||
create_envoirment( ).
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD class_teardown.
|
||||
IF NOT gi_environment IS INITIAL.
|
||||
gi_environment->destroy( ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
17
test/zcl_abapgit_tadir_test.clas.xml
Normal file
17
test/zcl_abapgit_tadir_test.clas.xml
Normal file
|
@ -0,0 +1,17 @@
|
|||
<?xml version="1.0" encoding="utf-8"?>
|
||||
<abapGit version="v1.0.0" serializer="LCL_OBJECT_CLAS" serializer_version="v1.0.0">
|
||||
<asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">
|
||||
<asx:values>
|
||||
<VSEOCLASS>
|
||||
<CLSNAME>ZCL_ABAPGIT_TADIR_TEST</CLSNAME>
|
||||
<LANGU>E</LANGU>
|
||||
<DESCRIPT>TADIR Test Class</DESCRIPT>
|
||||
<STATE>1</STATE>
|
||||
<CLSCCINCL>X</CLSCCINCL>
|
||||
<FIXPT>X</FIXPT>
|
||||
<UNICODE>X</UNICODE>
|
||||
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
|
||||
</VSEOCLASS>
|
||||
</asx:values>
|
||||
</asx:abap>
|
||||
</abapGit>
|
Loading…
Reference in New Issue
Block a user