From f2d9347ba212130258dfa2ff8f847596910a1ea3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Sascha=20W=C3=A4chter?= Date: Wed, 6 Dec 2023 16:00:11 +0000 Subject: [PATCH] Final Demo for AbapConf --- src/zbp_ac_r_sessiontp.clas.locals_imp.abap | 42 +++-- src/zbp_ac_r_sessiontp.clas.testclasses.abap | 79 +++++++-- src/zbp_ac_r_speakertp.clas.locals_imp.abap | 59 ++++++- src/zbp_ac_r_speakertp.clas.testclasses.abap | 80 +++++++++ src/zbp_ac_r_speakertp.clas.xml | 1 + src/zc_ac_sessiontp.ddlx.asddlxs | 43 ++++- src/zc_ac_speakertp.ddlx.asddlxs | 32 +++- src/zcl_ac_mail_framework.clas.abap | 30 ---- src/zcl_ac_mail_framework.clas.xml | 31 ---- src/zr_ac_sessiontp.bdef.asbdef | 2 + src/ztc_ac_session_odata.clas.abap | 167 +++++++++++++++++++ src/ztc_ac_session_odata.clas.xml | 19 +++ 12 files changed, 476 insertions(+), 109 deletions(-) create mode 100644 src/zbp_ac_r_speakertp.clas.testclasses.abap delete mode 100644 src/zcl_ac_mail_framework.clas.abap delete mode 100644 src/zcl_ac_mail_framework.clas.xml create mode 100644 src/ztc_ac_session_odata.clas.abap create mode 100644 src/ztc_ac_session_odata.clas.xml diff --git a/src/zbp_ac_r_sessiontp.clas.locals_imp.abap b/src/zbp_ac_r_sessiontp.clas.locals_imp.abap index bce08a3..6d6286d 100644 --- a/src/zbp_ac_r_sessiontp.clas.locals_imp.abap +++ b/src/zbp_ac_r_sessiontp.clas.locals_imp.abap @@ -3,21 +3,26 @@ CLASS ltc_session DEFINITION DEFERRED FOR TESTING. "! Methods are private so you have to define a friendship to your testclass CLASS lhc_session DEFINITION INHERITING FROM cl_abap_behavior_handler FRIENDS ltc_session. PRIVATE SECTION. - METHODS: - get_global_authorizations FOR GLOBAL AUTHORIZATION - IMPORTING - REQUEST requested_authorizations FOR Session - RESULT result, - calculatesessionuuid FOR DETERMINE ON SAVE - IMPORTING - keys FOR Session~CalculateSessionUUID , - "! validate mailaddress if it's correct to prevent false entries or trash proposals - validateMail FOR VALIDATE ON SAVE - IMPORTING keys FOR Session~validateMail, - validateMailEnding FOR VALIDATE ON SAVE - IMPORTING keys FOR Session~validateMailEnding, - SetSessionAccepted FOR MODIFY - IMPORTING keys FOR ACTION Session~SetSessionAccepted RESULT result. + METHODS get_global_authorizations FOR GLOBAL AUTHORIZATION + IMPORTING + REQUEST requested_authorizations FOR Session + RESULT result. + + METHODS calculatesessionuuid FOR DETERMINE ON SAVE + IMPORTING + keys FOR Session~CalculateSessionUUID. + + "! validate mailaddress if it's correct to prevent false entries or trash proposals + METHODS validateMail FOR VALIDATE ON SAVE + IMPORTING keys FOR Session~validateMail. + + "! validate mailaddress if it's correct to prevent false entries or trash proposals + METHODS validateMailEnding FOR VALIDATE ON SAVE + IMPORTING keys FOR Session~validateMailEnding. + + "! Check if session accepted works correct + METHODS SetSessionAccepted FOR MODIFY + IMPORTING keys FOR ACTION Session~SetSessionAccepted RESULT result. ENDCLASS. CLASS lhc_session IMPLEMENTATION. @@ -109,12 +114,6 @@ CLASS lhc_session IMPLEMENTATION. "Send Mail to Speaker LOOP AT sessions INTO DATA(session). - DATA(mail_framework) = NEW zcl_ac_mail_framework( ). - DATA(succesful) = mail_framework->sens_session_accepted( - EXPORTING - i_mail = session-Mail - i_title = session-title - ). result = VALUE #( BASE result ( %tky = session-%tky @@ -122,7 +121,6 @@ CLASS lhc_session IMPLEMENTATION. ENDLOOP. - ENDMETHOD. ENDCLASS. diff --git a/src/zbp_ac_r_sessiontp.clas.testclasses.abap b/src/zbp_ac_r_sessiontp.clas.testclasses.abap index b129f22..bf2eea0 100644 --- a/src/zbp_ac_r_sessiontp.clas.testclasses.abap +++ b/src/zbp_ac_r_sessiontp.clas.testclasses.abap @@ -31,7 +31,7 @@ CLASS ltc_session DEFINITION FINAL FOR TESTING validateCorrectMailEnding FOR TESTING, "! Test accept a Session Action - acceptSession for Testing. + acceptSession FOR TESTING. ENDCLASS. @@ -86,31 +86,31 @@ CLASS ltc_session IMPLEMENTATION. ENDMETHOD. METHOD validateincorrectmail. - " Declare required structures - DATA failed TYPE RESPONSE FOR FAILED LATE zr_ac_sessiontp. - DATA reported TYPE RESPONSE FOR REPORTED LATE zr_ac_sessiontp. + DATA failed TYPE RESPONSE FOR FAILED LATE zr_ac_sessiontp. + DATA reported TYPE RESPONSE FOR REPORTED LATE zr_ac_sessiontp. " Fill in test data DATA session_mock_data TYPE STANDARD TABLE OF zzt_ac_session. - session_mock_data = VALUE #( ( session_uuid = cl_system_uuid=>if_system_uuid_static~create_uuid_x16( ) title = 'Testtitel' Abstract = 'Eine Test Session' Session_Level = 'Basics' - mail = 'ichBinKeineMail' Language = 'English' Focus_Area = 'ABAP Restful Application Programming Model (RAP)' ) ). + + session_mock_data = VALUE #( ( session_uuid = cl_system_uuid=>if_system_uuid_static~create_uuid_x16( ) + title = 'Testtitel' + Abstract = 'Eine Test Session' + Session_Level = 'Basics' + mail = 'ichBinKeineMail' + Language = 'English' + Focus_Area = 'ABAP Restful Application Programming Model (RAP)' ) ). cds_test_environment->insert_test_data( session_mock_data ). " Call method to be tested class_under_test->validatemail( - EXPORTING - keys = CORRESPONDING #( session_mock_data MAPPING SessionUUID = session_uuid ) - CHANGING - failed = failed - reported = reported - ). + EXPORTING keys = CORRESPONDING #( session_mock_data MAPPING SessionUUID = session_uuid ) + CHANGING failed = failed + reported = reported ). " Check for content in failed and reported cl_abap_unit_assert=>assert_not_initial( msg = 'failed' act = failed ). cl_abap_unit_assert=>assert_not_initial( msg = 'reported' act = reported ). - - ENDMETHOD. METHOD validatecorrectmailending. @@ -147,6 +147,57 @@ CLASS ltc_session IMPLEMENTATION. METHOD acceptsession. + " Fill in test data + DATA session_mock_data TYPE STANDARD TABLE OF zzt_ac_session. + DATA(session_uuid) = cl_system_uuid=>if_system_uuid_static~create_uuid_x16( ). + session_mock_data = VALUE #( ( session_uuid = session_uuid title = 'Testtitel' Abstract = 'Eine Test Session' Session_Level = 'Basics' + mail = 'write@testmail.com' Language = 'English' Focus_Area = 'ABAP Restful Application Programming Model (RAP)' ) ). + cds_test_environment->insert_test_data( session_mock_data ). + + " Declare required table and structures + DATA result TYPE TABLE FOR ACTION RESULT zr_ac_sessiontp\\session~SetSessionAccepted. + DATA mapped TYPE RESPONSE FOR MAPPED EARLY zr_ac_sessiontp. + DATA failed TYPE RESPONSE FOR FAILED EARLY zr_ac_sessiontp. + DATA reported TYPE RESPONSE FOR REPORTED EARLY zr_ac_sessiontp. + + " Call the method to be tested + class_under_test->setsessionaccepted( + EXPORTING + keys = CORRESPONDING #( session_mock_data MAPPING SessionUUID = session_uuid ) + CHANGING + result = result + mapped = mapped + failed = failed + reported = reported + ). + + " Check for content in mapped, failed and reported + cl_abap_unit_assert=>assert_initial( msg = 'mapped' act = mapped ). + cl_abap_unit_assert=>assert_initial( msg = 'failed' act = failed ). + cl_abap_unit_assert=>assert_initial( msg = 'reported' act = reported ). + + " Check action result for fields of interest: Accepted should be X + DATA exp LIKE result. + exp = VALUE #( ( SessionUUID = session_uuid %param-SessionUUID = session_uuid %param-Accepted = 'X' + %param-Title = 'Testtitel' %param-Abstract = 'Eine Test Session' %param-SessionLevel = 'Basics' + %param-mail = 'write@testmail.com' %param-Language = 'English' + %param-FocusArea = 'ABAP Restful Application Programming Model (RAP)' ) ). + + DATA act LIKE result. + act = CORRESPONDING #( result MAPPING SessionUUID = SessionUUID + ( %param = %param MAPPING SessionUUID = SessionUUID + Accepted = Accepted + Title = Title + abstract = Abstract + SessionLevel = SessionLevel + mail = Mail + Language = Language + FocusArea = FocusArea + EXCEPT * ) + EXCEPT * ). + + cl_abap_unit_assert=>assert_equals( msg = 'action result' exp = exp act = act ). + ENDMETHOD. ENDCLASS. diff --git a/src/zbp_ac_r_speakertp.clas.locals_imp.abap b/src/zbp_ac_r_speakertp.clas.locals_imp.abap index 5d2f45f..0f1ebc0 100644 --- a/src/zbp_ac_r_speakertp.clas.locals_imp.abap +++ b/src/zbp_ac_r_speakertp.clas.locals_imp.abap @@ -1,12 +1,57 @@ -CLASS LHC_SPEAKER DEFINITION INHERITING FROM CL_ABAP_BEHAVIOR_HANDLER. +"! Local Test Class for Speaker entity +CLASS ltc_speaker DEFINITION DEFERRED FOR TESTING. +CLASS lhc_speaker DEFINITION INHERITING FROM cl_abap_behavior_handler FRIENDS ltc_speaker. PRIVATE SECTION. - METHODS: - CALCULATESPEAKERUUID FOR DETERMINE ON SAVE - IMPORTING - KEYS FOR Speaker~CalculateSpeakerUUID . + METHODS calculatespeakeruuid FOR DETERMINE ON SAVE + IMPORTING + keys FOR Speaker~CalculateSpeakerUUID. + + METHODS autoTwitterHandle FOR DETERMINE ON MODIFY + IMPORTING keys FOR Speaker~autoTwitterHandle. ENDCLASS. -CLASS LHC_SPEAKER IMPLEMENTATION. - METHOD CALCULATESPEAKERUUID. + +CLASS lhc_speaker IMPLEMENTATION. + METHOD calculatespeakeruuid. + ENDMETHOD. + + METHOD autoTwitterHandle. + DATA twitter_handle TYPE ze_abapconf_speaker_socialmed. + + " Read travel instances of the transferred keys + READ ENTITIES OF zr_ac_sessiontp IN LOCAL MODE + ENTITY Speaker + FIELDS ( speakerwebpage socialmed ) + WITH CORRESPONDING #( keys ) + RESULT DATA(speakers) + " TODO: variable is assigned but never used (ABAP cleaner) + FAILED DATA(read_failed). + + " Check if Social Media Handle is already set + DELETE speakers WHERE Socialmed IS NOT INITIAL. + IF speakers IS INITIAL. + RETURN. + ENDIF. + + LOOP AT speakers INTO DATA(speaker). + + " Check if Webpage is a Twitter Profile + IF speaker-SpeakerWebpage CA 'twitter.com/'. + + twitter_handle = |@{ match( val = speaker-SpeakerWebpage + regex = '([^\/]+$)' ) }|. + MODIFY ENTITIES OF zr_ac_sessiontp IN LOCAL MODE + ENTITY Speaker + UPDATE SET FIELDS + WITH VALUE #( ( %tky = speaker-%tky Socialmed = twitter_handle ) ) + REPORTED DATA(update_reported). + + " Set the changing parameter + reported = CORRESPONDING #( DEEP update_reported ). + + ENDIF. + + ENDLOOP. + ENDMETHOD. ENDCLASS. diff --git a/src/zbp_ac_r_speakertp.clas.testclasses.abap b/src/zbp_ac_r_speakertp.clas.testclasses.abap new file mode 100644 index 0000000..803ce71 --- /dev/null +++ b/src/zbp_ac_r_speakertp.clas.testclasses.abap @@ -0,0 +1,80 @@ +CLASS ltc_speaker DEFINITION FINAL FOR TESTING + DURATION SHORT + RISK LEVEL HARMLESS. + + PRIVATE SECTION. + CLASS-DATA: class_under_test TYPE REF TO lhc_speaker, + cds_test_environment TYPE REF TO if_cds_test_environment. + + CLASS-METHODS: + "! Instantiate class under test and setup test double frameworks + class_setup, + + "! Destroy test environments and test doubles + class_teardown. + + METHODS: + "! Reset test doubles + setup, + + "! Reset transactional buffer + teardown, + + "! Test Auto Twitter Handle + autoTwitterHandle FOR TESTING. + +ENDCLASS. + +CLASS ltc_speaker IMPLEMENTATION. + + METHOD class_setup. + CREATE OBJECT class_under_test FOR TESTING. + cds_test_environment = cl_cds_test_environment=>create_for_multiple_cds( + i_for_entities = VALUE #( ( i_for_entity = 'ZR_AC_SeSSIONTP' ) + ( i_for_entity = 'ZR_AC_SPEAKERTP' ) ) + ). + ENDMETHOD. + + METHOD setup. + cds_test_environment->clear_doubles( ). + ENDMETHOD. + + METHOD teardown. + ROLLBACK ENTITIES. + ENDMETHOD. + + METHOD class_teardown. + cds_test_environment->destroy( ). + ENDMETHOD. + + METHOD autotwitterhandle. + " Fill in test data + DATA speaker_mock_data TYPE STANDARD TABLE OF zzt_ac_speaker. + + DATA(speaker_uuid) = cl_system_uuid=>if_system_uuid_static~create_uuid_x16( ). + speaker_mock_data = VALUE #( ( speaker_uuid = speaker_uuid speaker_webpage = 'twitter.com/wachtersascha' ) ). + cds_test_environment->insert_test_data( speaker_mock_data ). + + " Declare required table and structures + DATA reported TYPE RESPONSE FOR REPORTED LATE zr_ac_sessiontp. + + " Call the method to be tested + class_under_test->autotwitterhandle( + EXPORTING keys = CORRESPONDING #( speaker_mock_data MAPPING SpeakerUUID = speaker_uuid ) + CHANGING reported = reported ). + + " Check for content in reported + cl_abap_unit_assert=>assert_initial( msg = 'reported' act = reported ). + + READ ENTITIES OF zr_ac_sessiontp IN LOCAL MODE + ENTITY Speaker + FIELDS ( socialmed ) + WITH VALUE #( ( SpeakerUUID = speaker_uuid ) ) + RESULT DATA(speakers) + " TODO: variable is assigned but never used (ABAP cleaner) + FAILED DATA(read_failed). + + cl_abap_unit_assert=>assert_equals( msg = 'action result' exp = '@wachtersascha' act = speakers[ 1 ]-Socialmed ). + ENDMETHOD. + +ENDCLASS. diff --git a/src/zbp_ac_r_speakertp.clas.xml b/src/zbp_ac_r_speakertp.clas.xml index 80e0146..a05cd29 100644 --- a/src/zbp_ac_r_speakertp.clas.xml +++ b/src/zbp_ac_r_speakertp.clas.xml @@ -12,6 +12,7 @@ X X ZR_AC_SESSIONTP + X diff --git a/src/zc_ac_sessiontp.ddlx.asddlxs b/src/zc_ac_sessiontp.ddlx.asddlxs index a224b2f..de75ca3 100644 --- a/src/zc_ac_sessiontp.ddlx.asddlxs +++ b/src/zc_ac_sessiontp.ddlx.asddlxs @@ -18,7 +18,7 @@ visualizations: [ { type: #AS_LINEITEM } ] - } ] + }] } @UI.lineItem: [{criticality: 'CriticalityAccepted'}] annotate view ZC_AC_SESSIONTP with @@ -43,8 +43,23 @@ annotate view ZC_AC_SESSIONTP with label: 'Speaker', position: 20 , targetElement: '_Speaker' - } ] + }, + { + id: 'idHeader', + purpose: #HEADER, + type : #FIELDGROUP_REFERENCE, + targetQualifier: 'HeaderData' + }] @UI.hidden: true + @UI.identification: [ + { + importance: #HIGH, + label: 'Accept Session', + dataAction: 'SetSessionAccepted', + type: #FOR_ACTION, + position: 1 + } +] SessionUUID; @UI.lineItem: [ { @@ -112,6 +127,13 @@ annotate view ZC_AC_SESSIONTP with entity: { name: 'ZI_AC_FOCUS_AREA_VH', element: 'FocusArea' } } ] + @UI.fieldGroup: [ + { + qualifier: 'HeaderData', + position: 20, + label: '' + } + ] FocusArea; @UI.lineItem: [ { @@ -129,6 +151,13 @@ annotate view ZC_AC_SESSIONTP with entity: { name: 'ZI_AC_SESSION_LEVEL_VH', element: 'SessionLevel' } } ] + @UI.fieldGroup: [ + { + qualifier: 'HeaderData', + position: 30, + label: '' + } + ] SessionLevel; @UI.lineItem: [ { @@ -153,8 +182,16 @@ annotate view ZC_AC_SESSIONTP with position: 40 } ] @UI.textArrangement: #TEXT_ONLY + @UI.fieldGroup: [ + { + qualifier: 'HeaderData', + criticality: 'CriticalityAccepted', + position: 10, + label: '' + } + ] Accepted; - + @UI.hidden: true CriticalityAccepted; diff --git a/src/zc_ac_speakertp.ddlx.asddlxs b/src/zc_ac_speakertp.ddlx.asddlxs index 309f6e9..271ab16 100644 --- a/src/zc_ac_speakertp.ddlx.asddlxs +++ b/src/zc_ac_speakertp.ddlx.asddlxs @@ -6,7 +6,7 @@ title: { type: #STANDARD, label: 'Speaker', - value: 'SpeakerUUID' + value: 'SpeakerName' } }, presentationVariant: [ { @@ -27,6 +27,12 @@ annotate view ZC_AC_SPEAKERTP with type: #IDENTIFICATION_REFERENCE, label: 'Speaker', position: 10 + }, + { + id: 'idHeader', + purpose: #HEADER, + type : #FIELDGROUP_REFERENCE, + targetQualifier: 'HeaderData' } ] @UI.hidden: true SpeakerUUID; @@ -50,6 +56,13 @@ annotate view ZC_AC_SPEAKERTP with @UI.identification: [ { position: 40 } ] + @UI.fieldGroup: [ + { + qualifier: 'HeaderData', + position: 10, + label: '' + } + ] SpeakerShortBio; @UI.lineItem: [ { @@ -70,6 +83,13 @@ annotate view ZC_AC_SPEAKERTP with @UI.identification: [ { position: 60 } ] + @UI.fieldGroup: [ + { + qualifier: 'HeaderData', + position: 20, + label: '' + } + ] SpeakerJobDescr; @UI.lineItem: [ { @@ -79,10 +99,17 @@ annotate view ZC_AC_SPEAKERTP with @UI.identification: [ { position: 70 } ] + @UI.fieldGroup: [ + { + qualifier: 'HeaderData', + position: 30, + label: '' + } +] SpeakerEmployer; @UI.lineItem: [ { - url: 'SpeakerWebpage', + url: 'SpeakerWebpage', type: #WITH_URL, position: 80 , importance: #HIGH @@ -108,6 +135,7 @@ annotate view ZC_AC_SPEAKERTP with @UI.identification: [ { position: 100 } ] + @UI.hidden: true Picture; @UI.hidden: true diff --git a/src/zcl_ac_mail_framework.clas.abap b/src/zcl_ac_mail_framework.clas.abap deleted file mode 100644 index 118f0bb..0000000 --- a/src/zcl_ac_mail_framework.clas.abap +++ /dev/null @@ -1,30 +0,0 @@ -class ZCL_AC_MAIL_FRAMEWORK definition - public - final - create public . - -public section. - - methods CONSTRUCTOR . - methods SENS_SESSION_ACCEPTED - importing - !I_MAIL type ZE_ABAPCONF_MAIL - !I_TITLE type ZE_ABAPCONF_SESSION_TITLE - returning - value(R_SUCCESFUL) type FLAG . -protected section. -private section. -ENDCLASS. - - - -CLASS ZCL_AC_MAIL_FRAMEWORK IMPLEMENTATION. - - - method CONSTRUCTOR. - endmethod. - - - method SENS_SESSION_ACCEPTED. - endmethod. -ENDCLASS. diff --git a/src/zcl_ac_mail_framework.clas.xml b/src/zcl_ac_mail_framework.clas.xml deleted file mode 100644 index 5d3257d..0000000 --- a/src/zcl_ac_mail_framework.clas.xml +++ /dev/null @@ -1,31 +0,0 @@ - - - - - - ZCL_AC_MAIL_FRAMEWORK - D - AbapConf Mail Framework - 1 - X - X - X - - - - CONSTRUCTOR - D - CONSTRUCTOR - - - - - SENS_SESSION_ACCEPTED - R_SUCCESFUL - D - allgemeines flag - - - - - diff --git a/src/zr_ac_sessiontp.bdef.asbdef b/src/zr_ac_sessiontp.bdef.asbdef index 7ebebb2..5881021 100644 --- a/src/zr_ac_sessiontp.bdef.asbdef +++ b/src/zr_ac_sessiontp.bdef.asbdef @@ -81,6 +81,8 @@ authorization dependent by _Session field ( numbering : managed ) SpeakerUUID; + determination autoTwitterHandle on modify { field SpeakerWebpage; } + update; delete; diff --git a/src/ztc_ac_session_odata.clas.abap b/src/ztc_ac_session_odata.clas.abap new file mode 100644 index 0000000..541c62f --- /dev/null +++ b/src/ztc_ac_session_odata.clas.abap @@ -0,0 +1,167 @@ +"!@testing SRVB:ZUI_AC_SESSION_O2 +CLASS ztc_ac_session_odata DEFINITION + FOR TESTING + DURATION SHORT + RISK LEVEL HARMLESS + PUBLIC + FINAL + CREATE PUBLIC . + + PRIVATE SECTION. + + CLASS-DATA: o_client_proxy TYPE REF TO /iwbep/if_cp_client_proxy, + o_filter_factory TYPE REF TO /iwbep/if_cp_filter_factory, + o_filter_node TYPE REF TO /iwbep/if_cp_filter_node, + cds_test_environment TYPE REF TO if_cds_test_environment, + sql_test_environment TYPE REF TO if_osql_test_environment, + session_mock_data TYPE TABLE OF zzt_ac_session. + + CLASS-METHODS : + class_setup RAISING cx_static_check, + class_teardown, + + create_local_client_proxy + IMPORTING + service_key TYPE /iwbep/if_cp_client_proxy=>ty_s_service_key_v2 + RETURNING + VALUE(client_proxy) TYPE REF TO /iwbep/if_cp_client_proxy . + + METHODS: + setup, + teardown, + "!

