Example #1
0
        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");
        }
Example #2
0
        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());
        }
Example #3
0
        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);
        }
Example #4
0
        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();
        }