Beispiel #1
0
        private async Task <LeaveConsultationRequest> SetupLeaveConsultationRequest(bool inConsultationRoom)
        {
            var request = new LeaveConsultationRequest
            {
                ConferenceId  = _context.Test.Conference.Id,
                ParticipantId = _context.Test.Conference.Participants[0].Id
            };

            if (!inConsultationRoom)
            {
                return(request);
            }

            var participantId = _context.Test.Conference.Participants[0].Id;

            await using (var db = new VideoApiDbContext(_context.VideoBookingsDbContextOptions))
            {
                var conference = await db.Conferences
                                 .Include("Participants")
                                 .SingleAsync(x => x.Id == _context.Test.Conference.Id);

                var room        = new ConsultationRoom(_context.Test.Conference.Id, "TestRoom", VirtualCourtRoomType.Participant, false);
                var participant = conference.Participants.Single(x => x.Id == participantId);
                participant.UpdateCurrentRoom(RoomType.ConsultationRoom);
                participant.UpdateCurrentConsultationRoom(room);

                await db.SaveChangesAsync();

                request.ParticipantId = participantId;
            }

            return(request);
        }
        public async Task Should_Return_BadRequest_When_Participant_Cannot_Be_Found_In_Consultation_Room()
        {
            var conferenceId     = TestConference.Id;
            var participantId    = TestConference.Participants[0].Id;
            var consultationRoom = new ConsultationRoom(TestConference.Id, "ConsultationRoom", VirtualCourtRoomType.JudgeJOH, false);

            TestConference.Participants[0].CurrentConsultationRoom = consultationRoom;
            var fromRoom = "ConsultationRoom";
            var toRoom   = "WaitingRoom";
            var leaveConsultationRequest = new LeaveConsultationRequest
            {
                ConferenceId = conferenceId, ParticipantId = participantId
            };

            var kinlyApiException = new KinlyApiException("", (int)HttpStatusCode.BadRequest, "payload",
                                                          new Dictionary <string, IEnumerable <string> >(), new Exception());

            ConsultationServiceMock.Setup(x => x.LeaveConsultationAsync(leaveConsultationRequest.ConferenceId,
                                                                        leaveConsultationRequest.ParticipantId, fromRoom, toRoom)).ThrowsAsync(kinlyApiException);

            var result = await Controller.LeaveConsultationAsync(leaveConsultationRequest);

            QueryHandlerMock.Verify(q => q.Handle <GetConferenceByIdQuery, VideoApi.Domain.Conference>
                                        (It.IsAny <GetConferenceByIdQuery>()), Times.Once);
            ConsultationServiceMock.Verify(v => v.LeaveConsultationAsync
                                               (leaveConsultationRequest.ConferenceId, leaveConsultationRequest.ParticipantId, fromRoom, toRoom),
                                           Times.Never);
            result.Should().BeOfType <BadRequestObjectResult>();
        }
Beispiel #3
0
        public async Task <IActionResult> LeaveConsultationAsync(LeaveConsultationRequest request)
        {
            var getConferenceByIdQuery = new GetConferenceByIdQuery(request.ConferenceId);
            var conference             = await _queryHandler.Handle <GetConferenceByIdQuery, Conference>(getConferenceByIdQuery);

            if (conference == null)
            {
                _logger.LogWarning("Unable to find conference");
                return(NotFound());
            }

            var participant = conference.GetParticipants().SingleOrDefault(x => x.Id == request.ParticipantId);

            if (participant == null)
            {
                _logger.LogWarning("Unable to find participant request by id");
                return(NotFound());
            }

            if (!participant.CurrentConsultationRoomId.HasValue)
            {
                return(BadRequest("Participant is not in a consultation"));
            }

            await _consultationService.LeaveConsultationAsync(conference.Id, participant.Id, participant.GetCurrentRoom(), RoomType.WaitingRoom.ToString());

            return(Ok());
        }
