public static Conference MapConferenceToCacheModel(ConferenceDetailsResponse conferenceResponse)
        {
            var participants = conferenceResponse
                               .Participants
                               .Select(MapParticipantToCacheModel)
                               .ToList();

            var endpoints = conferenceResponse.Endpoints == null
                ? new List <Endpoint>()
                : conferenceResponse.Endpoints.Select(EndpointCacheMapper.MapEndpointToCacheModel).ToList();

            var civilianRooms = conferenceResponse.CivilianRooms == null
                ? new List <CivilianRoom>()
                : conferenceResponse.CivilianRooms.Select(CivilianRoomCacheMapper.MapCivilianRoomToCacheModel)
                                .ToList();

            var conference = new Conference
            {
                Id               = conferenceResponse.Id,
                HearingId        = conferenceResponse.HearingId,
                Participants     = participants,
                HearingVenueName = conferenceResponse.HearingVenueName,
                Endpoints        = endpoints,
                CivilianRooms    = civilianRooms
            };

            return(conference);
        }
Example #2
0
        public void Setup()
        {
            _bookingsApiClient           = new Mock <IBookingsApiClient>();
            _userIdentity                = new Mock <IUserIdentity>();
            _userAccountService          = new Mock <IUserAccountService>();
            _editHearingRequestValidator = new Mock <IValidator <EditHearingRequest> >();
            _videoApiMock                = new Mock <IVideoApiClient>();
            _pollyRetryServiceMock       = new Mock <IPollyRetryService>();
            _notificationApiMock         = new Mock <INotificationApiClient>();

            _participantGroupLogger = new Mock <ILogger <HearingsService> >();
            _hearingsService        = new HearingsService(_pollyRetryServiceMock.Object,
                                                          _userAccountService.Object, _notificationApiMock.Object, _videoApiMock.Object, _bookingsApiClient.Object, _participantGroupLogger.Object);

            _controller = new AdminWebsite.Controllers.HearingsController(_bookingsApiClient.Object,
                                                                          _userIdentity.Object,
                                                                          _userAccountService.Object,
                                                                          _editHearingRequestValidator.Object,
                                                                          new Mock <ILogger <AdminWebsite.Controllers.HearingsController> >().Object,
                                                                          _hearingsService,
                                                                          Mock.Of <IPublicHolidayRetriever>());

            _conference = new ConferenceDetailsResponse
            {
                MeetingRoom = new MeetingRoomResponse
                {
                    TelephoneConferenceId = "454545",
                    AdminUri       = "uri",
                    JudgeUri       = "uri",
                    ParticipantUri = "uri",
                    PexipNode      = "node"
                }
            };
        }
        public static Conference MapConferenceToCacheModel(ConferenceDetailsResponse conferenceResponse)
        {
            var participants = conferenceResponse
                               .Participants
                               .Select(participant => new Participant
            {
                Id                = participant.Id,
                RefId             = participant.Ref_id,
                Name              = participant.Name,
                FirstName         = participant.First_name,
                LastName          = participant.Last_name,
                ContactEmail      = participant.Contact_email,
                ContactTelephone  = participant.Contact_telephone,
                DisplayName       = participant.Display_name,
                Role              = (Role)Enum.Parse(typeof(Role), participant.User_role.ToString()),
                HearingRole       = participant.Hearing_role,
                ParticipantStatus = (ParticipantStatus)Enum.Parse(typeof(ParticipantStatus),
                                                                  participant.Current_status.ToString()),
                Username      = participant.Username,
                CaseTypeGroup = participant.Case_type_group,
            })
                               .ToList();

            var endpoints  = conferenceResponse.Endpoints == null ? new List <Endpoint>() : conferenceResponse.Endpoints.Select(EndpointCacheMapper.MapEndpointToCacheModel).ToList();
            var conference = new Conference
            {
                Id               = conferenceResponse.Id,
                HearingId        = conferenceResponse.Hearing_id,
                Participants     = participants,
                HearingVenueName = conferenceResponse.Hearing_venue_name,
                Endpoints        = endpoints
            };

            return(conference);
        }
        public static ConferenceDetailsResponse MapConferenceToResponse(Conference conference,
                                                                        string pexipSelfTestNode)
        {
            var allInterpreterRooms = conference.Rooms.OfType <ParticipantRoom>().ToList();
            var interpreterRooms    = allInterpreterRooms.Select(RoomToCivilianRoomResponseMapper.MapToResponse).ToList();
            var response            = new ConferenceDetailsResponse
            {
                Id                     = conference.Id,
                HearingId              = conference.HearingRefId,
                CaseType               = conference.CaseType,
                CaseNumber             = conference.CaseNumber,
                CaseName               = conference.CaseName,
                ScheduledDateTime      = conference.ScheduledDateTime,
                StartedDateTime        = conference.ActualStartTime,
                ClosedDateTime         = conference.ClosedDateTime,
                ScheduledDuration      = conference.ScheduledDuration,
                CurrentStatus          = conference.GetCurrentStatus().MapToContractEnum(),
                Participants           = MapParticipants(conference.Participants, allInterpreterRooms),
                MeetingRoom            = MeetingRoomToResponseMapper.MapVirtualCourtToResponse(conference.GetMeetingRoom()),
                Endpoints              = conference.GetEndpoints().Select(EndpointToResponseMapper.MapEndpointResponse).ToList(),
                HearingVenueName       = conference.HearingVenueName,
                AudioRecordingRequired = conference.AudioRecordingRequired,
                CivilianRooms          = interpreterRooms
            };

            if (response.MeetingRoom != null)
            {
                response.MeetingRoom.PexipSelfTestNode = pexipSelfTestNode;
            }

            return(response);
        }
 protected ConferenceEventRequest CreateTransferEventRequest(ConferenceDetailsResponse conference)
 {
     return(new ConferenceEventRequestBuilder(conference)
            .ForJudge()
            .WithEventType(EventType.Transfer)
            .Build());
 }
 protected ConferenceEventRequest CreatePrivateConsultationEventRequest(ConferenceDetailsResponse conference)
 {
     return(new ConferenceEventRequestBuilder(conference)
            .ForIndividual()
            .WithEventType(EventType.Consultation)
            .Build());
 }
