public async Task Should_send_email_for_new_individual_participant_added()
        {
            var participant = new BookingsApi.Contract.Requests.ParticipantRequest
            {
                Username        = string.Empty, // New participant
                CaseRoleName    = "Applicant",
                HearingRoleName = "Individual"
            };

            var newUserName = "******";
            // setup response
            var hearingDetailsResponse = HearingResponseBuilder.Build()
                                         .WithParticipant("Individual", newUserName);

            _bookingsApiClient.Setup(x => x.BookNewHearingAsync(It.IsAny <BookNewHearingRequest>()))
            .ReturnsAsync(hearingDetailsResponse);
            _userAccountService
            .Setup(x => x.UpdateParticipantUsername(It.IsAny <BookingsApi.Contract.Requests.ParticipantRequest>()))
            .Callback <BookingsApi.Contract.Requests.ParticipantRequest>(p => { p.Username = newUserName; })
            .ReturnsAsync(new User {
                UserName = newUserName, Password = "******"
            });

            await PostWithParticipants(participant);

            _notificationApiMock.Verify(x => x.CreateNewNotificationAsync(It.Is <AddNotificationRequest>(request =>
                                                                                                         request.NotificationType == NotificationType.CreateIndividual)), Times.Once);
        }
        public async Task Should_update_participant_username_to_aad_email_id()
        {
            var participant = new BookingsApi.Contract.Requests.ParticipantRequest
            {
                Username        = "******",
                CaseRoleName    = "Applicant",
                HearingRoleName = "Representative",
                ContactEmail    = "*****@*****.**"
            };
            var participantList = new List <BookingsApi.Contract.Requests.ParticipantRequest> {
                participant
            };

            const string da        = "*****@*****.**";
            var          endpoints = new EndpointRequest {
                DisplayName = "displayname", DefenceAdvocateUsername = da
            };
            var endpointList = new List <EndpointRequest> {
                endpoints
            };

            var hearing = new BookNewHearingRequest
            {
                Participants = participantList,
                Endpoints    = endpointList
            };

            var bookingRequest = new BookHearingRequest
            {
                BookingDetails = hearing
            };

            // setup response
            var hearingDetailsResponse = HearingResponseBuilder.Build()
                                         .WithParticipant("Representative", participant.Username);

            _bookingsApiClient.Setup(x => x.BookNewHearingAsync(It.IsAny <BookNewHearingRequest>()))
            .ReturnsAsync(hearingDetailsResponse);

            await _controller.Post(bookingRequest);

            _userAccountService.Verify(x => x.GetAdUserIdForUsername(participant.Username), Times.Once);
        }
        public async Task Should_update_participant_user_details()
        {
            var participant = new BookingsApi.Contract.Requests.ParticipantRequest
            {
                Username        = "******",
                CaseRoleName    = "Applicant",
                HearingRoleName = "Representative"
            };

            // setup response
            var hearingDetailsResponse = HearingResponseBuilder.Build()
                                         .WithParticipant("Representative", "username");

            _bookingsApiClient.Setup(x => x.BookNewHearingAsync(It.IsAny <BookNewHearingRequest>()))
            .ReturnsAsync(hearingDetailsResponse);

            await PostWithParticipants(participant);

            _userAccountService.Verify(x => x.GetAdUserIdForUsername(participant.Username), Times.Once);
        }
        public async Task Should_not_update_user_details_for_winger()
        {
            var participant = new BookingsApi.Contract.Requests.ParticipantRequest
            {
                Username        = "******",
                CaseRoleName    = "",
                HearingRoleName = "Winger"
            };

            // setup  response
            var hearingDetailsResponse = HearingResponseBuilder.Build()
                                         .WithParticipant("");

            _bookingsApiClient.Setup(x => x.BookNewHearingAsync(It.IsAny <BookNewHearingRequest>()))
            .ReturnsAsync(hearingDetailsResponse);

            await PostWithParticipants(participant);

            _userAccountService.Verify(x => x.UpdateParticipantUsername(participant), Times.Never);
            _userAccountService.Verify(x => x.GetAdUserIdForUsername(participant.Username), Times.Never);
        }
        public async Task Should_not_send_email_for_existing_participant_added()
        {
            var existingUserName = "******";
            var participant      = new BookingsApi.Contract.Requests.ParticipantRequest
            {
                Username        = existingUserName,
                CaseRoleName    = "Applicant",
                HearingRoleName = "Representative"
            };

            // setup response
            var hearingDetailsResponse = HearingResponseBuilder.Build()
                                         .WithParticipant("Representative", existingUserName);

            _bookingsApiClient.Setup(x => x.BookNewHearingAsync(It.IsAny <BookNewHearingRequest>()))
            .ReturnsAsync(hearingDetailsResponse);

            await PostWithParticipants(participant);

            _notificationApiMock.Verify(
                x => x.CreateNewNotificationAsync(It.Is <AddNotificationRequest>(request =>
                                                                                 request.NotificationType == NotificationType.CreateRepresentative)), Times.Never);
        }