Refactor feature check (is_feature_enabled) (#6599)

Co-authored-by: Lars Hvam <larshp@hotmail.com>
This commit is contained in:
Marc Bernard 2023-10-31 09:29:00 -04:00 committed by GitHub
parent 9cb286004d
commit d4156132be
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
14 changed files with 179 additions and 139 deletions

View File

@ -9,10 +9,6 @@ CLASS zcl_abapgit_aff_registry DEFINITION
CONSTANTS c_aff_feature TYPE string VALUE 'AFF'.
METHODS:
constructor
IMPORTING
io_settings TYPE REF TO zcl_abapgit_settings OPTIONAL.
PROTECTED SECTION.
PRIVATE SECTION.
@ -25,8 +21,6 @@ CLASS zcl_abapgit_aff_registry DEFINITION
CLASS-DATA:
gt_registry TYPE HASHED TABLE OF ty_registry_entry WITH UNIQUE KEY obj_type.
DATA:
mo_settings TYPE REF TO zcl_abapgit_settings.
METHODS initialize_registry_table.
CLASS-METHODS:
@ -42,15 +36,6 @@ ENDCLASS.
CLASS zcl_abapgit_aff_registry IMPLEMENTATION.
METHOD constructor.
IF io_settings IS SUPPLIED.
mo_settings = io_settings.
ELSE.
mo_settings = zcl_abapgit_persist_factory=>get_settings( )->read( ).
ENDIF.
ENDMETHOD.
METHOD initialize_registry_table.
register( 'CHKC' ).
register( 'CHKO' ).
@ -86,7 +71,7 @@ CLASS zcl_abapgit_aff_registry IMPLEMENTATION.
READ TABLE gt_registry WITH TABLE KEY obj_type = iv_obj_type INTO ls_registry_entry.
IF sy-subrc = 0 AND ls_registry_entry-experimental = abap_false.
rv_result = abap_true.
ELSEIF sy-subrc = 0 AND mo_settings->is_feature_enabled( c_aff_feature ) = abap_true.
ELSEIF sy-subrc = 0 AND zcl_abapgit_feature=>is_enabled( c_aff_feature ) = abap_true.
rv_result = abap_true.
ELSE.
rv_result = abap_false.

View File

@ -30,16 +30,14 @@ CLASS ltcl_aff_registry IMPLEMENTATION.
lo_settings_stub TYPE REF TO zcl_abapgit_settings,
lv_act TYPE abap_bool.
CREATE OBJECT lo_settings_stub.
lo_settings_stub = zcl_abapgit_persist_factory=>get_settings( )->read( ).
IF iv_experimental = abap_true.
lo_settings_stub->set_experimental_features( zcl_abapgit_aff_registry=>c_aff_feature ).
ELSE.
lo_settings_stub->set_experimental_features( '' ).
ENDIF.
CREATE OBJECT lo_cut TYPE zcl_abapgit_aff_registry
EXPORTING
io_settings = lo_settings_stub.
CREATE OBJECT lo_cut TYPE zcl_abapgit_aff_registry.
lv_act = lo_cut->is_supported_object_type( iv_obj_type ).
cl_abap_unit_assert=>assert_equals( exp = iv_is_supported
act = lv_act ).

View File

@ -112,8 +112,7 @@ CLASS zcl_abapgit_object_intf IMPLEMENTATION.
iv_language = iv_language ).
mi_object_oriented_object_fct = zcl_abapgit_oo_factory=>make( ms_item-obj_type ).
mv_aff_enabled = zcl_abapgit_persist_factory=>get_settings( )->read( )->is_feature_enabled(
zcl_abapgit_aff_registry=>c_aff_feature ).
mv_aff_enabled = zcl_abapgit_feature=>is_enabled( zcl_abapgit_abap_language_vers=>c_feature_flag ).
ENDMETHOD.

View File