Example #7
0
        public async Task ThenAConferenceDetailsShouldBeRetrieved()
        {
            _conferenceDetails = await Response.GetResponses <ConferenceDetailsResponse>(_context.Response.Content);

            _conferenceDetails.Should().NotBeNull();
            AssertConferenceDetailsResponse.ForConference(_conferenceDetails);
        }
 protected ConferenceEventRequest CreateVideoEventRequest(ConferenceDetailsResponse conference)
 {
     return(new ConferenceEventRequestBuilder(conference)
            .ForIndividual()
            .WithEventType(EventType.MediaPermissionDenied)
            .Build());
 }
        public static ConferenceResponse MapConferenceDetailsToResponseModel(ConferenceDetailsResponse conference)
        {
            var response = new ConferenceResponse
            {
                Id                     = conference.Id,
                CaseName               = conference.Case_name,
                CaseNumber             = conference.Case_number,
                CaseType               = conference.Case_type,
                ScheduledDateTime      = conference.Scheduled_date_time,
                ScheduledDuration      = conference.Scheduled_duration,
                Status                 = GetStatus(conference.Current_status),
                Participants           = MapParticipants(conference),
                ClosedDateTime         = conference.Closed_date_time,
                HearingVenueName       = conference.Hearing_venue_name,
                AudioRecordingRequired = conference.Audio_recording_required,
                HearingRefId           = conference.Hearing_id,
                Endpoints              = MapEndpoints(conference)
            };

            if (conference.Meeting_room != null)
            {
                response.ParticipantUri       = conference.Meeting_room.Participant_uri;
                response.PexipNodeUri         = conference.Meeting_room.Pexip_node;
                response.PexipSelfTestNodeUri = conference.Meeting_room.Pexip_self_test_node;

                ParticipantTilePositionHelper.AssignTilePositions(response.Participants);
            }

            return(response);
        }
 private static List <ParticipantResponse> MapParticipants(ConferenceDetailsResponse conference)
 {
     conference.Participants ??= new List <ParticipantDetailsResponse>();
     return(conference.Participants
            .OrderBy(x => x.Case_type_group)
            .Select(ParticipantResponseMapper.MapParticipantToResponseModel)
            .ToList());
 }
