public static UpdateWorkerRequest CreatePatchRequest(Worker worker, WorkerTeamRequest teamRequest) { var updateWorkerRequest = new Faker <UpdateWorkerRequest>() .RuleFor(f => f.WorkerId, f => worker.Id) .RuleFor(f => f.ModifiedBy, f => f.Person.Email) .RuleFor(f => f.FirstName, f => worker.FirstName) .RuleFor(f => f.LastName, f => worker.LastName) .RuleFor(f => f.ContextFlag, f => worker.ContextFlag) .RuleFor(f => f.Teams, f => new List <WorkerTeamRequest> { teamRequest }) .RuleFor(f => f.Role, f => worker.Role) .RuleFor(f => f.DateStart, f => worker.DateStart).Generate(); return(updateWorkerRequest); }
public async Task UpdateWorkerWithNewTeamReturnsTheOnlyTheUpdatedTeam() { // Patch request to update team of existingDbWorker var patchUri = new Uri("/api/v1/workers", UriKind.Relative); var newTeamRequest = new WorkerTeamRequest { Id = _differentDbTeam.Id, Name = _differentDbTeam.Name }; var patchRequest = IntegrationTestHelpers.CreatePatchRequest(_existingDbWorker, newTeamRequest); var serializedRequest = JsonSerializer.Serialize(patchRequest); var requestContent = new StringContent(serializedRequest, Encoding.UTF8, "application/json"); var patchWorkerResponse = await Client.PatchAsync(patchUri, requestContent).ConfigureAwait(true); patchWorkerResponse.StatusCode.Should().Be(204); // Get request to check team has been updated var getUri = new Uri($"/api/v1/workers?email={_existingDbWorker.Email}", UriKind.Relative); var getUpdatedWorkersResponse = await Client.GetAsync(getUri).ConfigureAwait(true); getUpdatedWorkersResponse.StatusCode.Should().Be(200); var updatedContent = await getUpdatedWorkersResponse.Content.ReadAsStringAsync().ConfigureAwait(true); var updatedWorkerResponse = JsonConvert.DeserializeObject <List <WorkerResponse> >(updatedContent).ToList(); updatedWorkerResponse.Count.Should().Be(1); // Worker's initial team should be replaced with the new team updatedWorkerResponse.Single().Teams.Count.Should().Be(1); updatedWorkerResponse.Single().Teams.Single().Id.Should().Be(newTeamRequest.Id); updatedWorkerResponse.Single().Teams.Single().Name.Should().Be(newTeamRequest.Name); // Check the db state as well var persistedWorkerTeams = DatabaseContext.WorkerTeams.Where(x => x.WorkerId.Equals(_existingDbWorker.Id)).ToList(); persistedWorkerTeams.Count.Should().Be(1); persistedWorkerTeams.Single().Team.Id.Should().Be(newTeamRequest.Id); persistedWorkerTeams.Single().Team.Name.Should().Be(newTeamRequest.Name); }
public async Task UpdateWorkerWithNewTeamUpdatesAnyAllocationsAssociated() { // Create an allocation request for existingDbWorker var createAllocationUri = new Uri("/api/v1/allocations", UriKind.Relative); var allocationRequest = IntegrationTestHelpers.CreateAllocationRequest(_resident.Id, _existingDbTeam.Id, _existingDbWorker.Id, _allocationWorker); var serializedRequest = JsonSerializer.Serialize(allocationRequest); var requestContent = new StringContent(serializedRequest, Encoding.UTF8, "application/json"); var allocationResponse = await Client.PostAsync(createAllocationUri, requestContent).ConfigureAwait(true); allocationResponse.StatusCode.Should().Be(201); // Create another allocation request for existingDbWorker var secondAllocationRequest = IntegrationTestHelpers.CreateAllocationRequest(_resident.Id, _existingDbTeam.Id, _existingDbWorker.Id, _allocationWorker); var secondSerializedRequest = JsonSerializer.Serialize(secondAllocationRequest); var secondRequestContent = new StringContent(secondSerializedRequest, Encoding.UTF8, "application/json"); var allocationTwoResponse = await Client.PostAsync(createAllocationUri, secondRequestContent).ConfigureAwait(true); allocationTwoResponse.StatusCode.Should().Be(201); // Patch request to update team of existingDbWorker var patchUri = new Uri("/api/v1/workers", UriKind.Relative); var newTeamRequest = new WorkerTeamRequest { Id = _differentDbTeam.Id, Name = _differentDbTeam.Name }; var patchRequest = IntegrationTestHelpers.CreatePatchRequest(_existingDbWorker, newTeamRequest); var patchTeamSerializedRequest = JsonSerializer.Serialize(patchRequest); var patchRequestContent = new StringContent(patchTeamSerializedRequest, Encoding.UTF8, "application/json"); var patchWorkerResponse = await Client.PatchAsync(patchUri, patchRequestContent).ConfigureAwait(true); patchWorkerResponse.StatusCode.Should().Be(204); // Get request to check team has been updated on existingDbWorker's allocations var getAllocationsUri = new Uri($"/api/v1/allocations?mosaic_id={_resident.Id}", UriKind.Relative); var getAllocationsResponse = await Client.GetAsync(getAllocationsUri).ConfigureAwait(true); getAllocationsResponse.StatusCode.Should().Be(200); var allocationsContent = await getAllocationsResponse.Content.ReadAsStringAsync().ConfigureAwait(true); var updatedAllocationResponse = JsonConvert.DeserializeObject <AllocationList>(allocationsContent); updatedAllocationResponse.Allocations.Count.Should().Be(2); var firstAllocation = updatedAllocationResponse.Allocations.ElementAtOrDefault(0); firstAllocation?.AllocatedWorkerTeam.Should().Be(newTeamRequest.Name); firstAllocation?.PersonId.Should().Be(_resident.Id); firstAllocation?.AllocatedWorker.Should().Be($"{_existingDbWorker.FirstName} {_existingDbWorker.LastName}"); var secondAllocation = updatedAllocationResponse.Allocations.ElementAtOrDefault(1); secondAllocation?.AllocatedWorkerTeam.Should().Be(newTeamRequest.Name); secondAllocation?.PersonId.Should().Be(_resident.Id); secondAllocation?.AllocatedWorker.Should().Be($"{_existingDbWorker.FirstName} {_existingDbWorker.LastName}"); }