@ -13,7 +13,7 @@ CLASS ltc_ci IMPLEMENTATION.
DATA lv_repo_url TYPE string.
IF zcl_abapgit_persist_factory=>get_settings( )->read( )->is_feature_enabled( 'PDTS' ) = abap_false.
IF zcl_abapgit_feature=>is_enabled( 'PDTS' ) = abap_false.
RETURN.
ENDIF.
@ -53,7 +53,7 @@ CLASS ltc_smoke_test IMPLEMENTATION.
DATA ls_item TYPE zif_abapgit_definitions=>ty_item.
IF zcl_abapgit_persist_factory=>get_settings( )->read( )->is_feature_enabled( 'PDTS' ) = abap_false.
IF zcl_abapgit_feature=>is_enabled( 'PDTS' ) = abap_false.
RETURN.
ENDIF.
@ -73,7 +73,7 @@ CLASS ltc_smoke_test IMPLEMENTATION.
METHOD run_simple_methods.
IF zcl_abapgit_persist_factory=>get_settings( )->read( )->is_feature_enabled( 'PDTS' ) = abap_false.
IF zcl_abapgit_feature=>is_enabled( 'PDTS' ) = abap_false.
RETURN.
ENDIF.

View File

@ -1000,7 +1000,7 @@ CLASS zcl_abapgit_gui_page_repo_over IMPLEMENTATION.
CREATE OBJECT ro_toolbar EXPORTING iv_id = 'toolbar-main'.
IF zcl_abapgit_persist_factory=>get_settings( )->read( )->is_feature_enabled( 'FLOW' ) = abap_true.
IF zcl_abapgit_feature=>is_enabled( 'FLOW' ) = abap_true.
ro_toolbar->add(
iv_txt = zcl_abapgit_gui_buttons=>flow( )
iv_act = zif_abapgit_definitions=>c_action-flow ).

View File

@ -51,7 +51,6 @@ CLASS zcl_abapgit_gui_page_sett_repo DEFINITION
DATA mo_repo TYPE REF TO zcl_abapgit_repo .
DATA mv_requirements_count TYPE i .
DATA mv_feature_enabled TYPE abap_bool.
METHODS validate_form
IMPORTING
@ -88,7 +87,6 @@ CLASS zcl_abapgit_gui_page_sett_repo IMPLEMENTATION.
" Feature for ABAP Language Version
lo_settings = zcl_abapgit_persist_factory=>get_settings( )->read( ).
mv_feature_enabled = lo_settings->is_feature_enabled( zcl_abapgit_abap_language_vers=>c_feature_flag ).
CREATE OBJECT mo_validation_log.
CREATE OBJECT mo_form_data.
@ -176,7 +174,7 @@ CLASS zcl_abapgit_gui_page_sett_repo IMPLEMENTATION.
iv_label = 'Minimum Patch'
iv_width = '30%' ).
IF mv_feature_enabled = abap_true.
IF zcl_abapgit_feature=>is_enabled( zcl_abapgit_abap_language_vers=>c_feature_flag ) = abap_true.
ro_form->radio(
iv_name = c_id-abap_langu_vers
iv_default_value = ''
@ -310,7 +308,7 @@ CLASS zcl_abapgit_gui_page_sett_repo IMPLEMENTATION.
iv_key = |{ c_id-requirements }-{ zif_abapgit_html_form=>c_rows }|
iv_val = |{ mv_requirements_count }| ).
IF mv_feature_enabled = abap_true.
IF zcl_abapgit_feature=>is_enabled( zcl_abapgit_abap_language_vers=>c_feature_flag ) = abap_true.
ro_form_data->set(
iv_key = c_id-abap_langu_vers
iv_val = ls_dot-abap_language_version ).
@ -334,7 +332,7 @@ CLASS zcl_abapgit_gui_page_sett_repo IMPLEMENTATION.
lo_dot->set_starting_folder( mo_form_data->get( c_id-starting_folder ) ).
lo_dot->set_version_constant( mo_form_data->get( c_id-version_constant ) ).
IF mv_feature_enabled = abap_true.
IF zcl_abapgit_feature=>is_enabled( zcl_abapgit_abap_language_vers=>c_feature_flag ) = abap_true.
lo_dot->set_abap_language_version( mo_form_data->get( c_id-abap_langu_vers ) ).
ENDIF.