Example #11
0
        public static void ForConference(ConferenceDetailsResponse conference)
        {
            conference.Should().NotBeNull();
            conference.CaseType.Should().NotBeNullOrEmpty();
            conference.CaseNumber.Should().NotBeNullOrEmpty();
            conference.CaseName.Should().NotBeNullOrEmpty();
            conference.ScheduledDuration.Should().BeGreaterThan(0);
            conference.ScheduledDateTime.Should().NotBe(DateTime.MinValue);
            conference.CurrentStatus.Should().NotBeNull();
            conference.HearingVenueName.Should().NotBeNull();

            conference.Participants.Should().NotBeNullOrEmpty();
            foreach (var participant in conference.Participants)
            {
                participant.Name.Should().NotBeNullOrEmpty();
                participant.DisplayName.Should().NotBeNullOrEmpty();
                participant.Username.Should().NotBeNullOrEmpty();
                participant.UserRole.Should().NotBe(UserRole.None);
                participant.CaseTypeGroup.Should().NotBeNullOrEmpty();
                participant.HearingRole.Should().NotBeNullOrEmpty();
                participant.FirstName.Should().NotBeNullOrWhiteSpace();
                participant.LastName.Should().NotBeNullOrWhiteSpace();
                participant.ContactEmail.Should().NotBeNullOrWhiteSpace();
                participant.CurrentStatus.Should().NotBe(ParticipantState.None);
                if (participant.UserRole == UserRole.Representative)
                {
                    participant.Representee.Should().NotBeNullOrEmpty();
                }
            }

            conference.MeetingRoom.Should().NotBeNull();
            conference.MeetingRoom.AdminUri.Should().NotBeNull();
            conference.MeetingRoom.JudgeUri.Should().NotBeNull();
            conference.MeetingRoom.ParticipantUri.Should().NotBeNull();
            conference.MeetingRoom.PexipNode.Should().NotBeNull();
            conference.MeetingRoom.TelephoneConferenceId.Should().NotBeNull();
            conference.MeetingRoom.PexipSelfTestNode.Should().NotBeNullOrEmpty();

            if (conference.CurrentStatus > ConferenceState.NotStarted)
            {
                conference.StartedDateTime.Should().HaveValue().And.NotBe(DateTime.MinValue);
            }

            if (conference.CurrentStatus == ConferenceState.Closed)
            {
                conference.ClosedDateTime.Should().HaveValue().And.NotBe(DateTime.MinValue);
            }

            conference.AudioRecordingRequired.Should().BeFalse();

            foreach (var endpoint in conference.Endpoints)
            {
                endpoint.Id.Should().NotBeEmpty();
                endpoint.DisplayName.Should().NotBeNullOrWhiteSpace();
                endpoint.SipAddress.Should().NotBeNullOrWhiteSpace();
                endpoint.Pin.Should().NotBeNullOrWhiteSpace();
            }
        }
Example #12
0
        public async Task ThenTheConferenceShouldBeClosed()
        {
            _context.Uri        = GetConferenceDetailsById(_context.Test.Conference.Id);
            _context.HttpMethod = HttpMethod.Get;
            await _commonSteps.WhenISendTheRequestToTheEndpoint();

            _conferenceDetails = await Response.GetResponses <ConferenceDetailsResponse>(_context.Response.Content);

            _conferenceDetails.CurrentStatus.Should().Be(ConferenceState.Closed);
        }
Example #13
0
        public async Task AddConferenceAsync(ConferenceDetailsResponse conferenceResponse)
        {
            var conference = ConferenceCacheMapper.MapConferenceToCacheModel(conferenceResponse);

            await _memoryCache.GetOrCreateAsync(conference.Id, entry =>
            {
                entry.SlidingExpiration = TimeSpan.FromHours(4);
                return(Task.FromResult(conference));
            });
        }
Example #14
0
 public static ConferenceResponse Map(ConferenceDetailsResponse response)
 {
     return(new ConferenceResponse()
     {
         Id = response.Id,
         HearingRefId = response.HearingId,
         Case_name = response.CaseName,
         Participants = ParticipantsResponseMapper.Map(response.Participants),
         Status = response.CurrentStatus
     });
 }
