private void SerialiseRespondToConsultationRequestResponse(ConsultationRequestResponse request) { _context.Uri = ConsultationEndpoints.HandleConsultationRequest; _context.HttpMethod = HttpMethod.Post; var jsonBody = RequestHelper.Serialise(request); _context.HttpContent = new StringContent(jsonBody, Encoding.UTF8, "application/json"); }
public async Task <IActionResult> RespondToConsultationRequestAsync(ConsultationRequestResponse 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 requestedBy = conference.GetParticipants().SingleOrDefault(x => x.Id == request.RequestedBy); if (request.RequestedBy != Guid.Empty && requestedBy == null) { _logger.LogWarning("Unable to find participant request by with id {RequestedBy}", request.RequestedBy); return(NotFound()); } var requestedFor = conference.GetParticipants().SingleOrDefault(x => x.Id == request.RequestedFor); if (requestedFor == null) { _logger.LogWarning("Unable to find participant request for with id {RequestedFor}", request.RequestedFor); return(NotFound()); } if (string.IsNullOrEmpty(request.RoomLabel)) { _logger.LogWarning("Please provide a room label"); return(NotFound()); } if (request.Answer != ConsultationAnswer.Accepted) { _logger.LogWarning($"Answered {request.Answer}"); return(NoContent()); } var displayName = requestedFor.GetParticipantRoom()?.Label ?? requestedFor.DisplayName; var command = new SaveEventCommand(conference.Id, Guid.NewGuid().ToString(), EventType.Consultation, DateTime.UtcNow, null, null, $"Adding {displayName} to {request.RoomLabel}", null) { ParticipantId = request.RequestedBy }; await _commandHandler.Handle(command); await _consultationService.ParticipantTransferToRoomAsync(request.ConferenceId, requestedFor.Id, request.RoomLabel); return(NoContent()); }
private ConsultationRequestResponse SetupRespondToConsultationRequestResponse() { var request = new ConsultationRequestResponse(); var participants = _context.Test.Conference.GetParticipants().Where(x => x.UserRole == UserRole.Individual || x.UserRole == UserRole.Representative).ToList(); request.ConferenceId = _context.Test.Conference.Id; request.RequestedFor = participants[0].Id; request.RequestedBy = participants[0].Id; request.Answer = ConsultationAnswer.Accepted; request.RoomLabel = RoomType.ConsultationRoom.ToString(); return(request); }
public void GivenIHaveAValidRequestPrivateConsultationRequest() { var individual = _context.Test.ConferenceResponse.Participants.First(x => x.UserRole == UserRole.Individual).Id; var representative = _context.Test.ConferenceResponse.Participants .First(x => x.UserRole == UserRole.Representative).Id; var request = new ConsultationRequestResponse() { ConferenceId = _context.Test.ConferenceResponse.Id, RequestedBy = individual, RequestedFor = representative, Answer = ConsultationAnswer.Accepted }; _context.Request = _context.Post(HandleConsultationRequest, request); }
public async Task Should_return_notfound_when_no_matching_participant_is_found() { var conferenceId = TestConference.Id; var request = new ConsultationRequestResponse { ConferenceId = conferenceId, RequestedFor = Guid.NewGuid(), RoomLabel = "ConsultationRoom", Answer = ConsultationAnswer.Rejected }; var result = await Controller.RespondToConsultationRequestAsync(request); var typedResult = (NotFoundResult)result; typedResult.Should().NotBeNull(); }
public async Task Should_return_notfound_when_no_room_label_provided() { var conferenceId = TestConference.Id; var participant = TestConference.GetParticipants()[3]; var requestedBy = TestConference.GetParticipants()[2].Id; var request = new ConsultationRequestResponse { ConferenceId = conferenceId, RequestedFor = participant.Id, RequestedBy = requestedBy, RoomLabel = "", Answer = ConsultationAnswer.Rejected }; var result = await Controller.RespondToConsultationRequestAsync(request); var typedResult = (NotFoundResult)result; typedResult.Should().NotBeNull(); }
public async Task Should_return_notfound_when_no_requested_for_participant_is_found() { var conferenceId = TestConference.Id; var requestedFor = TestConference.GetParticipants()[3]; var answer = ConsultationAnswer.Accepted; var request = new ConsultationRequestResponse { ConferenceId = conferenceId, RequestedBy = Guid.NewGuid(), RequestedFor = requestedFor.Id, Answer = answer }; var result = await Controller.RespondToConsultationRequestAsync(request); var typedResult = (NotFoundResult)result; typedResult.Should().NotBeNull(); }
public async Task Should_not_transfer_participant_when_consultation_is_not_accepted() { var conferenceId = TestConference.Id; var participant = TestConference.GetParticipants()[3]; var roomFrom = participant.GetCurrentRoom(); var request = new ConsultationRequestResponse { ConferenceId = conferenceId, RequestedFor = participant.Id, RoomLabel = "ConsultationRoom", Answer = ConsultationAnswer.Rejected }; await Controller.RespondToConsultationRequestAsync(request); ConsultationServiceMock.Verify(x => x.LeaveConsultationAsync(conferenceId, participant.Id, roomFrom, request.RoomLabel), Times.Never); ConsultationServiceMock.VerifyNoOtherCalls(); }
public async Task Should_transfer_participant_when_consultation_is_accepted() { var conferenceId = TestConference.Id; var participant = TestConference.GetParticipants()[3]; var requestedBy = TestConference.GetParticipants()[1]; var request = new ConsultationRequestResponse { ConferenceId = conferenceId, RequestedBy = requestedBy.Id, RequestedFor = participant.Id, RoomLabel = "ConsultationRoom", Answer = ConsultationAnswer.Accepted }; await Controller.RespondToConsultationRequestAsync(request); ConsultationServiceMock.Verify(x => x.ParticipantTransferToRoomAsync(conferenceId, participant.Id, request.RoomLabel), Times.Once); ConsultationServiceMock.VerifyNoOtherCalls(); }
public async Task Should_raise_notification_to_requester_and_admin_when_consultation_is_accepted() { var conferenceId = TestConference.Id; var requestedBy = TestConference.GetParticipants()[2]; var requestedFor = TestConference.GetParticipants()[3]; var answer = ConsultationAnswer.Accepted; var request = new ConsultationRequestResponse { ConferenceId = conferenceId, RequestedBy = requestedBy.Id, RequestedFor = requestedFor.Id, Answer = answer, RoomLabel = "Room1" }; await Controller.RespondToConsultationRequestAsync(request); CommandHandlerMock.Verify(x => x.Handle(It.Is <SaveEventCommand>(s => s.Reason == $"Adding {requestedFor.DisplayName} to {request.RoomLabel}")), Times.Once); ConsultationServiceMock.Verify(x => x.ParticipantTransferToRoomAsync(TestConference.Id, requestedFor.Id, "Room1"), Times.Once); ConsultationServiceMock.VerifyNoOtherCalls(); }