+ "! read request with filter for duration + read_sessions_with_filter FOR TESTING, + "!

+ "! create a session with false mail adress + create_session_with_false_mail FOR TESTING. +ENDCLASS. + + + +CLASS ztc_ac_session_odata IMPLEMENTATION. + + METHOD class_setup. + + o_client_proxy = create_local_client_proxy( VALUE #( + service_id = 'ZUI_AC_SESSION_O2' + service_version = '0001' ) ). + + cds_test_environment = cl_cds_test_environment=>create_for_multiple_cds( + i_for_entities = VALUE #( ( i_for_entity = 'ZC_AC_SESSIONTP' i_select_base_dependencies = abap_true ) + ( i_for_entity = 'ZC_AC_SPEAKERTP' i_select_base_dependencies = abap_true ) ) + ). + + DATA(session_uuid1) = cl_system_uuid=>if_system_uuid_static~create_uuid_x16( ). + DATA(session_uuid2) = cl_system_uuid=>if_system_uuid_static~create_uuid_x16( ). + + session_mock_data = VALUE #( ( session_uuid = session_uuid1 title = 'Session Test 1' mail = 'dummy@gmail.com' abstract = 'Test' language ='German' + duration = '30' session_level = 'Basics' focus_area = 'Classic ABAP' ) + ( session_uuid = session_uuid2 title = 'Session Test 2' mail = 'dummy@gmail.com' abstract = 'Test' language ='English' + duration = '30' session_level = 'Basics' focus_area = 'S/4HANA' ) + + ) . + + ENDMETHOD. + + + METHOD setup. + cds_test_environment->clear_doubles( ). + ENDMETHOD. + + + METHOD teardown. + ROLLBACK ENTITIES. + ENDMETHOD. + + + METHOD class_teardown. + cds_test_environment->destroy( ). + ENDMETHOD. + + + METHOD create_local_client_proxy. + + TRY. + " the Cloud version + DATA(class1) = 'CL_WEB_ODATA_CLIENT_FACTORY'. + CALL METHOD (class1)=>create_v2_local_proxy + EXPORTING + is_service_key = service_key + RECEIVING + ro_client_proxy = client_proxy. + CATCH cx_root. + ENDTRY. + + + IF client_proxy IS NOT BOUND. + TRY. + " the onPrem version + DATA(class2) = '/IWBEP/CL_CP_CLIENT_PROXY_FACT'. + CALL METHOD (class2)=>create_v2_local_proxy + EXPORTING + is_service_key = service_key + RECEIVING + ro_client_proxy = client_proxy. + CATCH cx_root. + ENDTRY. + ENDIF. + + cl_abap_unit_assert=>assert_bound( msg = 'cannot get client proxy factory or service binding not active' act = client_proxy ). + + ENDMETHOD. + + METHOD read_sessions_with_filter. + TYPES duration_range TYPE RANGE OF ze_abapconf_duration. + + cds_test_environment->insert_test_data( session_mock_data ). + + DATA(o_session) = o_client_proxy->create_resource_for_entity_set( 'Session' ). + + DATA(o_request) = o_session->create_request_for_read( ). + + DATA(duration_range) = VALUE duration_range( ( sign = 'I' option = 'EQ' low = '30' ) ). + + DATA(o_filter_factory) = o_request->create_filter_factory( ). + DATA(o_filter_node) = o_filter_factory->create_by_range( iv_property_path = 'DURATION' + it_range = duration_range ). + + o_request->set_filter( o_filter_node ). + + DATA(o_response) = o_request->execute( ). + + cl_abap_unit_assert=>assert_not_initial( o_response ). + + DATA response_data TYPE STANDARD TABLE OF zc_ac_sessiontp. + o_response->get_business_data( IMPORTING et_business_data = response_data ). + + cl_abap_unit_assert=>assert_equals( exp = '2' act = lines( response_data ) ). + cl_abap_unit_assert=>assert_equals( exp = 'Session Test 1' act = response_data[ 1 ]-Title ). + cl_abap_unit_assert=>assert_equals( exp = 'Session Test 2' act = response_data[ 2 ]-title ). + ENDMETHOD. + + METHOD create_session_with_false_mail. + TYPES duration_range TYPE RANGE OF ze_abapconf_duration. + + DATA(o_session) = o_client_proxy->create_resource_for_entity_set( 'Session' ). + + DATA(o_request) = o_session->create_request_for_create( ). + + DATA(session_data) = VALUE zc_ac_sessiontp( sessionuuid = cl_system_uuid=>if_system_uuid_static~create_uuid_x16( ) title = 'Corrupted Session' mail = 'falseMail' abstract = 'Test' language ='German' + duration = '30' sessionlevel = 'Basics' focusarea = 'Classic ABAP' ). + o_request->set_business_data( session_data ). + + try. + data(o_response) = o_request->execute( ). + catch /iwbep/cx_gateway. + "get error messages + DATA(o_msg_cont) = /iwbep/cl_mgw_msg_container=>get_mgw_msg_container( ). + DATA(messages) = o_msg_cont->get_messages( ). + endtry. + + "check request errors -> multiple RAP validations + cl_abap_unit_assert=>assert_equals( exp = 'E-Mail adress invalid endig (not known provider)' act = messages[ 1 ]-message ). + cl_abap_unit_assert=>assert_equals( exp = 'E-Mail adress invalid format' act = messages[ 2 ]-message ). + ENDMETHOD. + +ENDCLASS. diff --git a/src/ztc_ac_session_odata.clas.xml b/src/ztc_ac_session_odata.clas.xml new file mode 100644 index 0000000..b83d555 --- /dev/null +++ b/src/ztc_ac_session_odata.clas.xml @@ -0,0 +1,19 @@ + + + + + + ZTC_AC_SESSION_ODATA + E + Integration Tests + 05 + 1 + X + X + X + 12 + 11 + + + +