Beispiel #4
0
        public async Task <IActionResult> LeavePrivateConsultationAsync(LeaveConsultationRequest request)
        {
            _logger.LogDebug("LeavePrivateConsultation");
            var getConferenceByIdQuery = new GetConferenceByIdQuery(request.ConferenceId);
            var conference             = await _queryHandler.Handle <GetConferenceByIdQuery, Conference>(getConferenceByIdQuery);

            if (conference == null)
            {
                _logger.LogWarning("Unable to find conference");
                return(NotFound());
            }

            var participant = conference.GetParticipants().SingleOrDefault(x => x.Id == request.ParticipantId);

            if (participant == null)
            {
                _logger.LogWarning("Unable to find participant request by id");
                return(NotFound());
            }

            var currentRoom = participant.CurrentRoom;

            if (!currentRoom.HasValue || (currentRoom != RoomType.ConsultationRoom1 &&
                                          currentRoom != RoomType.ConsultationRoom2))
            {
                // This could only happen when both the participants press 'Close' button at the same time to end the call
                _logger.LogWarning("Participant is not in a consultation to leave from");
                return(NoContent());
            }

            await _videoPlatformService.StopPrivateConsultationAsync(conference, currentRoom.Value);

            return(NoContent());
        }
        public async Task should_return_judge_joh_to_waiting_room_for_valid_conference_and_room_type()
        {
            var conferenceId     = TestConference.Id;
            var participantId    = TestConference.Participants[0].Id;
            var consultationRoom = new ConsultationRoom(TestConference.Id, "ConsultationRoom", VirtualCourtRoomType.JudgeJOH, false);

            TestConference.Participants[0].CurrentConsultationRoom   = consultationRoom;
            TestConference.Participants[0].CurrentConsultationRoomId = 1;
            QueryHandlerMock
            .Setup(x => x.Handle <GetConferenceByIdQuery, VideoApi.Domain.Conference>(
                       It.Is <GetConferenceByIdQuery>(q => q.ConferenceId == TestConference.Id)))
            .ReturnsAsync(TestConference);

            var fromRoom = "ConsultationRoom";
            var toRoom   = "WaitingRoom";
            var leaveConsultationRequest = new LeaveConsultationRequest
            {
                ConferenceId = conferenceId, ParticipantId = participantId
            };
            await Controller.LeaveConsultationAsync(leaveConsultationRequest);

            QueryHandlerMock.Verify(q => q.Handle <GetConferenceByIdQuery, VideoApi.Domain.Conference>
                                        (It.IsAny <GetConferenceByIdQuery>()), Times.Once);
            ConsultationServiceMock.Verify(v => v.LeaveConsultationAsync
                                               (leaveConsultationRequest.ConferenceId, leaveConsultationRequest.ParticipantId, fromRoom, toRoom),
                                           Times.Once);
        }
Beispiel #6
0
        private void SerialiseLeavePrivateConsultationRequest(LeaveConsultationRequest request)
        {
            _context.Uri        = ConsultationEndpoints.LeaveConsultationRequest;
            _context.HttpMethod = HttpMethod.Post;
            var jsonBody = RequestHelper.Serialise(request);

            _context.HttpContent = new StringContent(jsonBody, Encoding.UTF8, "application/json");
        }
        public async Task should_return_not_found_when_no_matching_participant_is_found()
        {
            var leaveConsultationRequest = new LeaveConsultationRequest
            {
                ConferenceId = TestConference.Id, ParticipantId = Guid.NewGuid()
            };
            var result = await Controller.LeaveConsultationAsync(leaveConsultationRequest);

            var typedResult = (NotFoundResult)result;

            typedResult.Should().NotBeNull();
        }
        public async Task Should_pass_validation()
        {
            var request = new LeaveConsultationRequest
            {
                ConferenceId  = Guid.NewGuid(),
                ParticipantId = Guid.NewGuid()
            };

            var result = await _validator.ValidateAsync(request);

            result.IsValid.Should().BeTrue();
        }
        public async Task Should_return_missing_participant_id()
        {
            var request = new LeaveConsultationRequest
            {
                ConferenceId = Guid.NewGuid()
            };

            var result = await _validator.ValidateAsync(request);

            result.IsValid.Should().BeFalse();
            result.Errors
            .Any(x => x.ErrorMessage == LeaveConsultationRequestValidation.NoParticipantIdErrorMessage)
            .Should().BeTrue();
        }
        public async Task Should_return_badrequest_when_participant_current_room_is_not_consultation_room_type()
        {
            var conferenceId = TestConference.Id;
            var request      = TestConference.GetParticipants()[2];

            var leaveConsultationRequest = new LeaveConsultationRequest
            {
                ConferenceId  = conferenceId,
                ParticipantId = request.Id
            };

            var result = await Controller.LeaveConsultationAsync(leaveConsultationRequest);

            result.Should().BeOfType <BadRequestObjectResult>();
        }
