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.