Example #15
0
 public static void ForConferenceEndpoints(ConferenceDetailsResponse conference)
 {
     conference.Endpoints.Should().NotBeNullOrEmpty();
     foreach (var endpoint in conference.Endpoints)
     {
         endpoint.Id.Should().NotBeEmpty();
         endpoint.DisplayName.Should().NotBeEmpty();
         endpoint.SipAddress.Should().NotBeEmpty();
         endpoint.Pin.Should().NotBeEmpty();
     }
 }
Example #16
0
 public ConferenceEventRequestBuilder(ConferenceDetailsResponse conference)
 {
     _conference = conference;
     _request    = new ConferenceEventRequest()
     {
         ConferenceId = conference.Id.ToString(),
         EventId      = Guid.NewGuid().ToString(),
         Reason       = HearingData.VIDEO_EVENT_REASON,
         TimeStampUtc = DateTime.UtcNow
     };
 }
 public static bool HasValidMeetingRoom(this ConferenceDetailsResponse conference)
 {
     if (conference?.MeetingRoom == null)
     {
         return(false);
     }
     return(!string.IsNullOrWhiteSpace(conference.MeetingRoom.AdminUri) &&
            !string.IsNullOrWhiteSpace(conference.MeetingRoom.ParticipantUri) &&
            !string.IsNullOrWhiteSpace(conference.MeetingRoom.JudgeUri) &&
            !string.IsNullOrWhiteSpace(conference.MeetingRoom.PexipNode));
 }
Example #18
0
        protected async Task ConfirmHearing()
        {
            var confirmRequest = new UpdateBookingStatusRequestBuilder()
                                 .UpdatedBy(HearingData.CREATED_BY(Context.Config.UsernameStem))
                                 .Build();

            await BookingApiClient.UpdateBookingStatusAsync(Hearing.Id, confirmRequest);

            Conference = await GetConferenceByHearingIdPollingAsync(Hearing.Id);

            Verify.ConferenceDetailsResponse(Conference, Hearing);
        }
        public async Task UpdateBookingStatus_returns_false_response_when_video_api_throws()
        {
            _userIdentity.Setup(x => x.GetUserIdentityName()).Returns("test");
            var updateCreatedStatus = new UpdateBookingStatusRequest
            {
                UpdatedBy    = "test",
                CancelReason = "",
                Status       = UpdateBookingStatus.Created
            };

            var hearingId = Guid.NewGuid();
            var expectedConferenceDetailsResponse = new ConferenceDetailsResponse
            {
                Id          = Guid.NewGuid(),
                HearingId   = hearingId,
                MeetingRoom = new MeetingRoomResponse
                {
                    AdminUri       = "admin",
                    JudgeUri       = "judge",
                    ParticipantUri = "participant",
                    PexipNode      = "pexip"
                }
            };

            _bookingsApiClient.Setup(x => x.UpdateBookingStatusAsync(hearingId, updateCreatedStatus));
            _bookingsApiClient.Setup(x => x.UpdateBookingStatusAsync(hearingId, It.IsAny <UpdateBookingStatusRequest>()));

            _pollyRetryServiceMock.Setup(x => x.WaitAndRetryAsync <VideoApiException, ConferenceDetailsResponse>
                                         (
                                             It.IsAny <int>(), It.IsAny <Func <int, TimeSpan> >(), It.IsAny <Action <int> >(),
                                             It.IsAny <Func <ConferenceDetailsResponse, bool> >(), It.IsAny <Func <Task <ConferenceDetailsResponse> > >()
                                         ))
            .Callback(async(int retries, Func <int, TimeSpan> sleepDuration, Action <int> retryAction,
                            Func <ConferenceDetailsResponse, bool> handleResultCondition, Func <Task <ConferenceDetailsResponse> > executeFunction) =>
            {
                sleepDuration(1);
                retryAction(1);
                handleResultCondition(expectedConferenceDetailsResponse);
                await executeFunction();
            })
            .ThrowsAsync(new VideoApiException("", 0, "", null, null));

            var response = await _controller.UpdateBookingStatus(hearingId, updateCreatedStatus);

            var result = (OkObjectResult)response;

            result.StatusCode.Should().Be(StatusCodes.Status200OK);
            result.Value.Should().NotBeNull().And.BeAssignableTo <UpdateBookingStatusResponse>().Subject.Success.Should().BeFalse();

            _bookingsApiClient.Verify(x => x.UpdateBookingStatusAsync(hearingId, updateCreatedStatus), Times.Once);
            _bookingsApiClient.Verify(x => x.UpdateBookingStatusAsync(hearingId, It.Is <UpdateBookingStatusRequest>(pred => pred.Status == UpdateBookingStatus.Failed)), Times.Once);
        }
