mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 12:20:51 +08:00
142 lines
4.1 KiB
ABAP
142 lines
4.1 KiB
ABAP
CLASS zcl_abapgit_objects_ci_tests DEFINITION
|
|
PUBLIC
|
|
FINAL
|
|
CREATE PUBLIC
|
|
FOR TESTING
|
|
DURATION SHORT
|
|
RISK LEVEL CRITICAL .
|
|
|
|
PUBLIC SECTION.
|
|
|
|
CLASS-METHODS run
|
|
IMPORTING
|
|
!iv_object TYPE string
|
|
!iv_url TYPE string OPTIONAL .
|
|
PROTECTED SECTION.
|
|
PRIVATE SECTION.
|
|
ENDCLASS.
|
|
|
|
|
|
|
|
CLASS zcl_abapgit_objects_ci_tests IMPLEMENTATION.
|
|
|
|
|
|
METHOD run.
|
|
|
|
DATA:
|
|
ls_repo TYPE zif_abapgit_exit=>ty_ci_repo,
|
|
lt_repos TYPE zif_abapgit_exit=>ty_ci_repos,
|
|
li_exit TYPE REF TO zif_abapgit_exit,
|
|
lo_ci_repos TYPE REF TO object,
|
|
ld_options TYPE REF TO data,
|
|
ld_results TYPE REF TO data,
|
|
lv_msg TYPE string,
|
|
lv_check TYPE string,
|
|
lx_error TYPE REF TO zcx_abapgit_exception.
|
|
|
|
FIELD-SYMBOLS:
|
|
<ls_options> TYPE any,
|
|
<lv_option> TYPE any,
|
|
<lt_repo_result> TYPE ANY TABLE,
|
|
<ls_repo_result> TYPE any,
|
|
<lv_result> TYPE any,
|
|
<lv_repo> TYPE any.
|
|
|
|
" Add the default test repo from https://github.com/abapGit-tests
|
|
ls_repo-name = iv_object.
|
|
IF iv_url IS NOT INITIAL.
|
|
ls_repo-clone_url = iv_url.
|
|
ELSE.
|
|
ls_repo-clone_url = |https://github.com/abapGit-tests/{ iv_object }|.
|
|
ENDIF.
|
|
APPEND ls_repo TO lt_repos.
|
|
|
|
" Get list of repos via exit
|
|
li_exit = zcl_abapgit_exit=>get_instance( ).
|
|
li_exit->get_ci_tests(
|
|
EXPORTING
|
|
iv_object = |{ iv_object }|
|
|
CHANGING
|
|
ct_ci_repos = lt_repos ).
|
|
|
|
IF lines( lt_repos ) = 0.
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
" Objects will be created and deleted, do not run in customer system!
|
|
" These tests may fail if you are locking the entries (e.g. the ZABAPGIT transaction is open)
|
|
IF zcl_abapgit_persist_factory=>get_settings( )->read( )->get_run_critical_tests( ) = abap_false.
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
" Check if abapGit-CI is installed
|
|
SELECT SINGLE clsname FROM seoclass INTO lv_check WHERE clsname = 'ZCL_ABAPGIT_CI_REPOS'.
|
|
IF sy-subrc <> 0.
|
|
RETURN.
|
|
ENDIF.
|
|
|
|
TRY.
|
|
" Prepare input for CI repo test
|
|
CREATE DATA ld_options TYPE ('ZIF_ABAPGIT_CI_DEFINITIONS=>TY_REPO_CHECK_OPTIONS').
|
|
ASSIGN ld_options->* TO <ls_options>.
|
|
|
|
ASSIGN COMPONENT 'CREATE_PACKAGE' OF STRUCTURE <ls_options> TO <lv_option>.
|
|
ASSERT sy-subrc = 0.
|
|
<lv_option> = abap_true.
|
|
|
|
ASSIGN COMPONENT 'CHECK_LOCAL' OF STRUCTURE <ls_options> TO <lv_option>.
|
|
ASSERT sy-subrc = 0.
|
|
<lv_option> = abap_true.
|
|
|
|
CREATE DATA ld_results TYPE ('ZIF_ABAPGIT_CI_DEFINITIONS=>TY_RESULT-REPO_RESULT_LIST').
|
|
ASSIGN ld_results->* TO <lt_repo_result>.
|
|
|
|
" Run CI repo tests
|
|
CREATE OBJECT lo_ci_repos TYPE ('ZCL_ABAPGIT_CI_REPOS').
|
|
|
|
CALL METHOD lo_ci_repos->('PROCESS_REPOS')
|
|
EXPORTING
|
|
it_repos = lt_repos
|
|
is_options = <ls_options>
|
|
RECEIVING
|
|
rt_result_list = <lt_repo_result>.
|
|
|
|
" Check results for individual repos
|
|
LOOP AT <lt_repo_result> ASSIGNING <ls_repo_result>.
|
|
ASSIGN COMPONENT 'NAME' OF STRUCTURE <ls_repo_result> TO <lv_repo>.
|
|
ASSERT sy-subrc = 0.
|
|
|
|
CLEAR lv_msg.
|
|
DO 7 TIMES.
|
|
CASE sy-index.
|
|
WHEN 1.
|
|
lv_check = 'CREATE_PACKAGE'.
|
|
WHEN 2.
|
|
lv_check = 'CLONE'.
|
|
WHEN 3.
|
|
lv_check = 'PULL'.
|
|
WHEN 4.
|
|
lv_check = 'SYNTAX_CHECK'.
|
|
WHEN 5.
|
|
lv_check = 'OBJECT_CHECK'.
|
|
WHEN 6.
|
|
lv_check = 'PURGE'.
|
|
WHEN 7.
|
|
lv_check = 'CHECK_LEFTOVERS'.
|
|
ENDCASE.
|
|
ASSIGN COMPONENT lv_check OF STRUCTURE <ls_repo_result> TO <lv_result>.
|
|
ASSERT sy-subrc = 0.
|
|
cl_abap_unit_assert=>assert_equals(
|
|
exp = 'OK'
|
|
act = <lv_result>
|
|
msg = |{ <lv_repo> }: { lv_check } = { <lv_result> }| ).
|
|
ENDDO.
|
|
ENDLOOP.
|
|
|
|
CATCH zcx_abapgit_exception INTO lx_error.
|
|
cl_abap_unit_assert=>fail( msg = lx_error->get_text( ) ).
|
|
ENDTRY.
|
|
|
|
ENDMETHOD.
|
|
ENDCLASS.
|