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>(); }
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()); }
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); }
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>(); }
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(); }
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(); }
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(); }