public async Task <ActionResult <IList <PersonResponse> > > UpdatePersonDetails([FromRoute] Guid personId, [FromBody] UpdateAccountDetailsRequest payload) { try { var useridString = await _userAccountService.GetAdUserIdForUsername(payload.CurrentUsername); var userId = Guid.Parse(useridString); var updatedPerson = await _userAccountService.UpdateUserAccountDetails(userId, payload.FirstName, payload.LastName); var updateBookingPersonRequest = new UpdatePersonDetailsRequest { FirstName = updatedPerson.FirstName, LastName = updatedPerson.LastName, Username = updatedPerson.Email }; await _bookingsApiClient.UpdatePersonDetailsAsync(personId, updateBookingPersonRequest); return(Accepted()); } catch (UserApiException e) { return(StatusCode(e.StatusCode, e.Response)); } catch (BookingsApiException e) { return(StatusCode(e.StatusCode, e.Response)); } }
public async Task should_return_bad_request_if_payload_is_invalid() { var personId = Guid.NewGuid(); var payload = new UpdatePersonDetailsRequest() { Username = String.Empty, FirstName = "New", LastName = "Me" }; var result = await Controller.UpdatePersonDetails(personId, payload); result.Result.Should().BeOfType <BadRequestObjectResult>(); }
public void GivenIHaveAMalformedUpdatePersonDetailsRequest() { var hearing = Context.TestData.SeededHearing; var person = hearing.GetPersons().First(); var request = new UpdatePersonDetailsRequest { Username = String.Empty, FirstName = "New" }; Context.Uri = UpdatePersonDetails(person.Id); Context.HttpMethod = HttpMethod.Put; var jsonBody = RequestHelper.Serialise(request); Context.HttpContent = new StringContent(jsonBody, Encoding.UTF8, "application/json"); }
public void GivenIHaveANonExistentUpdatePersonDetailsRequest() { Context.Uri = UpdatePersonDetails(Guid.NewGuid()); Context.HttpMethod = HttpMethod.Put; var request = new UpdatePersonDetailsRequest { Username = "******", FirstName = "New", LastName = "Me" }; Context.HttpMethod = HttpMethod.Put; var jsonBody = RequestHelper.Serialise(request); Context.HttpContent = new StringContent(jsonBody, Encoding.UTF8, "application/json"); }
public async Task should_return_not_found_when_command_throws_person_not_found_exception() { var personId = Guid.NewGuid(); var payload = new UpdatePersonDetailsRequest() { Username = "******", FirstName = "New", LastName = "Me" }; CommandHandlerMock.Setup(x => x.Handle(It.IsAny <UpdatePersonCommand>())) .ThrowsAsync(new PersonNotFoundException(personId)); var result = await Controller.UpdatePersonDetails(personId, payload); result.Result.Should().BeOfType <NotFoundObjectResult>(); var typed = result.Result.As <NotFoundObjectResult>(); typed.Value.Should().Be($"{personId} does not exist"); }
public async Task should_send_update_event_for_each_hearing_person_is_a_participant_in() { var personId = Guid.NewGuid(); var payload = new UpdatePersonDetailsRequest() { Username = "******", FirstName = "New", LastName = "Me" }; var hearings = CreateListOfVideoHearings(personId, payload.FirstName, payload.LastName, payload.Username); QueryHandlerMock .Setup(x => x.Handle <GetHearingsByUsernameQuery, List <VideoHearing> >(It.IsAny <GetHearingsByUsernameQuery>())) .ReturnsAsync(hearings); var result = await Controller.UpdatePersonDetails(personId, payload); result.Result.Should().BeOfType <AcceptedResult>(); EventPublisherMock.Verify(x => x.PublishAsync(It.IsAny <ParticipantUpdatedIntegrationEvent>()), Times.Once); }
public async Task <ActionResult <IList <PersonResponse> > > UpdatePersonDetails([FromRoute] Guid personId, [FromBody] UpdatePersonDetailsRequest payload) { var validation = await new UpdatePersonDetailsRequestValidation().ValidateAsync(payload); if (!validation.IsValid) { ModelState.AddFluentValidationErrors(validation.Errors); return(BadRequest(ModelState)); } try { var command = new UpdatePersonCommand(personId, payload.FirstName, payload.LastName, payload.Username); await _commandHandler.Handle(command); } catch (PersonNotFoundException e) { _logger.LogError(e, "Failed to update a person because the person {Person} does not exist", personId); return(NotFound($"{personId} does not exist")); } // get all hearings for user var query = new GetHearingsByUsernameQuery(payload.Username); var hearings = await _queryHandler.Handle <GetHearingsByUsernameQuery, List <VideoHearing> >(query); // raise an update event for each hearing to ensure consistency between video and bookings api var anonymisedText = "@hmcts.net"; var nonAnonymisedParticipants = hearings .Where(x => x.Status == BookingStatus.Created && x.GetCases().Any(c => !c.Name.EndsWith(anonymisedText))).SelectMany(c => c.Participants) .Where(p => p.PersonId == personId && !p.DisplayName.EndsWith(anonymisedText)).ToList(); _logger.LogDebug("Updating {Count} non-anonymised participants", nonAnonymisedParticipants.Count); foreach (var participant in nonAnonymisedParticipants) { // map to updated participant event await _eventPublisher.PublishAsync(new ParticipantUpdatedIntegrationEvent(participant.HearingId, participant)); } return(Accepted()); }