Beispiel #11
0
        public async Task GivenIHaveAValidLeaveConsultationRequest()
        {
            var conference = await Response.GetResponses <ConferenceDetailsResponse>(_context.Response.Content);

            var judge =
                conference.Participants.First(x => x.UserRole == Contract.Enums.UserRole.Judge);

            var request = new LeaveConsultationRequest()
            {
                ConferenceId  = conference.Id,
                ParticipantId = judge.Id
            };

            SerialiseLeavePrivateConsultationRequest(request);
        }
        public async Task Should_leave_private_consultation_with_valid_conference_and_room_type()
        {
            var conferenceId = TestConference.Id;
            var participant  = TestConference.GetParticipants()[1];

            var leaveConsultationRequest = new LeaveConsultationRequest {
                ConferenceId  = conferenceId,
                ParticipantId = participant.Id
            };

            await Controller.LeaveConsultationAsync(leaveConsultationRequest);

            QueryHandlerMock.Verify(q => q.Handle <GetConferenceByIdQuery, VideoApi.Domain.Conference>(It.IsAny <GetConferenceByIdQuery>()), Times.Once);
            ConsultationServiceMock.Verify(v => v.LeaveConsultationAsync(TestConference.Id, leaveConsultationRequest.ParticipantId, participant.GetCurrentRoom(), RoomType.WaitingRoom.ToString()), Times.Once);
            ConsultationServiceMock.VerifyNoOtherCalls();
        }
Beispiel #13
0
        public async Task Should_leave_private_consultation_with_valid_conference_and_room_type()
        {
            var conferenceId = TestConference.Id;
            var request      = TestConference.GetParticipants()[1];

            var leaveConsultationRequest = new LeaveConsultationRequest {
                ConferenceId  = conferenceId,
                ParticipantId = request.Id
            };

            await Controller.LeavePrivateConsultationAsync(leaveConsultationRequest);

            QueryHandlerMock.Verify(q => q.Handle <GetConferenceByIdQuery, VideoApi.Domain.Conference>(It.IsAny <GetConferenceByIdQuery>()), Times.Once);
            VideoPlatformServiceMock.Verify(v => v.StopPrivateConsultationAsync(TestConference, RoomType.ConsultationRoom1), Times.Once);
            VideoPlatformServiceMock.VerifyNoOtherCalls();
        }
Beispiel #14
0
        public async Task Should_return_nocontent_when_participant_current_room_is_not_consultation_room_type()
        {
            var conferenceId = TestConference.Id;
            var request      = TestConference.GetParticipants()[2];

            var leaveConsultationRequest = new LeaveConsultationRequest
            {
                ConferenceId  = conferenceId,
                ParticipantId = request.Id
            };

            var result = await Controller.LeavePrivateConsultationAsync(leaveConsultationRequest);

            var typedResult = (NoContentResult)result;

            typedResult.Should().NotBeNull();
        }