Example #20
0
        public static void UpdatedConference(ConferenceDetailsResponse conferenceDetails, UpdateHearingRequest request)
        {
            conferenceDetails.Should().BeEquivalentTo(request, options => options
                                                      .Excluding(x => x.Cases)
                                                      .Excluding(x => x.HearingRoomName)
                                                      .Excluding(x => x.OtherInformation)
                                                      .Excluding(x => x.QuestionnaireNotRequired)
                                                      .Excluding(x => x.UpdatedBy)
                                                      );

            conferenceDetails.CaseName.Should().Be(request.Cases.First().Name);
            conferenceDetails.CaseNumber.Should().Be(request.Cases.First().Number);
        }
Example #21
0
 public void InitConferenceResponse()
 {
     ConferenceResponse = new ConferenceDetailsResponse
     {
         Id           = Guid.NewGuid(),
         Participants = new List <ParticipantDetailsResponse>
         {
             new ParticipantDetailsResponse {
                 Id = Guid.NewGuid()
             }
         }
     };
 }
Example #22
0
        public async Task AddConferenceAsync(ConferenceDetailsResponse conferenceResponse)
        {
            var conference           = ConferenceCacheMapper.MapConferenceToCacheModel(conferenceResponse);
            var serialisedConference = JsonConvert.SerializeObject(conference, CachingHelper.SerializerSettings);

            var data = Encoding.UTF8.GetBytes(serialisedConference);

            await _distributedCache.SetAsync(conference.Id.ToString(), data,
                                             new DistributedCacheEntryOptions
            {
                SlidingExpiration = TimeSpan.FromHours(4)
            });
        }
Example #23
0
        public async Task Returns_Conference_Details_Response()
        {
            var videoApiClientMock        = new Mock <IVideoApiClient>();
            var loggerMock                = new Mock <ILogger <VideoApiService> >();
            var videoApiService           = new VideoApiService(videoApiClientMock.Object, loggerMock.Object);
            var bookNewConferenceRequest  = new BookNewConferenceRequest();
            var conferenceDetailsResponse = new ConferenceDetailsResponse();

            videoApiClientMock.Setup(x => x.BookNewConferenceAsync(It.Is <BookNewConferenceRequest>(x => x == bookNewConferenceRequest))).ReturnsAsync(conferenceDetailsResponse);

            var result = await videoApiService.BookNewConferenceAsync(bookNewConferenceRequest);

            Assert.AreEqual(conferenceDetailsResponse, result);
        }
 public void Init()
 {
     conferenceDetailsResp = new ConferenceDetailsResponse
     {
         Id          = Guid.NewGuid(),
         HearingId   = Guid.NewGuid(),
         MeetingRoom = new MeetingRoomResponse
         {
             AdminUri              = "admin",
             JudgeUri              = "judge",
             ParticipantUri        = "participant",
             PexipNode             = "pexip",
             TelephoneConferenceId = "121212"
         }
     };
 }
