Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 1 addition & 0 deletions changelog.txt
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ Legend

2020-10-10 v1.05.0
------------------
- db access in ut when OSQL/CDS framework is being used
! category description
+ report to activate or deactivate the SCI entries
+ add/remove all check in profiles
Expand Down
39 changes: 20 additions & 19 deletions src/checks/y_check_db_access_in_ut.clas.abap
Original file line number Diff line number Diff line change
@@ -1,30 +1,18 @@
CLASS y_check_db_access_in_ut DEFINITION
PUBLIC
INHERITING FROM y_check_base
CREATE PUBLIC .

CLASS y_check_db_access_in_ut DEFINITION PUBLIC INHERITING FROM y_check_base CREATE PUBLIC.
PUBLIC SECTION.
METHODS constructor .
METHODS constructor.
PROTECTED SECTION.
METHODS execute_check REDEFINITION.
METHODS inspect_tokens REDEFINITION.

METHODS has_osql_or_cds_framework RETURNING VALUE(result) TYPE abap_bool.
PRIVATE SECTION.

METHODS is_persistent_object
IMPORTING
!obj_name TYPE string
RETURNING
VALUE(result) TYPE abap_bool .

METHODS check_if_error
IMPORTING
!index TYPE i OPTIONAL
!statement TYPE sstmnt OPTIONAL .
METHODS is_persistent_object IMPORTING obj_name TYPE string
RETURNING VALUE(result) TYPE abap_bool .
METHODS check_if_error IMPORTING index TYPE i OPTIONAL
statement TYPE sstmnt OPTIONAL .
ENDCLASS.



CLASS Y_CHECK_DB_ACCESS_IN_UT IMPLEMENTATION.


Expand All @@ -45,6 +33,9 @@ CLASS Y_CHECK_DB_ACCESS_IN_UT IMPLEMENTATION.


METHOD execute_check.

CHECK has_osql_or_cds_framework( ) = abap_false.

LOOP AT ref_scan_manager->get_structures( ) ASSIGNING FIELD-SYMBOL(<structure>)
WHERE stmnt_type EQ scan_struc_stmnt_type-method.

Expand Down Expand Up @@ -144,4 +135,14 @@ CLASS Y_CHECK_DB_ACCESS_IN_UT IMPLEMENTATION.
parameter_01 = |{ key_word }| ).

ENDMETHOD.

METHOD has_osql_or_cds_framework.
DATA(tokens) = ref_scan_manager->get_tokens( ).

IF line_exists( tokens[ str = 'IF_OSQL_TEST_ENVIRONMENT' ] )
OR line_exists( tokens[ str = 'IF_CDS_TEST_ENVIRONMENT' ] ).
result = abap_true.
ENDIF.
ENDMETHOD.

ENDCLASS.
102 changes: 102 additions & 0 deletions src/checks/y_check_db_access_in_ut.clas.testclasses.abap
Original file line number Diff line number Diff line change
Expand Up @@ -476,3 +476,105 @@ CLASS ltc_commit IMPLEMENTATION.
ENDMETHOD.

ENDCLASS.

CLASS ltc_osql_framework DEFINITION INHERITING FROM y_unit_test_base FOR TESTING RISK LEVEL HARMLESS DURATION SHORT.
PROTECTED SECTION.
METHODS get_cut REDEFINITION.
METHODS get_code_with_issue REDEFINITION.
METHODS get_code_without_issue REDEFINITION.
METHODS get_code_with_exemption REDEFINITION.
ENDCLASS.

CLASS ltc_osql_framework IMPLEMENTATION.

METHOD get_cut.
result ?= NEW y_check_db_access_in_ut( ).
ENDMETHOD.

METHOD get_code_with_issue.
result = VALUE #(
( ' REPORT ut_test. ' )

( ' CLASS lcl_classname DEFINITION FOR TESTING. ' )
( ' PUBLIC SECTION. ' )
( ' METHODS example FOR TESTING. ' )
( ' ENDCLASS.' )

( ' CLASS lcl_classname IMPLEMENTATION. ' )
( ' METHOD example. ' )
( ' DATA tadir TYPE tadir. ' )
( ' SELECT SINGLE * FROM tadir INTO tadir. ' )
( ' ENDMETHOD. ' )
( ' ENDCLASS. ' )
).
ENDMETHOD.

METHOD get_code_without_issue.
result = VALUE #(
( ' REPORT ut_test. ' )

( ' CLASS lcl_classname DEFINITION FOR TESTING. ' )
( ' PUBLIC SECTION. ' )
( ' METHODS scenario FOR TESTING. ' )
( ' PROTECTED SECTION. ' )
( ' METHODS given_fake_value. ' )
( ' METHODS when_select. ' )
( ' METHODS then_has_entry. ' )
( ' PRIVATE SECTION. ' )
( ' CLASS-DATA osql_test_environment TYPE REF TO if_osql_test_environment. ' )
( ' DATA cut TYPE tadir. ' )
( ' CLASS-METHODS class_setup. ' )
( ' CLASS-METHODS class_teardown. ' )
( ' ENDCLASS.' )

( ' CLASS lcl_classname IMPLEMENTATION. ' )

( ' METHOD class_setup. ' )
( | osql_test_environment = cl_osql_test_environment=>create( VALUE #( ( 'tadir' ) ) ). | )
( ' ENDMETHOD. ' )

( ' METHOD class_teardown. ' )
( ' osql_test_environment->destroy( ). ' )
( ' ENDMETHOD. ' )

( ' METHOD given_fake_value. ' )
( ' "osql_test_environment->insert_test_data( data ). ' )
( ' ENDMETHOD. ' )

( ' METHOD when_select. ' )
( ' SELECT SINGLE * FROM tadir INTO cut. ' )
( ' ENDMETHOD. ' )

( ' METHOD then_has_entry. ' )
( ' cl_aunit_assert=>assert_not_initial( cut ). ' )
( ' ENDMETHOD. ' )

( ' METHOD scenario. ' )
( ' given_fake_value( ). ' )
( ' when_select( ). ' )
( ' then_has_entry( ). ' )
( ' ENDMETHOD. ' )

( ' ENDCLASS. ' )
).
ENDMETHOD.

METHOD get_code_with_exemption.
result = VALUE #(
( ' REPORT ut_test. ' )

( ' CLASS lcl_classname DEFINITION FOR TESTING. ' )
( ' PUBLIC SECTION. ' )
( ' METHODS example FOR TESTING. ' )
( ' ENDCLASS.' )

( ' CLASS lcl_classname IMPLEMENTATION. ' )
( ' METHOD example. ' )
( ' DATA tadir TYPE tadir. ' )
( ' SELECT SINGLE * FROM tadir INTO tadir. "#EC DB_ACCESS_UT ' )
( ' ENDMETHOD. ' )
( ' ENDCLASS. ' )
).
ENDMETHOD.

ENDCLASS.