From 43c9c00e8a0f689191f0e662c12fb76cb88bf4a4 Mon Sep 17 00:00:00 2001 From: mebo4b Date: Mon, 4 Jul 2022 13:10:28 +0200 Subject: [PATCH 1/2] feat: provide initiators display name if present for live event --- api/videoservice.yaml | 2 ++ .../api/controller/VideoController.java | 2 +- .../api/facade/StartVideoCallFacade.java | 24 +++++++++---- .../VideoControllerAuthorizationIT.java | 4 +-- .../api/controller/VideoControllerIT.java | 2 +- .../api/facade/StartVideoCallFacadeTest.java | 36 ++++++++++++++++--- 6 files changed, 55 insertions(+), 15 deletions(-) diff --git a/api/videoservice.yaml b/api/videoservice.yaml index 295dd2a..cd8b96d 100644 --- a/api/videoservice.yaml +++ b/api/videoservice.yaml @@ -110,6 +110,8 @@ components: sessionId: type: integer format: int64 + initiatorDisplayName: + type: string CreateVideoCallResponseDTO: type: object required: diff --git a/src/main/java/de/caritas/cob/videoservice/api/controller/VideoController.java b/src/main/java/de/caritas/cob/videoservice/api/controller/VideoController.java index 8d5220f..d37c233 100644 --- a/src/main/java/de/caritas/cob/videoservice/api/controller/VideoController.java +++ b/src/main/java/de/caritas/cob/videoservice/api/controller/VideoController.java @@ -38,7 +38,7 @@ public class VideoController implements VideocallsApi { @Override public ResponseEntity createVideoCall(@RequestHeader String rcUserId, @Valid CreateVideoCallDTO createVideoCallDto) { - var response = startVideoCallFacade.startVideoCall(createVideoCallDto.getSessionId(), rcUserId); + var response = startVideoCallFacade.startVideoCall(createVideoCallDto, rcUserId); return new ResponseEntity<>(response, HttpStatus.CREATED); } diff --git a/src/main/java/de/caritas/cob/videoservice/api/facade/StartVideoCallFacade.java b/src/main/java/de/caritas/cob/videoservice/api/facade/StartVideoCallFacade.java index 9324cda..7a1ca9f 100644 --- a/src/main/java/de/caritas/cob/videoservice/api/facade/StartVideoCallFacade.java +++ b/src/main/java/de/caritas/cob/videoservice/api/facade/StartVideoCallFacade.java @@ -2,9 +2,11 @@ import static de.caritas.cob.videoservice.api.service.session.SessionStatus.IN_PROGRESS; import static java.util.Collections.singletonList; +import static org.apache.commons.lang3.StringUtils.isNotBlank; import de.caritas.cob.videoservice.api.authorization.VideoUser; import de.caritas.cob.videoservice.api.exception.httpresponse.BadRequestException; +import de.caritas.cob.videoservice.api.model.CreateVideoCallDTO; import de.caritas.cob.videoservice.api.model.CreateVideoCallResponseDTO; import de.caritas.cob.videoservice.api.service.LogService; import de.caritas.cob.videoservice.api.service.UuidRegistry; @@ -39,13 +41,17 @@ public class StartVideoCallFacade { /** * Generates unique video call URLs and triggers a live event to inform the receiver of the call. * - * @param sessionId session ID - * @param initiatorRcUserId initiator Rocket.Chat user ID + * @param createVideoCallDTO The requested DTO containing session id and optional initiators + * username + * @param initiatorRcUserId initiator Rocket.Chat user ID * @return {@link CreateVideoCallResponseDTO} */ - public CreateVideoCallResponseDTO startVideoCall(Long sessionId, String initiatorRcUserId) { + public CreateVideoCallResponseDTO startVideoCall(CreateVideoCallDTO createVideoCallDTO, + String initiatorRcUserId) { - var consultantSessionDto = this.sessionService.findSessionOfCurrentConsultant(sessionId); + var sessionId = createVideoCallDTO.getSessionId(); + var consultantSessionDto = this.sessionService + .findSessionOfCurrentConsultant(sessionId); verifySessionStatus(consultantSessionDto); var videoCallUuid = uuidRegistry.generateUniqueUuid(); @@ -54,7 +60,8 @@ public CreateVideoCallResponseDTO startVideoCall(Long sessionId, String initiato this.liveEventNotificationService .sendVideoCallRequestLiveEvent(buildLiveEventMessage(consultantSessionDto, - videoCallUrls.getUserVideoUrl(), initiatorRcUserId), + videoCallUrls.getUserVideoUrl(), initiatorRcUserId, + createVideoCallDTO.getInitiatorDisplayName()), singletonList(consultantSessionDto.getAskerId())); var createVideoCallResponseDto = new CreateVideoCallResponseDTO() @@ -77,12 +84,15 @@ private void verifySessionStatus(ConsultantSessionDTO consultantSessionDto) { } private LiveEventMessage buildLiveEventMessage(ConsultantSessionDTO consultantSessionDto, - String videoChatUrl, String initiatorRcUserId) { + String videoChatUrl, String initiatorRcUserId, String initiatorDisplayName) { + var username = + isNotBlank(initiatorDisplayName) ? initiatorDisplayName : authenticatedUser.getUsername(); + var videoCallRequestDto = new VideoCallRequestDTO() .videoCallUrl(videoChatUrl) .rcGroupId(consultantSessionDto.getGroupId()) .initiatorRcUserId(initiatorRcUserId) - .initiatorUsername(authenticatedUser.getUsername()); + .initiatorUsername(username); return new LiveEventMessage() .eventType(EventType.VIDEOCALLREQUEST) diff --git a/src/test/java/de/caritas/cob/videoservice/api/controller/VideoControllerAuthorizationIT.java b/src/test/java/de/caritas/cob/videoservice/api/controller/VideoControllerAuthorizationIT.java index 25aee8f..bf49514 100644 --- a/src/test/java/de/caritas/cob/videoservice/api/controller/VideoControllerAuthorizationIT.java +++ b/src/test/java/de/caritas/cob/videoservice/api/controller/VideoControllerAuthorizationIT.java @@ -69,7 +69,7 @@ public class VideoControllerAuthorizationIT { @WithMockUser(authorities = AUTHORITY_CONSULTANT) public void createVideoCall_Should_ReturnCreated_When_EverythingSucceeded() throws Exception { - when(startVideoCallFacade.startVideoCall(eq(SESSION_ID), anyString())).thenReturn( + when(startVideoCallFacade.startVideoCall(any(), anyString())).thenReturn( CREATE_VIDEO_CALL_RESPONSE_DTO); mvc.perform(post(PATH_START_VIDEO_CALL) @@ -86,7 +86,7 @@ public void createVideoCall_Should_ReturnCreated_When_EverythingSucceeded() thro public void createVideoCall_Should_ReturnUnauthorized_When_AuthorizationIsMissing() throws Exception { - when(startVideoCallFacade.startVideoCall(eq(SESSION_ID), anyString())).thenReturn( + when(startVideoCallFacade.startVideoCall(any(), anyString())).thenReturn( CREATE_VIDEO_CALL_RESPONSE_DTO); mvc.perform(post(PATH_START_VIDEO_CALL) diff --git a/src/test/java/de/caritas/cob/videoservice/api/controller/VideoControllerIT.java b/src/test/java/de/caritas/cob/videoservice/api/controller/VideoControllerIT.java index cbcb3bb..fd71b21 100644 --- a/src/test/java/de/caritas/cob/videoservice/api/controller/VideoControllerIT.java +++ b/src/test/java/de/caritas/cob/videoservice/api/controller/VideoControllerIT.java @@ -55,7 +55,7 @@ public class VideoControllerIT { @Test public void createVideoCall_Should_ReturnCreated_When_EverythingSucceeded() throws Exception { - when(startVideoCallFacade.startVideoCall(eq(SESSION_ID), anyString())).thenReturn( + when(startVideoCallFacade.startVideoCall(any(), anyString())).thenReturn( CREATE_VIDEO_CALL_RESPONSE_DTO); mvc.perform(post(PATH_START_VIDEO_CALL) diff --git a/src/test/java/de/caritas/cob/videoservice/api/facade/StartVideoCallFacadeTest.java b/src/test/java/de/caritas/cob/videoservice/api/facade/StartVideoCallFacadeTest.java index 1069f0c..93da0e9 100644 --- a/src/test/java/de/caritas/cob/videoservice/api/facade/StartVideoCallFacadeTest.java +++ b/src/test/java/de/caritas/cob/videoservice/api/facade/StartVideoCallFacadeTest.java @@ -18,6 +18,7 @@ import de.caritas.cob.videoservice.api.authorization.VideoUser; import de.caritas.cob.videoservice.api.exception.httpresponse.BadRequestException; +import de.caritas.cob.videoservice.api.model.CreateVideoCallDTO; import de.caritas.cob.videoservice.api.model.CreateVideoCallResponseDTO; import de.caritas.cob.videoservice.api.service.UuidRegistry; import de.caritas.cob.videoservice.api.service.liveevent.LiveEventNotificationService; @@ -71,7 +72,8 @@ public void startVideoCall_Should_ReturnCorrectVideoCallUrl_When_UrlWasGenerated .thenReturn(consultantSessionDto); when(videoCallUrlGeneratorService.generateVideoCallUrls(any())).thenReturn(videoCallUrls); - CreateVideoCallResponseDTO result = startVideoCallFacade.startVideoCall(SESSION_ID, "rcUserId"); + CreateVideoCallResponseDTO result = startVideoCallFacade + .startVideoCall(new CreateVideoCallDTO().sessionId(SESSION_ID), "rcUserId"); assertThat(result.getModeratorVideoCallUrl(), is(videoCallUrls.getModeratorVideoUrl())); } @@ -93,7 +95,7 @@ public void startVideoCall_Should_CallLiveServiceAndBuildCorrectLiveEventMessage when(authenticatedUser.getUsername()).thenReturn(USERNAME); ArgumentCaptor argument = ArgumentCaptor.forClass(LiveEventMessage.class); - startVideoCallFacade.startVideoCall(SESSION_ID, "rcUserId"); + startVideoCallFacade.startVideoCall(new CreateVideoCallDTO().sessionId(SESSION_ID), "rcUserId"); verify(liveEventNotificationService).sendVideoCallRequestLiveEvent(argument.capture(), any()); verify(liveEventNotificationService, times(1)) @@ -117,7 +119,7 @@ public void startVideoCall_Should_throwBadRequestException_When_sessionIsNotInPr when(sessionService.findSessionOfCurrentConsultant(SESSION_ID)) .thenReturn(consultantSessionDto); - startVideoCallFacade.startVideoCall(SESSION_ID, ""); + startVideoCallFacade.startVideoCall(new CreateVideoCallDTO().sessionId(SESSION_ID), ""); } @Test @@ -133,7 +135,8 @@ public void startVideoCall_Should_FireAssignSessionStatisticsEvent() { .thenReturn(consultantSessionDto); when(videoCallUrlGeneratorService.generateVideoCallUrls(any())).thenReturn(videoCallUrls); - CreateVideoCallResponseDTO result = startVideoCallFacade.startVideoCall(SESSION_ID, "rcUserId"); + CreateVideoCallResponseDTO result = startVideoCallFacade + .startVideoCall(new CreateVideoCallDTO().sessionId(SESSION_ID), "rcUserId"); ArgumentCaptor captor = ArgumentCaptor.forClass( StartVideoCallStatisticsEvent.class); @@ -153,4 +156,29 @@ public void startVideoCall_Should_FireAssignSessionStatisticsEvent() { assertThat(videoCallUuid, is(VIDEO_CALL_UUID)); } + @Test + public void startVideoCall_Should_FireAssignSessionStatisticsEventWithDisplayName_When_initiatorDisplayNameIsSet() { + + when(authenticatedUser.getUserId()).thenReturn(CONSULTANT_ID); + when(uuidRegistry.generateUniqueUuid()).thenReturn(VIDEO_CALL_UUID); + ConsultantSessionDTO consultantSessionDto = mock(ConsultantSessionDTO.class); + when(consultantSessionDto.getStatus()).thenReturn(IN_PROGRESS.getValue()); + VideoCallUrls videoCallUrls = new EasyRandom().nextObject(VideoCallUrls.class); + + when(sessionService.findSessionOfCurrentConsultant(SESSION_ID)) + .thenReturn(consultantSessionDto); + when(videoCallUrlGeneratorService.generateVideoCallUrls(any())).thenReturn(videoCallUrls); + + startVideoCallFacade + .startVideoCall(new CreateVideoCallDTO().sessionId(SESSION_ID) + .initiatorDisplayName("initiator display name"), "rcUserId"); + + var argument = ArgumentCaptor.forClass(LiveEventMessage.class); + verify(liveEventNotificationService).sendVideoCallRequestLiveEvent(argument.capture(), any()); + verify(liveEventNotificationService).sendVideoCallRequestLiveEvent(any(), any()); + assertThat(argument.getValue(), instanceOf(LiveEventMessage.class)); + assertThat(((VideoCallRequestDTO) argument.getValue().getEventContent()).getInitiatorUsername(), + is("initiator display name")); + } + } From fb12cee5a0f81ed63e819e689fb4355a648ec135 Mon Sep 17 00:00:00 2001 From: mebo4b Date: Mon, 4 Jul 2022 13:14:00 +0200 Subject: [PATCH 2/2] chore: fix checkstyle violation --- .../cob/videoservice/api/facade/StartVideoCallFacade.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/src/main/java/de/caritas/cob/videoservice/api/facade/StartVideoCallFacade.java b/src/main/java/de/caritas/cob/videoservice/api/facade/StartVideoCallFacade.java index 7a1ca9f..82d816b 100644 --- a/src/main/java/de/caritas/cob/videoservice/api/facade/StartVideoCallFacade.java +++ b/src/main/java/de/caritas/cob/videoservice/api/facade/StartVideoCallFacade.java @@ -41,15 +41,15 @@ public class StartVideoCallFacade { /** * Generates unique video call URLs and triggers a live event to inform the receiver of the call. * - * @param createVideoCallDTO The requested DTO containing session id and optional initiators + * @param createVideoCallRequest The requested DTO containing session id and optional initiators * username * @param initiatorRcUserId initiator Rocket.Chat user ID * @return {@link CreateVideoCallResponseDTO} */ - public CreateVideoCallResponseDTO startVideoCall(CreateVideoCallDTO createVideoCallDTO, + public CreateVideoCallResponseDTO startVideoCall(CreateVideoCallDTO createVideoCallRequest, String initiatorRcUserId) { - var sessionId = createVideoCallDTO.getSessionId(); + var sessionId = createVideoCallRequest.getSessionId(); var consultantSessionDto = this.sessionService .findSessionOfCurrentConsultant(sessionId); verifySessionStatus(consultantSessionDto); @@ -61,7 +61,7 @@ public CreateVideoCallResponseDTO startVideoCall(CreateVideoCallDTO createVideoC this.liveEventNotificationService .sendVideoCallRequestLiveEvent(buildLiveEventMessage(consultantSessionDto, videoCallUrls.getUserVideoUrl(), initiatorRcUserId, - createVideoCallDTO.getInitiatorDisplayName()), + createVideoCallRequest.getInitiatorDisplayName()), singletonList(consultantSessionDto.getAskerId())); var createVideoCallResponseDto = new CreateVideoCallResponseDTO()