Example #25
0
 public static void ConferenceDetailsResponse(ConferenceDetailsResponse response, HearingDetailsResponse hearing)
 {
     response.AudioRecordingRequired.Should().Be(hearing.AudioRecordingRequired);
     response.CaseName.Should().Be(hearing.Cases.First().Name);
     response.CaseNumber.Should().Be(hearing.Cases.First().Number);
     response.CaseType.Should().Be(hearing.CaseTypeName);
     response.ClosedDateTime.Should().BeNull();
     response.CurrentStatus.Should().Be(ConferenceState.NotStarted);
     response.HearingId.Should().Be(hearing.Id);
     response.HearingVenueName.Should().Be(hearing.HearingVenueName);
     response.Id.Should().NotBeEmpty();
     response.ScheduledDateTime.Should().Be(hearing.ScheduledDateTime);
     response.ScheduledDuration.Should().Be(hearing.ScheduledDuration);
     response.StartedDateTime.Should().BeNull();
     VerifyConferenceParticipants(response.Participants, hearing.Participants);
 }
 public static List <ConferenceForJudgeResponse> Map(ConferenceDetailsResponse response)
 {
     return(new List <ConferenceForJudgeResponse>()
     {
         new ConferenceForJudgeResponse()
         {
             CaseName = response.CaseName,
             CaseNumber = response.CaseNumber,
             CaseType = response.CaseType,
             Id = Guid.NewGuid(),
             Participants = AddParticipants(response.Participants),
             ScheduledDateTime = response.ScheduledDateTime,
             ScheduledDuration = response.ScheduledDuration,
             Status = ConferenceState.NotStarted
         }
     });
 }
        private ConferenceDetailsResponse CreateConferenceDetailsResponse()
        {
            var pats = TestConference.Participants.Select(p => new ParticipantDetailsResponse
            {
                Id          = p.Id,
                Username    = p.Username,
                DisplayName = p.DisplayName,
            }).ToList();

            var conference = new ConferenceDetailsResponse
            {
                Id           = TestConference.Id,
                HearingId    = TestConference.HearingId,
                Participants = pats
            };

            return(conference);
        }
        private static void AssignTilePositions(ConferenceDetailsResponse conference, ConferenceResponseVho response)
        {
            var tiledParticipants = conference.Participants.Where(x =>
                                                                  x.User_role == UserRole.Individual || x.User_role == UserRole.Representative).ToList();

            var partyGroups = tiledParticipants.GroupBy(x => x.Case_type_group).ToList();

            foreach (var group in partyGroups)
            {
                var pats     = @group.ToList();
                var position = partyGroups.IndexOf(@group) + 1;
                foreach (var p in pats)
                {
                    var participant = response.Participants.Find(x => x.Id == p.Id);
                    participant.TiledDisplayName = $"T{position};{participant.DisplayName};{participant.Id}";
                    position += 2;
                }
            }
        }
Example #29
0
        public void Setup()
        {
            ParticipantId             = Guid.NewGuid();
            HearingId                 = Guid.NewGuid();
            VideoApiServiceMock       = new Mock <IVideoApiService>();
            ConferenceDetailsResponse = new ConferenceDetailsResponse
            {
                Id           = Guid.NewGuid(),
                Participants = new List <ParticipantDetailsResponse>
                {
                    new ParticipantDetailsResponse {
                        Id = Guid.NewGuid(), RefId = ParticipantId
                    }
                }
            };

            VideoApiServiceMock.Setup(x => x.GetConferenceByHearingRefId(HearingId, It.IsAny <bool>())).ReturnsAsync(ConferenceDetailsResponse);

            VideoWebServiceMock = new Mock <IVideoWebService>();
        }
        public static ConferenceResponseVho MapConferenceDetailsToResponseModel(ConferenceDetailsResponse conference)
        {
            if (!Enum.TryParse(conference.Current_status.ToString(), true, out ConferenceStatus status))
            {
                status = ConferenceStatus.NotStarted;
            }

            conference.Participants ??= new List <ParticipantDetailsResponse>();

            var participants = conference.Participants
                               .OrderBy(x => x.Case_type_group)
                               .Select(ParticipantResponseForVhoMapper.MapParticipantToResponseModel)
                               .ToList();

            var response = new ConferenceResponseVho
            {
                Id                = conference.Id,
                CaseName          = conference.Case_name,
                CaseNumber        = conference.Case_number,
                CaseType          = conference.Case_type,
                ScheduledDateTime = conference.Scheduled_date_time,
                ScheduledDuration = conference.Scheduled_duration,
                Status            = status,
                Participants      = participants,
                ClosedDateTime    = conference.Closed_date_time,
                HearingVenueName  = conference.Hearing_venue_name
            };

            if (conference.Meeting_room == null)
            {
                return(response);
            }

            response.AdminIFrameUri = conference.Meeting_room.Admin_uri;
            response.ParticipantUri = conference.Meeting_room.Participant_uri;
            response.PexipNodeUri   = conference.Meeting_room.Pexip_node;

            AssignTilePositions(conference, response);

            return(response);
        }