abapGit/src/objects/zcl_abapgit_objects.clas.testclasses.abap
Marc Bernard 61e629cd1f
Improvements for Objects Class (#4944)
* Improvements for Objects Class

This introduces a new `is_type_supported` method for `zcl_abapgit_objects` which is about 30x faster than the current `is_supported` method.

`is_type_supported` is used in the other methods like `changed_by` and `exists` to avoid instanciating or calling the object class unnecessarily. It won't be necessary to check for support before using these methods which will alllow simplifying the calling programs (separate PR).

There are also some new test cases for `is_type_supported` and for serializing a commom interface.

* No user id for unsupported objects

Co-authored-by: Lars Hvam <larshp@hotmail.com>
2021-09-12 07:33:41 +02:00

458 lines
9.9 KiB
ABAP

CLASS ltcl_object_types DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.
PRIVATE SECTION.
METHODS:
type_supported FOR TESTING RAISING zcx_abapgit_exception,
not_exist FOR TESTING RAISING zcx_abapgit_exception.
ENDCLASS.
CLASS ltcl_object_types IMPLEMENTATION.
METHOD type_supported.
cl_abap_unit_assert=>assert_equals(
act = zcl_abapgit_objects=>is_type_supported( 'PROG' )
exp = abap_true ).
cl_abap_unit_assert=>assert_equals(
act = zcl_abapgit_objects=>is_type_supported( 'ZXYZ' )
exp = abap_false ).
cl_abap_unit_assert=>assert_equals(
act = zcl_abapgit_objects=>is_type_supported( '' )
exp = abap_false ).
ENDMETHOD.
METHOD not_exist.
DATA: ls_item TYPE zif_abapgit_definitions=>ty_item,
lv_exists TYPE abap_bool,
lt_types TYPE zcl_abapgit_objects=>ty_types_tt.
FIELD-SYMBOLS: <lv_type> LIKE LINE OF lt_types.
lt_types = zcl_abapgit_objects=>supported_list( ).
cl_abap_unit_assert=>assert_not_initial( lt_types ).
LOOP AT lt_types ASSIGNING <lv_type>.
CLEAR ls_item.
ls_item-obj_name = 'ZABAPGIT_FOOBAR'.
ls_item-obj_type = <lv_type>.
lv_exists = zcl_abapgit_objects=>exists( ls_item ).
cl_abap_unit_assert=>assert_equals(
act = lv_exists
exp = abap_false
msg = ls_item-obj_type
quit = if_aunit_constants=>no ).
ENDLOOP.
ENDMETHOD.
ENDCLASS.
*----------------------------------------------------------------------*
* CLASS ltcl_serialize DEFINITION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS ltcl_serialize DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.
PRIVATE SECTION.
METHODS:
check
IMPORTING VALUE(is_item) TYPE zif_abapgit_definitions=>ty_item
RAISING zcx_abapgit_exception,
serialize_tabl FOR TESTING RAISING zcx_abapgit_exception,
serialize_shlp FOR TESTING RAISING zcx_abapgit_exception,
serialize_view FOR TESTING RAISING zcx_abapgit_exception,
serialize_auth FOR TESTING RAISING zcx_abapgit_exception,
serialize_clas FOR TESTING RAISING zcx_abapgit_exception,
serialize_intf FOR TESTING RAISING zcx_abapgit_exception,
serialize_doma FOR TESTING RAISING zcx_abapgit_exception,
serialize_dtel FOR TESTING RAISING zcx_abapgit_exception,
serialize_fugr FOR TESTING RAISING zcx_abapgit_exception,
serialize_msag FOR TESTING RAISING zcx_abapgit_exception,
serialize_prog FOR TESTING RAISING zcx_abapgit_exception,
serialize_tran FOR TESTING RAISING zcx_abapgit_exception,
serialize_ttyp FOR TESTING RAISING zcx_abapgit_exception.
ENDCLASS.
*----------------------------------------------------------------------*
* CLASS ltcl_serialize IMPLEMENTATION
*----------------------------------------------------------------------*
*
*----------------------------------------------------------------------*
CLASS ltcl_serialize IMPLEMENTATION.
METHOD serialize_shlp.
DATA: ls_item TYPE zif_abapgit_definitions=>ty_item.
ls_item-obj_type = 'SHLP'.
ls_item-obj_name = 'USER_LOGON'.
check( ls_item ).
ENDMETHOD.
METHOD serialize_view.
DATA: ls_item TYPE zif_abapgit_definitions=>ty_item.
ls_item-obj_type = 'VIEW'.
ls_item-obj_name = 'VUSR02_HEADER'.
check( ls_item ).
ENDMETHOD.
METHOD serialize_tabl.
DATA: ls_item TYPE zif_abapgit_definitions=>ty_item.
ls_item-obj_type = 'TABL'.
ls_item-obj_name = 'USR02'.
check( ls_item ).
ENDMETHOD.
METHOD serialize_auth.
DATA: ls_item TYPE zif_abapgit_definitions=>ty_item.
ls_item-obj_type = 'AUTH'.
ls_item-obj_name = 'AREA'.
check( ls_item ).
ENDMETHOD.
METHOD serialize_clas.
DATA: ls_item TYPE zif_abapgit_definitions=>ty_item.
ls_item-obj_type = 'CLAS'.
ls_item-obj_name = 'CL_GUI_FRONTEND_SERVICES'.
check( ls_item ).
ENDMETHOD.
METHOD serialize_intf.
DATA: ls_item TYPE zif_abapgit_definitions=>ty_item.
ls_item-obj_type = 'INTF'.
ls_item-obj_name = 'IF_BADI_TADIR_CHANGED'.
check( ls_item ).
ENDMETHOD.
METHOD serialize_doma.
DATA: ls_item TYPE zif_abapgit_definitions=>ty_item.
ls_item-obj_type = 'DOMA'.
ls_item-obj_name = 'PGMID'.
check( ls_item ).
ENDMETHOD.
METHOD serialize_dtel.
DATA: ls_item TYPE zif_abapgit_definitions=>ty_item.
ls_item-obj_type = 'DTEL'.
ls_item-obj_name = 'PGMID'.
check( ls_item ).
ENDMETHOD.
METHOD serialize_fugr.
DATA: ls_item TYPE zif_abapgit_definitions=>ty_item.
ls_item-obj_type = 'FUGR'.
ls_item-obj_name = 'SRFC'.
check( ls_item ).
ENDMETHOD.
METHOD serialize_msag.
DATA: ls_item TYPE zif_abapgit_definitions=>ty_item.
ls_item-obj_type = 'MSAG'.
ls_item-obj_name = '00'.
check( ls_item ).
ENDMETHOD.
METHOD serialize_prog.
DATA: ls_item TYPE zif_abapgit_definitions=>ty_item.
ls_item-obj_type = 'PROG'.
ls_item-obj_name = 'SAPLWBABAP'.
check( ls_item ).
ENDMETHOD.
METHOD serialize_tran.
DATA: ls_item TYPE zif_abapgit_definitions=>ty_item.
ls_item-obj_type = 'TRAN'.
ls_item-obj_name = 'SE38'.
check( ls_item ).
ENDMETHOD.
METHOD serialize_ttyp.
DATA: ls_item TYPE zif_abapgit_definitions=>ty_item.
ls_item-obj_type = 'TTYP'.
ls_item-obj_name = 'ABAPPROG'.
check( ls_item ).
ENDMETHOD.
METHOD check.
DATA: ls_files_item TYPE zcl_abapgit_objects=>ty_serialization.
ls_files_item = zcl_abapgit_objects=>serialize( is_item = is_item
iv_language = zif_abapgit_definitions=>c_english ).
cl_abap_unit_assert=>assert_not_initial( ls_files_item-files ).
cl_abap_unit_assert=>assert_equals( act = ls_files_item-item
exp = is_item ).
ENDMETHOD.
ENDCLASS.
CLASS ltcl_object_ddls_mock DEFINITION FOR TESTING.
PUBLIC SECTION.
INTERFACES zif_abapgit_object.
METHODS:
constructor
IMPORTING
is_item TYPE zif_abapgit_definitions=>ty_item
iv_language TYPE spras.
PRIVATE SECTION.
DATA ms_item TYPE zif_abapgit_definitions=>ty_item.
ENDCLASS.
CLASS ltcl_object_ddls_mock IMPLEMENTATION.
METHOD constructor.
ms_item = is_item.
* dummy use of variable
IF iv_language = 'E'.
RETURN.
ENDIF.
ENDMETHOD.
METHOD zif_abapgit_object~is_locked.
CASE ms_item-obj_name.
WHEN 'Z_TEST_DDLS'.
rv_is_locked = abap_true.
WHEN 'Z_TEST_DDLS2'.
rv_is_locked = abap_false.
ENDCASE.
ENDMETHOD.
METHOD zif_abapgit_object~get_deserialize_steps. "##needed
ENDMETHOD.
METHOD zif_abapgit_object~changed_by. "##needed
ENDMETHOD.
METHOD zif_abapgit_object~get_comparator. "##needed
ENDMETHOD.
METHOD zif_abapgit_object~delete. "##needed
ENDMETHOD.
METHOD zif_abapgit_object~deserialize. "##needed
ENDMETHOD.
METHOD zif_abapgit_object~exists. "##needed
ENDMETHOD.
METHOD zif_abapgit_object~get_metadata. "##needed
ENDMETHOD.
METHOD zif_abapgit_object~jump. "##needed
ENDMETHOD.
METHOD zif_abapgit_object~serialize. "##needed
ENDMETHOD.
METHOD zif_abapgit_object~is_active. "##needed
ENDMETHOD.
ENDCLASS.
CLASS ltcl_check_objects_locked DEFINITION FINAL FOR TESTING
DURATION SHORT
RISK LEVEL HARMLESS.
PRIVATE SECTION.
DATA:
mt_given_items TYPE zif_abapgit_definitions=>ty_items_tt,
mv_exception_text TYPE string.
METHODS:
throw_excp_if_object_is_locked FOR TESTING RAISING cx_static_check,
no_excp_if_obj_is_not_locked FOR TESTING RAISING cx_static_check,
given_locked_object,
when_check_objects_locked,
then_exception_shd_be_raised,
given_not_locked_object,
then_no_exception_shd_occur,
given_object
IMPORTING
iv_object_name TYPE string.
ENDCLASS.
CLASS zcl_abapgit_objects DEFINITION LOCAL FRIENDS ltcl_check_objects_locked.
CLASS ltcl_check_objects_locked IMPLEMENTATION.
METHOD throw_excp_if_object_is_locked.
given_locked_object( ).
when_check_objects_locked( ).
then_exception_shd_be_raised( ).
ENDMETHOD.
METHOD no_excp_if_obj_is_not_locked.
given_not_locked_object( ).
when_check_objects_locked( ).
then_no_exception_shd_occur( ).
ENDMETHOD.
METHOD given_locked_object.
given_object( 'Z_TEST_DDLS' ).
ENDMETHOD.
METHOD when_check_objects_locked.
DATA: lx_error TYPE REF TO zcx_abapgit_exception.
TRY.
zcl_abapgit_objects=>check_objects_locked( iv_language = 'E'
it_items = mt_given_items ).
CATCH zcx_abapgit_exception INTO lx_error.
mv_exception_text = lx_error->get_text( ).
ENDTRY.
ENDMETHOD.
METHOD then_exception_shd_be_raised.
cl_abap_unit_assert=>assert_equals(
exp = |Object DDLS Z_TEST_DDLS is locked. Action not possible.|
act = mv_exception_text ).
ENDMETHOD.
METHOD given_not_locked_object.
given_object( 'Z_TEST_DDLS2' ).
ENDMETHOD.
METHOD then_no_exception_shd_occur.
cl_abap_unit_assert=>assert_initial( mv_exception_text ).
ENDMETHOD.
METHOD given_object.
CONSTANTS:
lc_obj_type TYPE string VALUE 'DDLS'.
DATA:
ls_item LIKE LINE OF mt_given_items,
ls_obj_serializer_map LIKE LINE OF zcl_abapgit_objects=>gt_obj_serializer_map.
ls_item-obj_type = lc_obj_type.
ls_item-obj_name = iv_object_name.
INSERT ls_item INTO TABLE mt_given_items.
ls_obj_serializer_map-item-obj_type = lc_obj_type.
ls_obj_serializer_map-item-obj_name = iv_object_name.
ls_obj_serializer_map-metadata-class = '\CLASS-POOL=ZCL_ABAPGIT_OBJECTS\CLASS=LTCL_OBJECT_DDLS_MOCK'.
INSERT ls_obj_serializer_map INTO TABLE zcl_abapgit_objects=>gt_obj_serializer_map.
ENDMETHOD.
ENDCLASS.