public async Task TestUpdateAssignmentFailsWith400OnMissingClient() { // arrange var assignmentController = GetAssignmentController(); var nonExistantClientId = "ffff0000ffff0000ffff0000ffff0000"; var client = new Client { Id = Guid.NewGuid().ToString("n"), Name = "John", LastName = "Carmack" }; var provider = new Provider { Id = Guid.NewGuid().ToString("n"), Name = "bTow" }; var worker = new ProviderWorker { Id = Guid.NewGuid().ToString("n"), Name = "Andrew", LastName = "Garfield" }; var assignment = new Assignment { Id = Guid.NewGuid().ToString("n"), Status = AssignmentStatus.Created, StatusReason = AssignmentStatusReason.New, CreationDateTime = DateTimeOffset.Now, InitialLocation = new GeoJson2DGeographicCoordinates(-58.375979, -34.605062), ClientId = client.Id, WorkerId = worker.Id, ProviderId = provider.Id }; var updateAssignmentVM = new UpdateAssignmentBindingModel { Status = AssignmentStatus.InProgress, StatusReason = AssignmentStatusReason.WorkerEnRoute, UpdateDateTime = DateTimeOffset.Now, InitialLocation = new GeoLocation { Latitude = -34.605062, Longitude = -58.375979 }, ClientId = nonExistantClientId, WorkerId = worker.Id, ProviderId = provider.Id }; _testDataStore.EnsureClientDoesNotExist(nonExistantClientId); _testDataStore.EnsureClient(client); _testDataStore.EnsureProvider(provider); _testDataStore.EnsureWorker(worker); _testDataStore.EnsureAssignment(assignment); // act var actualResult = await assignmentController.UpdateAssignment(assignment.Id, updateAssignmentVM); // assert var actualUpdateAssignmentResult = actualResult as BadRequestObjectResult; Assert.True(actualUpdateAssignmentResult != null, "actualUpdateAssignmentResult should be of type BadRequestObjectResult"); Assert.Equal(400, actualUpdateAssignmentResult.StatusCode); Assert.NotNull(actualUpdateAssignmentResult.Value); }
public async Task <IActionResult> UpdateAssignment(string id, [FromBody] UpdateAssignmentBindingModel assignmentBindingModel) { if (!ModelState.IsValid) { return(BadRequest(ModelState.GetErrors())); } var(assignment, outcomeAction, message) = await _assignmentRepository.GetAssignmentByIdAsync(id); if (outcomeAction != RepositoryOutcomeAction.OkNone) { return(this.FromRepositoryOutcome(outcomeAction, message)); } assignment.ClientId = assignmentBindingModel.ClientId; assignment.WorkerId = assignmentBindingModel.WorkerId; assignment.ProviderId = assignmentBindingModel.ProviderId; assignment.Status = assignmentBindingModel.Status; assignment.StatusReason = assignmentBindingModel.StatusReason; assignment.InitialLocation = assignmentBindingModel.InitialLocation.ToGeoJson2DGeographicCoordinates(); assignment.ServiceLocation = assignmentBindingModel.ServiceLocation.ToGeoJson2DGeographicCoordinates(); assignment.EstimatedTimeOfArrival = assignmentBindingModel.EstimatedTimeOfArrival; assignment.UpdateDateTime = assignmentBindingModel.UpdateDateTime; assignment.Comments = assignmentBindingModel.Comments; (assignment, outcomeAction, message) = await _assignmentRepository.UpdateAssignmentAsync(assignment); var result = this.FromRepositoryOutcome(outcomeAction, message, assignment); if (outcomeAction == RepositoryOutcomeAction.OkUpdated) { await _notificationServices.NotifyAssignmentWorkerAsync(assignment); } return(result); }