Apply filter after TADIR selection (#6462)

Co-authored-by: Marc Bernard <59966492+mbtools@users.noreply.github.com>
This commit is contained in:
Frank Müller 2023-09-01 21:03:28 +02:00 committed by GitHub
parent bc00e4d911
commit 26883663b3
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
6 changed files with 298 additions and 2 deletions

View File

@ -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.

View File

@ -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.

View File

@ -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

View 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.

View 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.

View 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>