diff --git a/src/zabapgit_page_settings.prog.abap b/src/zabapgit_page_settings.prog.abap
index 5fc857fb7..797f4fa56 100644
--- a/src/zabapgit_page_settings.prog.abap
+++ b/src/zabapgit_page_settings.prog.abap
@@ -15,6 +15,8 @@ CLASS lcl_gui_page_settings DEFINITION FINAL INHERITING FROM lcl_gui_page_super.
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
METHODS render_proxy
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
+ METHODS render_development_internals
+ RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
METHODS render_form_begin
RETURNING VALUE(ro_html) TYPE REF TO lcl_html_helper.
METHODS render_form_end
@@ -49,6 +51,8 @@ CLASS lcl_gui_page_settings IMPLEMENTATION.
ro_html->add( render_form_begin( ) ).
ro_html->add( render_proxy( ) ).
+ ro_html->add( |
| ).
+ ro_html->add( render_development_internals( ) ).
ro_html->add( render_form_end( ) ).
ENDMETHOD.
@@ -86,7 +90,6 @@ CLASS lcl_gui_page_settings IMPLEMENTATION.
lt_post_fields = parse_post( it_postdata ).
build_settings( lt_post_fields ).
-
validate_settings( ).
IF mv_error = abap_true.
@@ -115,6 +118,13 @@ CLASS lcl_gui_page_settings IMPLEMENTATION.
mv_error = abap_true.
ENDIF.
mo_settings->set_proxy_port( ls_post_field-value ).
+
+ READ TABLE it_post_fields INTO ls_post_field WITH KEY name = 'critical_tests'.
+ IF sy-subrc = 0.
+ mo_settings->set_run_critical_tests( abap_true ).
+ ELSE.
+ mo_settings->set_run_critical_tests( abap_false ).
+ ENDIF.
ENDMETHOD.
@@ -159,11 +169,22 @@ CLASS lcl_gui_page_settings IMPLEMENTATION.
METHOD read_settings.
-
DATA lo_settings_persistence TYPE REF TO lcl_persistence_settings.
lo_settings_persistence = lcl_app=>settings( ).
mo_settings = lo_settings_persistence->read( ).
+ ENDMETHOD.
+ METHOD render_development_internals.
+ DATA lv_checked TYPE string.
+ IF mo_settings->get_run_critical_tests( ) = abap_true.
+ lv_checked = 'checked'.
+ ENDIF.
+ CREATE OBJECT ro_html.
+ ro_html->add( |abapGit Development Internals settings
| ).
+ ro_html->add( ` Enable critical unit tests (see LTCL_DANGEROUS)` ).
+ ro_html->add( |
| ).
+ ro_html->add( |
| ).
ENDMETHOD.
ENDCLASS.
\ No newline at end of file
diff --git a/src/zabapgit_persistence.prog.abap b/src/zabapgit_persistence.prog.abap
index e8c026571..dfd246b72 100644
--- a/src/zabapgit_persistence.prog.abap
+++ b/src/zabapgit_persistence.prog.abap
@@ -427,7 +427,7 @@ CLASS lcl_persistence_user DEFINITION FINAL CREATE PRIVATE FRIENDS lcl_app.
RAISING lcx_exception.
METHODS toggle_favorite
- IMPORTING iv_repo_key TYPE lcl_persistence_repo=>ty_repo-key
+ IMPORTING iv_repo_key TYPE lcl_persistence_repo=>ty_repo-key
RAISING lcx_exception.
METHODS is_favorite_repo
@@ -1426,11 +1426,18 @@ CLASS lcl_settings DEFINITION FINAL.
METHODS get_proxy_port
RETURNING
VALUE(rv_port) TYPE string.
+ METHODS set_run_critical_tests
+ IMPORTING
+ iv_run TYPE abap_bool.
+ METHODS
+ get_run_critical_tests
+ RETURNING VALUE(rv_run) TYPE abap_bool.
PROTECTED SECTION.
PRIVATE SECTION.
DATA mv_proxy_url TYPE string.
DATA mv_proxy_port TYPE string.
+ DATA mv_run_critical_tests TYPE abap_bool.
ENDCLASS.
@@ -1454,6 +1461,14 @@ CLASS lcl_settings IMPLEMENTATION.
rv_port = mv_proxy_port.
ENDMETHOD.
+ METHOD set_run_critical_tests.
+ mv_run_critical_tests = iv_run.
+ ENDMETHOD.
+
+ METHOD get_run_critical_tests.
+ rv_run = mv_run_critical_tests.
+ ENDMETHOD.
+
ENDCLASS.
@@ -1488,10 +1503,18 @@ CLASS lcl_persistence_settings IMPLEMENTATION.
iv_type = 'SETTINGS'
iv_value = 'PROXY_PORT'
iv_data = io_settings->get_proxy_port( ) ).
+
+ lcl_app=>db( )->modify(
+ iv_type = 'SETTINGS'
+ iv_value = 'CRIT_TESTS'
+ iv_data = io_settings->get_run_critical_tests( ) ).
ENDMETHOD.
METHOD read.
+ DATA: lv_critical_tests_as_string TYPE string,
+ lv_critical_tests_as_boolean TYPE abap_bool.
+
CREATE OBJECT ro_settings.
TRY.
ro_settings->set_proxy_url(
@@ -1511,136 +1534,14 @@ CLASS lcl_persistence_settings IMPLEMENTATION.
CATCH lcx_not_found.
ro_settings->set_proxy_port( '' ).
ENDTRY.
- ENDMETHOD.
-
-ENDCLASS.
-
-CLASS ltcl_persistence_settings DEFINITION FINAL FOR TESTING
- DURATION SHORT
- RISK LEVEL HARMLESS.
-
- PRIVATE SECTION.
- METHODS:
- setup,
- modify_settings_proxy_url FOR TESTING,
- modify_settings_proxy_port FOR TESTING,
- read_settings FOR TESTING,
- read_not_found_url FOR TESTING,
- read_not_found_port FOR TESTING.
- DATA:
- mo_persistence_settings TYPE REF TO lcl_persistence_settings,
- mo_settings TYPE REF TO lcl_settings.
-ENDCLASS.
-
-CLASS ltcl_persistence_settings IMPLEMENTATION.
- METHOD setup.
- CREATE OBJECT mo_persistence_settings.
- "These tests may fail if you are locking the entries (e.g. the ZABAPGIT transaction is open)
- ENDMETHOD.
-
- METHOD modify_settings_proxy_url.
- DATA lv_proxy_url TYPE string.
TRY.
- CREATE OBJECT mo_settings.
- mo_settings->set_proxy_url( 'http://proxy' ).
-
- mo_persistence_settings->modify( mo_settings ).
-
- lv_proxy_url = lcl_app=>db( )->read(
- iv_type = 'SETTINGS'
- iv_value = 'PROXY_URL' ).
-
- cl_abap_unit_assert=>assert_equals(
- act = lv_proxy_url
- exp = 'http://proxy' ).
- CATCH cx_root.
- cl_abap_unit_assert=>fail( 'Unexpected exception' ).
- ENDTRY.
- ENDMETHOD.
-
- METHOD modify_settings_proxy_port.
- DATA lv_proxy_port TYPE string.
- TRY.
- CREATE OBJECT mo_settings.
- mo_settings->set_proxy_port( '8080' ).
-
- mo_persistence_settings->modify( mo_settings ).
-
- lv_proxy_port = lcl_app=>db( )->read(
- iv_type = 'SETTINGS'
- iv_value = 'PROXY_PORT' ).
-
- cl_abap_unit_assert=>assert_equals(
- act = lv_proxy_port
- exp = '8080' ).
- CATCH cx_root.
- cl_abap_unit_assert=>fail( 'Unexpected exception' ).
- ENDTRY.
- ENDMETHOD.
-
- METHOD read_settings.
- TRY.
- lcl_app=>db( )->modify(
- iv_type = 'SETTINGS'
- iv_value = 'PROXY_URL'
- iv_data = 'A_URL' ).
-
- lcl_app=>db( )->modify(
- iv_type = 'SETTINGS'
- iv_value = 'PROXY_PORT'
- iv_data = '1000' ).
-
- mo_settings = mo_persistence_settings->read( ).
-
- cl_abap_unit_assert=>assert_equals(
- act = mo_settings->get_proxy_url( )
- exp = 'A_URL' ).
- cl_abap_unit_assert=>assert_equals(
- act = mo_settings->get_proxy_port( )
- exp = '1000' ).
- CATCH cx_root.
- cl_abap_unit_assert=>fail( 'Unexpected exception' ).
- ENDTRY.
- ENDMETHOD.
-
- METHOD read_not_found_port.
- TRY.
- lcl_app=>db( )->modify(
- iv_type = 'SETTINGS'
- iv_value = 'PROXY_URL'
- iv_data = 'A_URL' ).
- lcl_app=>db( )->modify(
- iv_type = 'SETTINGS'
- iv_value = 'PROXY_PORT'
- iv_data = '' ).
-
- mo_settings = mo_persistence_settings->read( ).
-
- cl_abap_unit_assert=>assert_equals(
- act = mo_settings->get_proxy_port( )
- exp = '' ).
- CATCH cx_root.
- cl_abap_unit_assert=>fail( 'Unexpected exception' ).
- ENDTRY.
- ENDMETHOD.
-
- METHOD read_not_found_url.
- TRY.
- lcl_app=>db( )->modify(
- iv_type = 'SETTINGS'
- iv_value = 'PROXY_PORT'
- iv_data = '1000' ).
- lcl_app=>db( )->modify(
- iv_type = 'SETTINGS'
- iv_value = 'PROXY_URL'
- iv_data = '' ).
- mo_settings = mo_persistence_settings->read( ).
-
- cl_abap_unit_assert=>assert_equals(
- act = mo_settings->get_proxy_url( )
- exp = '' ).
- CATCH cx_root.
- cl_abap_unit_assert=>fail( 'Unexpected exception' ).
+ lv_critical_tests_as_string = lcl_app=>db( )->read(
+ iv_type = 'SETTINGS'
+ iv_value = 'CRIT_TESTS' ).
+ lv_critical_tests_as_boolean = lv_critical_tests_as_string.
+ ro_settings->set_run_critical_tests( lv_critical_tests_as_boolean ).
+ CATCH lcx_not_found.
+ ro_settings->set_run_critical_tests( abap_false ).
ENDTRY.
ENDMETHOD.
diff --git a/src/zabapgit_unit_test.prog.abap b/src/zabapgit_unit_test.prog.abap
index fa141fbc5..774c21c5f 100644
--- a/src/zabapgit_unit_test.prog.abap
+++ b/src/zabapgit_unit_test.prog.abap
@@ -81,6 +81,28 @@ CLASS ltcl_convert IMPLEMENTATION.
ENDCLASS. "ltcl_convert IMPLEMENTATION
+CLASS lth_critical_tests DEFINITION .
+ PUBLIC SECTION.
+ CLASS-METHODS:
+ check_run_permission.
+ENDCLASS.
+
+CLASS lth_critical_tests IMPLEMENTATION.
+
+ METHOD check_run_permission.
+ DATA: lo_settings TYPE REF TO lcl_settings.
+ lo_settings = lcl_app=>settings( )->read( ).
+
+ "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 lo_settings->get_run_critical_tests( ) = abap_false.
+ cl_abap_unit_assert=>fail( 'Cancelled. You can enable these tests at the Settings page' ).
+ ENDIF.
+ ENDMETHOD.
+
+ENDCLASS.
+
*----------------------------------------------------------------------*
* CLASS ltcl_dangerous DEFINITION
*----------------------------------------------------------------------*
@@ -111,28 +133,7 @@ ENDCLASS. "ltcl_dangerous DEFINITION
CLASS ltcl_dangerous IMPLEMENTATION.
METHOD class_setup.
-
- DATA: lv_text TYPE c LENGTH 100,
- lv_answer TYPE c LENGTH 1.
-
-
- lv_text = 'Objects will be created and deleted, do not run in customer system!'.
-
- CALL FUNCTION 'POPUP_TO_CONFIRM'
- EXPORTING
- titlebar = 'Warning'
- text_question = lv_text
- text_button_1 = 'Run'
- text_button_2 = 'Cancel'
- default_button = '2'
- display_cancel_button = abap_false
- IMPORTING
- answer = lv_answer.
-
- IF lv_answer = '2'.
- cl_abap_unit_assert=>fail( 'Cancelled' ).
- ENDIF.
-
+ lth_critical_tests=>check_run_permission( ).
ENDMETHOD. "class_setup
METHOD run.
@@ -255,12 +256,12 @@ CLASS ltcl_diff IMPLEMENTATION.
METHOD test.
- DATA: lv_new TYPE string,
- lv_xnew TYPE xstring,
- lv_old TYPE string,
- lv_xold TYPE xstring,
- lo_diff TYPE REF TO lcl_diff,
- lt_diff TYPE lcl_diff=>ty_diffs_tt.
+ DATA: lv_new TYPE string,
+ lv_xnew TYPE xstring,
+ lv_old TYPE string,
+ lv_xold TYPE xstring,
+ lo_diff TYPE REF TO lcl_diff,
+ lt_diff TYPE lcl_diff=>ty_diffs_tt.
FIELD-SYMBOLS: LIKE LINE OF lt_diff.
@@ -685,10 +686,10 @@ CLASS ltcl_url DEFINITION FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL.
PRIVATE SECTION.
METHODS:
- repo_host FOR TESTING RAISING lcx_exception,
- repo_name1 FOR TESTING RAISING lcx_exception,
- repo_name2 FOR TESTING RAISING lcx_exception,
- repo_error FOR TESTING.
+ repo_host FOR TESTING RAISING lcx_exception,
+ repo_name1 FOR TESTING RAISING lcx_exception,
+ repo_name2 FOR TESTING RAISING lcx_exception,
+ repo_error FOR TESTING.
ENDCLASS. "ltcl_url DEFINITION
@@ -1609,7 +1610,7 @@ ENDCLASS.
CLASS ltcl_html_action_utils DEFINITION
FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL
- INHERITING FROM CL_AUNIT_ASSERT.
+ INHERITING FROM cl_aunit_assert.
PUBLIC SECTION.
@@ -1668,7 +1669,7 @@ ENDCLASS. "ltcl_html_action_utils
CLASS ltcl_path DEFINITION
FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL
- INHERITING FROM CL_AUNIT_ASSERT.
+ INHERITING FROM cl_aunit_assert.
PUBLIC SECTION.
METHODS is_root FOR TESTING.
@@ -1797,7 +1798,7 @@ ENDCLASS. "ltcl_path
CLASS ltcl_file_status DEFINITION
FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL
- INHERITING FROM CL_AUNIT_ASSERT.
+ INHERITING FROM cl_aunit_assert.
PUBLIC SECTION.
METHODS calculate_status FOR TESTING.
@@ -1898,7 +1899,7 @@ ENDCLASS. "ltcl_file_status
CLASS ltcl_sap_package DEFINITION
FOR TESTING RISK LEVEL HARMLESS DURATION SHORT FINAL
- INHERITING FROM CL_AUNIT_ASSERT.
+ INHERITING FROM cl_aunit_assert.
PUBLIC SECTION.
METHODS check FOR TESTING.
@@ -1909,8 +1910,8 @@ CLASS ltcl_sap_package IMPLEMENTATION.
METHOD check.
- DATA: lt_results TYPE ty_results_tt,
- lo_log TYPE REF TO lcl_log.
+ DATA: lt_results TYPE ty_results_tt,
+ lo_log TYPE REF TO lcl_log.
FIELD-SYMBOLS: LIKE LINE OF lt_results.
@@ -2009,4 +2010,172 @@ CLASS ltcl_sap_package IMPLEMENTATION.
ENDMETHOD. " check.
-ENDCLASS. "ltcl_sap_package
\ No newline at end of file
+ENDCLASS. "ltcl_sap_package
+
+CLASS ltcl_persistence_settings DEFINITION FINAL FOR TESTING
+ DURATION SHORT
+ RISK LEVEL DANGEROUS.
+
+ PRIVATE SECTION.
+ CLASS-METHODS:
+ class_setup.
+
+ METHODS:
+ setup,
+ clear_settings_database,
+ "Proxy
+ modify_settings_proxy_url FOR TESTING RAISING cx_static_check,
+ modify_settings_proxy_port FOR TESTING RAISING cx_static_check,
+ read_proxy_settings FOR TESTING RAISING cx_static_check,
+ read_not_found_url FOR TESTING RAISING cx_static_check,
+ read_not_found_port FOR TESTING RAISING cx_static_check,
+ "Run critical tests
+ modify_run_critical_tests FOR TESTING RAISING cx_static_check,
+ read_run_critical_tests FOR TESTING RAISING cx_static_check,
+ read_not_found_critical_tests FOR TESTING RAISING cx_static_check.
+ DATA:
+ mo_persistence_settings TYPE REF TO lcl_persistence_settings,
+ mo_settings TYPE REF TO lcl_settings.
+ENDCLASS.
+
+CLASS ltcl_persistence_settings IMPLEMENTATION.
+ METHOD class_setup.
+ lth_critical_tests=>check_run_permission( ).
+ ENDMETHOD.
+ METHOD setup.
+ CREATE OBJECT mo_persistence_settings.
+ CREATE OBJECT mo_settings.
+ clear_settings_database( ).
+ ENDMETHOD.
+
+ METHOD modify_settings_proxy_url.
+ DATA lv_proxy_url TYPE string.
+
+ mo_settings->set_proxy_url( 'http://proxy' ).
+
+ mo_persistence_settings->modify( mo_settings ).
+
+ lv_proxy_url = lcl_app=>db( )->read(
+ iv_type = 'SETTINGS'
+ iv_value = 'PROXY_URL' ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = lv_proxy_url
+ exp = 'http://proxy' ).
+ ENDMETHOD.
+
+ METHOD modify_settings_proxy_port.
+ DATA lv_proxy_port TYPE string.
+ mo_settings->set_proxy_port( '8080' ).
+
+ mo_persistence_settings->modify( mo_settings ).
+
+ lv_proxy_port = lcl_app=>db( )->read(
+ iv_type = 'SETTINGS'
+ iv_value = 'PROXY_PORT' ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = lv_proxy_port
+ exp = '8080' ).
+ ENDMETHOD.
+
+ METHOD read_proxy_settings.
+ lcl_app=>db( )->modify(
+ iv_type = 'SETTINGS'
+ iv_value = 'PROXY_URL'
+ iv_data = 'A_URL' ).
+
+ lcl_app=>db( )->modify(
+ iv_type = 'SETTINGS'
+ iv_value = 'PROXY_PORT'
+ iv_data = '1000' ).
+
+ mo_settings = mo_persistence_settings->read( ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = mo_settings->get_proxy_url( )
+ exp = 'A_URL' ).
+ cl_abap_unit_assert=>assert_equals(
+ act = mo_settings->get_proxy_port( )
+ exp = '1000' ).
+ ENDMETHOD.
+
+ METHOD read_not_found_port.
+ mo_settings = mo_persistence_settings->read( ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = mo_settings->get_proxy_port( )
+ exp = '' ).
+ ENDMETHOD.
+
+ METHOD read_not_found_url.
+
+ mo_settings = mo_persistence_settings->read( ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = mo_settings->get_proxy_url( )
+ exp = '' ).
+ ENDMETHOD.
+
+ METHOD modify_run_critical_tests.
+ DATA lv_run_critical_tests TYPE abap_bool.
+ mo_settings->set_run_critical_tests( abap_true ).
+
+ mo_persistence_settings->modify( mo_settings ).
+
+ lv_run_critical_tests = lcl_app=>db( )->read(
+ iv_type = 'SETTINGS'
+ iv_value = 'CRIT_TESTS' ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = lv_run_critical_tests
+ exp = abap_true ).
+ ENDMETHOD.
+
+ METHOD read_run_critical_tests.
+ lcl_app=>db( )->modify(
+ iv_type = 'SETTINGS'
+ iv_value = 'CRIT_TESTS'
+ iv_data = 'X' ).
+ mo_settings = mo_persistence_settings->read( ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = mo_settings->get_run_critical_tests( )
+ exp = abap_true ).
+ ENDMETHOD.
+ METHOD read_not_found_critical_tests.
+ mo_settings = mo_persistence_settings->read( ).
+
+ cl_abap_unit_assert=>assert_equals(
+ act = mo_settings->get_run_critical_tests( )
+ exp = abap_false ).
+ ENDMETHOD.
+
+
+ METHOD clear_settings_database.
+
+ TRY.
+ lcl_app=>db( )->delete(
+ iv_type = 'SETTINGS'
+ iv_value = 'PROXY_URL' ).
+ CATCH cx_static_check.
+ "If entry didn't exist, that's okay
+ ENDTRY.
+ TRY.
+ lcl_app=>db( )->delete(
+ iv_type = 'SETTINGS'
+ iv_value = 'PROXY_PORT' ).
+ CATCH cx_static_check.
+ "If entry didn't exist, that's okay
+ ENDTRY.
+ TRY.
+ lcl_app=>db( )->delete(
+ iv_type = 'SETTINGS'
+ iv_value = 'CRIT_TESTS' ).
+ CATCH cx_static_check.
+ "If entry didn't exist, that's okay
+ ENDTRY.
+
+ ENDMETHOD.
+
+ENDCLASS.