mirror of
https://github.com/abapGit/abapGit.git
synced 2025-05-01 04:08:27 +08:00
Update unit tests to use CI (#4106)
* Update unit tests to use CI * Make test repo configurable * Remove local tests and use CI * Lint fixes * Replace local tests with CI * Add Type Group constants to abaplint * Update constants and replace assert_true * Revert constants Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
parent
266ffb2a7c
commit
c1b2cf10a0
|
@ -64,6 +64,8 @@
|
|||
"swbm_c_type_wdy_application",
|
||||
"swbm_version_active",
|
||||
"swbm_version_inactive",
|
||||
"swfco_org_standard_task",
|
||||
"swfco_org_workflow_template",
|
||||
"wbmr_c_skwf_folder_class",
|
||||
"wdyn_limu_component_controller",
|
||||
"wdyn_limu_component_definition",
|
||||
|
|
|
@ -14,8 +14,6 @@ CLASS zcl_abapgit_object_pdts DEFINITION
|
|||
|
||||
PRIVATE SECTION.
|
||||
|
||||
CONSTANTS: c_object_type_task TYPE hr_sotype VALUE 'TS'.
|
||||
|
||||
DATA ms_objkey TYPE hrsobject.
|
||||
DATA mv_objid TYPE hrobjid.
|
||||
|
||||
|
@ -52,7 +50,7 @@ CLASS zcl_abapgit_object_pdts IMPLEMENTATION.
|
|||
zcx_abapgit_exception=>raise( 'PDTS not fully implemented, enable experimental features to test it' ).
|
||||
ENDIF.
|
||||
|
||||
ms_objkey-otype = c_object_type_task.
|
||||
ms_objkey-otype = 'TS'.
|
||||
ms_objkey-objid = ms_item-obj_name.
|
||||
|
||||
mv_objid = ms_item-obj_name. "Todo: Obsolete
|
||||
|
@ -211,7 +209,7 @@ CLASS zcl_abapgit_object_pdts IMPLEMENTATION.
|
|||
|
||||
CALL FUNCTION 'RH_HRSOBJECT_DELETE'
|
||||
EXPORTING
|
||||
act_otype = c_object_type_task
|
||||
act_otype = 'TS'
|
||||
act_objid = mv_objid
|
||||
no_confirmation_msg = abap_true
|
||||
EXCEPTIONS
|
||||
|
@ -230,7 +228,7 @@ CLASS zcl_abapgit_object_pdts IMPLEMENTATION.
|
|||
CALL FUNCTION 'RH_READ_OBJECT'
|
||||
EXPORTING
|
||||
plvar = '01'
|
||||
otype = c_object_type_task
|
||||
otype = 'TS'
|
||||
objid = mv_objid
|
||||
istat = '1'
|
||||
begda = sy-datum
|
||||
|
@ -248,7 +246,7 @@ CLASS zcl_abapgit_object_pdts IMPLEMENTATION.
|
|||
|
||||
METHOD zif_abapgit_object~is_locked.
|
||||
rv_is_locked = exists_a_lock_entry_for( iv_lock_object = 'HRSOBJECT'
|
||||
iv_argument = c_object_type_task && mv_objid ).
|
||||
iv_argument = 'TS' && mv_objid ).
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
|
@ -262,7 +260,7 @@ CLASS zcl_abapgit_object_pdts IMPLEMENTATION.
|
|||
SELECT SINGLE uname
|
||||
INTO rv_user
|
||||
FROM hrs1201
|
||||
WHERE otype = c_object_type_task AND
|
||||
WHERE otype = 'TS' AND
|
||||
objid = ms_item-obj_name.
|
||||
|
||||
IF sy-subrc <> 0.
|
||||
|
|
|
@ -1,338 +1,28 @@
|
|||
CLASS ltd_mock DEFINITION
|
||||
FINAL
|
||||
CREATE PUBLIC
|
||||
FOR TESTING
|
||||
DURATION SHORT
|
||||
RISK LEVEL HARMLESS.
|
||||
|
||||
PUBLIC SECTION.
|
||||
CONSTANTS mc_task_id TYPE hrobjid VALUE '99999999'.
|
||||
|
||||
METHODS create_input_xml RETURNING VALUE(ri_result) TYPE REF TO zif_abapgit_xml_input
|
||||
RAISING zcx_abapgit_exception.
|
||||
METHODS get_input_xml RETURNING VALUE(rv_result) TYPE string.
|
||||
|
||||
PRIVATE SECTION.
|
||||
DATA mv_xml TYPE string.
|
||||
|
||||
METHODS generate.
|
||||
METHODS add_line IMPORTING iv_string TYPE string.
|
||||
METHODS add_pdts_segment.
|
||||
METHODS add_container_segment.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltd_mock IMPLEMENTATION.
|
||||
|
||||
METHOD add_line.
|
||||
mv_xml = mv_xml && iv_string && cl_abap_char_utilities=>newline.
|
||||
ENDMETHOD.
|
||||
|
||||
METHOD generate.
|
||||
|
||||
"Todo: Automate GitHub updates, sort out XML discrepancies
|
||||
"
|
||||
"When pasting updates from GitHub, following changes are needed:
|
||||
"UTF-16, remove serializer attribute from abapGit tag, replace task ID with variable
|
||||
"
|
||||
"<?xml version="1.0" encoding="utf-16"?>| ).
|
||||
"<abapGit version="v1.0.0">| ).
|
||||
"...
|
||||
"Then replace all instances of task ID (e.g. 90000005), such as:
|
||||
" <OBJID>{ mc_task_id }</OBJID>| ).
|
||||
" <INSTID>TS{ mc_task_id }</INSTID>| ).
|
||||
|
||||
|
||||
add_line( |<?xml version="1.0" encoding="utf-16"?>| ).
|
||||
add_line( |<abapGit version="v1.0.0">| ).
|
||||
add_line( | <asx:abap xmlns:asx="http://www.sap.com/abapxml" version="1.0">| ).
|
||||
add_line( | <asx:values>| ).
|
||||
|
||||
add_pdts_segment( ).
|
||||
add_container_segment( ).
|
||||
|
||||
add_line( | </asx:values>| ).
|
||||
add_line( | </asx:abap>| ).
|
||||
add_line( |</abapGit>| ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD add_pdts_segment.
|
||||
|
||||
add_line( | <PDTS>| ).
|
||||
add_line( | <SHORT_TEXT>abapGitTest</SHORT_TEXT>| ).
|
||||
add_line( | <PLVAR>01</PLVAR>| ).
|
||||
add_line( | <WI_TEXT>abapGit Test &_WI_OBJECT_ID.BUSINESSPARTNER&</WI_TEXT>| ).
|
||||
add_line( | <METHOD>| ).
|
||||
add_line( | <OTYPE>TS</OTYPE>| ).
|
||||
add_line( | <OBJID>{ mc_task_id }</OBJID>| ).
|
||||
add_line( | <SWOTP>BUS1006</SWOTP>| ).
|
||||
add_line( | <SWMTD>DISPLAY</SWMTD>| ).
|
||||
add_line( | <METHTYPE>BO</METHTYPE>| ).
|
||||
add_line( | <SYNCHRON>X</SYNCHRON>| ).
|
||||
add_line( | </METHOD>| ).
|
||||
add_line( | <STARTING_EVENTS>| ).
|
||||
add_line( | <HRSEVENTS>| ).
|
||||
add_line( | <SUBTY>0001</SUBTY>| ).
|
||||
add_line( | <CLSTYP>BO</CLSTYP>| ).
|
||||
add_line( | <OBJTYP>BUS1006</OBJTYP>| ).
|
||||
add_line( | <EVENT>CREATED</EVENT>| ).
|
||||
add_line( | </HRSEVENTS>| ).
|
||||
add_line( | </STARTING_EVENTS>| ).
|
||||
add_line( | <STARTING_EVENTS_BINDING>| ).
|
||||
add_line( | <HRS1212>| ).
|
||||
add_line( | <OTYPE>TS</OTYPE>| ).
|
||||
add_line( | <OBJID>{ mc_task_id }</OBJID>| ).
|
||||
add_line( | <SUBTY>0001</SUBTY>| ).
|
||||
add_line( | <CLSTYP>BO</CLSTYP>| ).
|
||||
add_line( | <OBJTYP>BUS1006</OBJTYP>| ).
|
||||
add_line( | <EVENT>CREATED</EVENT>| ).
|
||||
add_line( | <DATAFLOW>E</DATAFLOW>| ).
|
||||
add_line( | <TAB_INDEX>000001</TAB_INDEX>| ).
|
||||
add_line( | <EXPR>&_EVT_OBJECT&</EXPR>| ).
|
||||
add_line( | <SOURCETYPE>S</SOURCETYPE>| ).
|
||||
add_line( | <TARGETTYPE>S</TARGETTYPE>| ).
|
||||
add_line( | <TARGETEXPR>&_WI_OBJECT_ID&</TARGETEXPR>| ).
|
||||
add_line( | <OPERATION>ASN</OPERATION>| ).
|
||||
add_line( | <OPCLASS>E</OPCLASS>| ).
|
||||
add_line( | </HRS1212>| ).
|
||||
add_line( | </STARTING_EVENTS_BINDING>| ).
|
||||
add_line( | <TERMINATING_EVENTS>| ).
|
||||
add_line( | <HRSEVTERM>| ).
|
||||
add_line( | <SUBTY>0002</SUBTY>| ).
|
||||
add_line( | <CLSTYP>BO</CLSTYP>| ).
|
||||
add_line( | <OBJTYP>BUS1006</OBJTYP>| ).
|
||||
add_line( | <EVENT>CHANGED</EVENT>| ).
|
||||
add_line( | <EV_ELEMENT>_WI_OBJECT_ID</EV_ELEMENT>| ).
|
||||
add_line( | </HRSEVTERM>| ).
|
||||
add_line( | </TERMINATING_EVENTS>| ).
|
||||
add_line( | <TERMINATING_EVENTS_BINDING>| ).
|
||||
add_line( | <HRS1212>| ).
|
||||
add_line( | <OTYPE>TS</OTYPE>| ).
|
||||
add_line( | <OBJID>{ mc_task_id }</OBJID>| ).
|
||||
add_line( | <SUBTY>0002</SUBTY>| ).
|
||||
add_line( | <CLSTYP>BO</CLSTYP>| ).
|
||||
add_line( | <OBJTYP>BUS1006</OBJTYP>| ).
|
||||
add_line( | <EVENT>CHANGED</EVENT>| ).
|
||||
add_line( | <DATAFLOW>E</DATAFLOW>| ).
|
||||
add_line( | <TAB_INDEX>000001</TAB_INDEX>| ).
|
||||
add_line( | <EV_ELEMENT>_WI_OBJECT_ID</EV_ELEMENT>| ).
|
||||
add_line( | <EXPR>&_EVT_OBJECT&</EXPR>| ).
|
||||
add_line( | <SOURCETYPE>S</SOURCETYPE>| ).
|
||||
add_line( | <TARGETTYPE>S</TARGETTYPE>| ).
|
||||
add_line( | <TARGETEXPR>&_WI_OBJECT_ID&</TARGETEXPR>| ).
|
||||
add_line( | <OPERATION>ASN</OPERATION>| ).
|
||||
add_line( | <OPCLASS>E</OPCLASS>| ).
|
||||
add_line( | </HRS1212>| ).
|
||||
add_line( | </TERMINATING_EVENTS_BINDING>| ).
|
||||
add_line( | </PDTS>| ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD add_container_segment.
|
||||
|
||||
add_line( | <CONTAINER>| ).
|
||||
add_line( | <CONTAINER>| ).
|
||||
add_line( | <PROPERTIES>| ).
|
||||
add_line( | <OWN_ID>| ).
|
||||
add_line( | <INSTID>TS{ mc_task_id }</INSTID>| ).
|
||||
add_line( | <TYPEID>CL_SWF_CNT_HRS_PERSISTENCE</TYPEID>| ).
|
||||
add_line( | <CATID>CL</CATID>| ).
|
||||
add_line( | </OWN_ID>| ).
|
||||
add_line( | <PROPSTRING>23000000000008</PROPSTRING>| ).
|
||||
add_line( | <XMLVERSION>0002</XMLVERSION>| ).
|
||||
add_line( | <INTERNAL>X</INTERNAL>| ).
|
||||
add_line( | <EXDEFINITN>| ).
|
||||
add_line( | <NAME>_DEF_EXT</NAME>| ).
|
||||
add_line( | <POR>| ).
|
||||
add_line( | <INSTID>DIALOG_STEP_CONTAINER</INSTID>| ).
|
||||
add_line( | <TYPEID>CL_SWF_CNT_PERSISTENCE_DEF_EXT</TYPEID>| ).
|
||||
add_line( | <CATID>CL</CATID>| ).
|
||||
add_line( | </POR>| ).
|
||||
add_line( | </EXDEFINITN>| ).
|
||||
add_line( | </PROPERTIES>| ).
|
||||
add_line( | <ELEMENTS>| ).
|
||||
add_line( | <M NAME="NEWINTERNALMODE:NewInternalMode:" TYPE="::BAPIBUS1006_HEAD-NEWINTERNALMODE:C:1:0" PROPS="0C003301"/>| ).
|
||||
add_line( | <N NAME="FOO:Foo:" TYPE="::CHAR10:h:10:0" PROPS="0C005241"/>| ).
|
||||
add_line( | </ELEMENTS>| ).
|
||||
add_line( | </CONTAINER>| ).
|
||||
add_line( | </CONTAINER>| ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD create_input_xml.
|
||||
generate( ).
|
||||
CREATE OBJECT ri_result TYPE zcl_abapgit_xml_input
|
||||
EXPORTING
|
||||
iv_xml = mv_xml.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD get_input_xml.
|
||||
rv_result = me->mv_xml.
|
||||
ENDMETHOD.
|
||||
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_turnaround_test DEFINITION FINAL FOR TESTING
|
||||
DURATION LONG
|
||||
CLASS ltc_ci DEFINITION FINAL FOR TESTING
|
||||
DURATION MEDIUM
|
||||
RISK LEVEL CRITICAL.
|
||||
|
||||
PRIVATE SECTION.
|
||||
|
||||
DATA mo_mock TYPE REF TO ltd_mock.
|
||||
DATA mi_output_xml TYPE REF TO zif_abapgit_xml_output.
|
||||
DATA mo_cut TYPE REF TO zif_abapgit_object.
|
||||
|
||||
CLASS-METHODS class_setup.
|
||||
CLASS-METHODS task_exists RETURNING VALUE(rv_result) TYPE abap_bool.
|
||||
CLASS-METHODS check_critical_tests_enabled.
|
||||
CLASS-METHODS check_task_does_not_exist.
|
||||
|
||||
METHODS setup.
|
||||
|
||||
METHODS create_task RAISING zcx_abapgit_exception.
|
||||
METHODS serialize_task RETURNING VALUE(rv_result) TYPE string
|
||||
RAISING zcx_abapgit_exception.
|
||||
METHODS clean_xml IMPORTING iv_xml TYPE string
|
||||
RETURNING VALUE(rv_result) TYPE string.
|
||||
METHODS delete_task
|
||||
RAISING
|
||||
zcx_abapgit_exception.
|
||||
|
||||
METHODS output_matches_input FOR TESTING RAISING cx_static_check.
|
||||
|
||||
METHODS run_ci FOR TESTING RAISING cx_static_check.
|
||||
ENDCLASS.
|
||||
|
||||
|
||||
CLASS ltc_ci IMPLEMENTATION.
|
||||
|
||||
CLASS ltc_turnaround_test IMPLEMENTATION.
|
||||
METHOD run_ci.
|
||||
|
||||
DATA lv_repo_url TYPE string.
|
||||
|
||||
METHOD class_setup.
|
||||
check_critical_tests_enabled( ).
|
||||
check_task_does_not_exist( ).
|
||||
ENDMETHOD.
|
||||
"Use STVARV to optionally override repo in local system
|
||||
SELECT SINGLE low
|
||||
INTO lv_repo_url
|
||||
FROM tvarvc
|
||||
WHERE name = 'ABAPGIT_TEST_URL_PDTS' ##WARN_OK.
|
||||
|
||||
|
||||
METHOD check_critical_tests_enabled.
|
||||
|
||||
"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_settings=>get_instance( )->read( )->get_run_critical_tests( ) = abap_false.
|
||||
cl_abap_unit_assert=>fail(
|
||||
msg = 'Cancelled. You can enable these tests at the Settings page'
|
||||
level = if_aunit_constants=>tolerable ).
|
||||
ENDIF.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD check_task_does_not_exist.
|
||||
IF task_exists( ) = abap_true.
|
||||
cl_abap_unit_assert=>fail( msg = |Test task { ltd_mock=>mc_task_id } already exists|
|
||||
level = if_aunit_constants=>fatal
|
||||
quit = if_aunit_constants=>class ).
|
||||
ENDIF.
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD setup.
|
||||
DATA ls_item TYPE zif_abapgit_definitions=>ty_item.
|
||||
|
||||
ls_item-obj_type = 'PDTS'.
|
||||
ls_item-obj_name = ltd_mock=>mc_task_id.
|
||||
|
||||
TRY.
|
||||
CREATE OBJECT mo_cut TYPE zcl_abapgit_object_pdts
|
||||
EXPORTING
|
||||
is_item = ls_item
|
||||
iv_language = sy-langu.
|
||||
CATCH zcx_abapgit_exception.
|
||||
cl_abap_unit_assert=>fail( ).
|
||||
ENDTRY.
|
||||
|
||||
CREATE OBJECT mo_mock.
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD output_matches_input.
|
||||
|
||||
DATA lv_output TYPE string.
|
||||
|
||||
create_task( ).
|
||||
cl_abap_unit_assert=>assert_equals( act = mo_cut->changed_by( )
|
||||
exp = sy-uname ).
|
||||
lv_output = serialize_task( ).
|
||||
lv_output = clean_xml( lv_output ).
|
||||
|
||||
cl_abap_unit_assert=>assert_equals( act = lv_output
|
||||
exp = mo_mock->get_input_xml( ) ).
|
||||
delete_task( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD clean_xml.
|
||||
rv_result = substring_from( val = iv_xml
|
||||
sub = '<' ).
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD create_task.
|
||||
|
||||
DATA lo_input_xml TYPE REF TO zif_abapgit_xml_input.
|
||||
|
||||
DATA: lv_step TYPE zif_abapgit_definitions=>ty_deserialization_step,
|
||||
li_log TYPE REF TO zif_abapgit_log. "#EC NEEDED
|
||||
|
||||
lo_input_xml = mo_mock->create_input_xml( ).
|
||||
|
||||
mo_cut->deserialize( iv_package = '$TMP'
|
||||
io_xml = lo_input_xml
|
||||
iv_step = lv_step
|
||||
ii_log = li_log ).
|
||||
|
||||
cl_abap_unit_assert=>assert_true( task_exists( ) ).
|
||||
cl_abap_unit_assert=>assert_true( mo_cut->exists( ) ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD serialize_task.
|
||||
|
||||
CREATE OBJECT mi_output_xml TYPE zcl_abapgit_xml_output.
|
||||
mo_cut->serialize( io_xml = mi_output_xml ).
|
||||
rv_result = mi_output_xml->render( ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD delete_task.
|
||||
mo_cut->delete( iv_package = '$TMP' ).
|
||||
cl_abap_unit_assert=>assert_false( task_exists( ) ).
|
||||
ENDMETHOD.
|
||||
|
||||
|
||||
METHOD task_exists.
|
||||
|
||||
DATA lv_dummy TYPE hr_sobjid.
|
||||
|
||||
SELECT SINGLE objid
|
||||
INTO lv_dummy
|
||||
FROM hrs1000
|
||||
WHERE otype = 'TS' AND
|
||||
objid = ltd_mock=>mc_task_id ##WARN_OK.
|
||||
|
||||
IF sy-subrc = 0.
|
||||
rv_result = abap_true.
|
||||
ENDIF.
|
||||
zcl_abapgit_objects_ci_tests=>run(
|
||||
iv_object = 'PDTS'
|
||||
iv_url = lv_repo_url ).
|
||||
|
||||
ENDMETHOD.
|
||||
|
||||
|
@ -375,7 +65,8 @@ CLASS ltc_lock IMPLEMENTATION.
|
|||
is_item = ls_item
|
||||
iv_language = sy-langu.
|
||||
|
||||
cl_abap_unit_assert=>assert_true( lo_cut->is_locked( ) ).
|
||||
cl_abap_unit_assert=>assert_equals( act = lo_cut->is_locked( )
|
||||
exp = abap_true ).
|
||||
|
||||
CALL FUNCTION 'DEQUEUE_HRSOBJECT'
|
||||
EXPORTING
|
||||
|
@ -442,7 +133,7 @@ CLASS ltc_smoke_test IMPLEMENTATION.
|
|||
DATA ls_item TYPE zif_abapgit_definitions=>ty_item.
|
||||
|
||||
ls_item-obj_type = 'PDTS'.
|
||||
ls_item-obj_name = ltd_mock=>mc_task_id.
|
||||
ls_item-obj_name = '99999999'.
|
||||
|
||||
TRY.
|
||||
CREATE OBJECT mo_cut TYPE zcl_abapgit_object_pdts
|
||||
|
|
Loading…
Reference in New Issue
Block a user