Skip to content

Commit

Permalink
Final Demo for AbapConf
Browse files Browse the repository at this point in the history
  • Loading branch information
SaschaWaechter committed Dec 6, 2023
1 parent 1abee71 commit f2d9347
Show file tree
Hide file tree
Showing 12 changed files with 476 additions and 109 deletions.
42 changes: 20 additions & 22 deletions src/zbp_ac_r_sessiontp.clas.locals_imp.abap
Expand Up @@ -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.
Expand Down Expand Up @@ -109,20 +114,13 @@ 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
%param = session ) ).

ENDLOOP.


ENDMETHOD.

ENDCLASS.
79 changes: 65 additions & 14 deletions src/zbp_ac_r_sessiontp.clas.testclasses.abap
Expand Up @@ -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.

Expand Down Expand Up @@ -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.
Expand Down Expand Up @@ -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.
59 changes: 52 additions & 7 deletions 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.
80 changes: 80 additions & 0 deletions 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.
1 change: 1 addition & 0 deletions src/zbp_ac_r_speakertp.clas.xml
Expand Up @@ -12,6 +12,7 @@
<FIXPT>X</FIXPT>
<UNICODE>X</UNICODE>
<CLSDEFINT>ZR_AC_SESSIONTP</CLSDEFINT>
<WITH_UNIT_TESTS>X</WITH_UNIT_TESTS>
</VSEOCLASS>
</asx:values>
</asx:abap>
Expand Down

0 comments on commit f2d9347

Please sign in to comment.