View File

@ -62,13 +62,9 @@ CLASS zcl_abapgit_abap_language_vers IMPLEMENTATION.
METHOD constructor.
DATA lo_settings TYPE REF TO zcl_abapgit_settings.
mo_dot_abapgit = io_dot_abapgit.
lo_settings = zcl_abapgit_persist_factory=>get_settings( )->read( ).
IF lo_settings->is_feature_enabled( c_feature_flag ) = abap_false.
IF zcl_abapgit_feature=>is_enabled( c_feature_flag ) = abap_false.
mv_has_abap_language_vers = abap_false.
ELSEIF get_abap_language_vers_by_repo( ) = zif_abapgit_dot_abapgit=>c_abap_language_version-undefined.
mv_has_abap_language_vers = abap_false.

View File

@ -176,7 +176,6 @@ CLASS ltcl_abap_language_version IMPLEMENTATION.
exp = iv_exp
msg = |ABAP Language Version: { iv_version }, Cloud| ).
ENDMETHOD.
METHOD repo_setting_feature_off.

View File

@ -0,0 +1,48 @@
CLASS zcl_abapgit_feature DEFINITION
PUBLIC
FINAL
CREATE PUBLIC.
PUBLIC SECTION.
" For dependency injection/testing, use the following
" zcl_abapgit_persist_factory=>get_settings( )->read( )->set_experimental_features( )
CLASS-METHODS is_enabled
IMPORTING
!iv_feature TYPE string OPTIONAL
RETURNING
VALUE(rv_run) TYPE abap_bool.
PROTECTED SECTION.
PRIVATE SECTION.
ENDCLASS.
CLASS zcl_abapgit_feature IMPLEMENTATION.
METHOD is_enabled.
DATA:
lv_features TYPE string,
lt_features TYPE string_table.
IF zcl_abapgit_factory=>get_environment( )->is_merged( ) = abap_true.
RETURN.
ENDIF.
lv_features = zcl_abapgit_persist_factory=>get_settings( )->read( )->get_experimental_features( ).
CONDENSE lv_features NO-GAPS.
rv_run = boolc( lv_features = abap_true ).
IF iv_feature IS NOT INITIAL.
SPLIT lv_features AT ',' INTO TABLE lt_features.
READ TABLE lt_features TRANSPORTING NO FIELDS WITH TABLE KEY table_line = iv_feature.
rv_run = boolc( rv_run = abap_true OR sy-subrc = 0 ).
ENDIF.
ENDMETHOD.
ENDCLASS.

View File

@ -0,0 +1,101 @@
CLASS ltcl_feature DEFINITION FOR TESTING RISK LEVEL HARMLESS
DURATION SHORT FINAL.
PRIVATE SECTION.
DATA mo_settings TYPE REF TO zcl_abapgit_settings.
DATA mo_cut TYPE REF TO zcl_abapgit_feature.
METHODS:
setup,
merged_disabled FOR TESTING,
feature_disabled FOR TESTING,
feature_enabled FOR TESTING.
ENDCLASS.
CLASS ltcl_feature IMPLEMENTATION.
METHOD setup.
CREATE OBJECT mo_cut.
mo_settings = zcl_abapgit_persist_factory=>get_settings( )->read( ).
ENDMETHOD.
METHOD merged_disabled.
IF zcl_abapgit_factory=>get_environment( )->is_merged( ) = abap_true.
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_enabled( )
exp = abap_false ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_enabled( 'TEST' )
exp = abap_false ).
ENDIF.
ENDMETHOD.
METHOD feature_disabled.
" Only run for dev version
IF zcl_abapgit_factory=>get_environment( )->is_merged( ) = abap_true.
RETURN.
ENDIF.
" All off
mo_settings->set_experimental_features( '' ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_enabled( 'TEST' )
exp = abap_false ).
ENDMETHOD.
METHOD feature_enabled.
" Only run for dev version
IF zcl_abapgit_factory=>get_environment( )->is_merged( ) = abap_true.
RETURN.
ENDIF.
" All on
mo_settings->set_experimental_features( 'X' ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_enabled( 'TEST' )
exp = abap_true ).
" Just one feature on
mo_settings->set_experimental_features( 'TEST' ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_enabled( 'TEST' )
exp = abap_true ).
" Several features on
mo_settings->set_experimental_features( 'AFF,LXE' ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_enabled( 'TEST' )
exp = abap_false ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_enabled( 'AFF' )
exp = abap_true ).
" Several features on with whitespace
mo_settings->set_experimental_features( ' AFF , FLOW ,LXE ' ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_enabled( 'TEST' )
exp = abap_false ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_enabled( 'FLOW' )
exp = abap_true ).
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_FEATURE</CLSNAME>
<LANGU>E</LANGU>
<DESCRIPT>abapGit - Feature</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>

View File

@ -55,11 +55,6 @@ CLASS zcl_abapgit_settings DEFINITION
METHODS get_experimental_features
RETURNING
VALUE(rv_features) TYPE string.
METHODS is_feature_enabled
IMPORTING
!iv_feature TYPE string OPTIONAL
RETURNING
VALUE(rv_run) TYPE abap_bool.
METHODS set_max_lines
IMPORTING
!iv_lines TYPE i .
@ -338,19 +333,6 @@ CLASS zcl_abapgit_settings IMPLEMENTATION.
ENDMETHOD.
METHOD is_feature_enabled.
DATA lt_features TYPE string_table.
IF zcl_abapgit_factory=>get_environment( )->is_merged( ) = abap_false.
rv_run = boolc( ms_settings-experimental_features = abap_true ).
IF iv_feature IS NOT INITIAL.
SPLIT ms_settings-experimental_features AT ',' INTO TABLE lt_features.
READ TABLE lt_features TRANSPORTING NO FIELDS WITH TABLE KEY table_line = iv_feature.
rv_run = boolc( rv_run = abap_true OR sy-subrc = 0 ).
ENDIF.
ENDIF.
ENDMETHOD.
METHOD set_activate_wo_popup.
ms_user_settings-activate_wo_popup = iv_act_wo_popup.
ENDMETHOD.

View File

@ -1,82 +0,0 @@
CLASS ltcl_settings DEFINITION FOR TESTING RISK LEVEL HARMLESS
DURATION SHORT FINAL.
PRIVATE SECTION.
DATA mo_cut TYPE REF TO zcl_abapgit_settings.
METHODS:
setup,
feature_disabled FOR TESTING,
feature_enabled FOR TESTING.
ENDCLASS.
CLASS ltcl_settings IMPLEMENTATION.
METHOD setup.
CREATE OBJECT mo_cut.
ENDMETHOD.
METHOD feature_disabled.
" Only run for dev version
IF zcl_abapgit_factory=>get_environment( )->is_merged( ) = abap_true.
RETURN.
ENDIF.
" All off
mo_cut->set_experimental_features( '' ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->get_experimental_features( )
exp = '' ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_feature_enabled( 'TEST' )
exp = abap_false ).
ENDMETHOD.
METHOD feature_enabled.
" Only run for dev version
IF zcl_abapgit_factory=>get_environment( )->is_merged( ) = abap_true.
RETURN.
ENDIF.
" All on
mo_cut->set_experimental_features( 'X' ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->get_experimental_features( )
exp = 'X' ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_feature_enabled( 'TEST' )
exp = abap_true ).
" Just one feature on
mo_cut->set_experimental_features( 'TEST' ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->get_experimental_features( )
exp = 'TEST' ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_feature_enabled( 'TEST' )
exp = abap_true ).
" Several features on
mo_cut->set_experimental_features( 'AFF,LXE' ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_feature_enabled( 'TEST' )
exp = abap_false ).
cl_abap_unit_assert=>assert_equals(
act = mo_cut->is_feature_enabled( 'AFF' )
exp = abap_true ).
ENDMETHOD.
ENDCLASS.

View File

@ -10,7 +10,6 @@
<CLSCCINCL>X</CLSCCINCL>
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
</VSEOCLASS>
</asx:values>
</asx:abap>