public async Task <IActionResult> NewAssignment([FromBody] NewAssignmentBindingModel assignmentBindingModel) { if (!ModelState.IsValid) { return(BadRequest(ModelState.GetErrors())); } var(imageBucket, outcomeAction, error) = await _imageBucketRepository.NewImageBucket( new ImageBucket { StoreBucket = new ImageBucketKey { Store = Constants.ASSIGNMENT_IMAGES_STORE }, ImageList = new List <string>() }); if (outcomeAction != RepositoryOutcomeAction.OkCreated) { return(this.StatusCode(500, error)); } var assignment = new Assignment { ProviderId = assignmentBindingModel.ProviderId, ClientId = assignmentBindingModel.ClientId, CreationDateTime = assignmentBindingModel.CreationDateTime, InitialLocation = assignmentBindingModel.InitialLocation.ToGeoJson2DGeographicCoordinates(), Status = assignmentBindingModel.Status, StatusReason = assignmentBindingModel.StatusReason, EstimatedTimeOfArrival = assignmentBindingModel.EstimatedTimeOfArrival, WorkerId = assignmentBindingModel.WorkerId.IfNotNullOrEmpty(), BoatTowId = assignmentBindingModel.BoatTowId.IfNotNullOrEmpty(), ImageBucketKey = imageBucket.StoreBucket }; (assignment, outcomeAction, error) = await _assignmentRepository.NewAssignmentAsync(assignment); if (outcomeAction == RepositoryOutcomeAction.OkCreated) { await _notificationServices.NotifyAssignmentWorkerAsync(assignment); } return(this.FromRepositoryOutcome(outcomeAction, error, MapToAssignmentResponseViewModel(assignment), Url.BuildGetAssignmentUrl(assignment?.Id))); }
public async Task TestNewAssignmentSucceedsWith201() { // arrange var assignmentController = GetAssignmentController(); 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 assignmentVM = new NewAssignmentBindingModel { InitialLocation = new GeoLocation { Latitude = -34.605062, Longitude = -58.375979 }, ClientId = client.Id, WorkerId = worker.Id, ProviderId = provider.Id, Status = AssignmentStatus.Created, StatusReason = AssignmentStatusReason.New, CreationDateTime = DateTimeOffset.Now }; _testDataStore.EnsureClient(client); _testDataStore.EnsureProvider(provider); _testDataStore.EnsureWorker(worker); // act var actualResult = await assignmentController.NewAssignment(assignmentVM); // assert var actualNewAssignmentResult = actualResult as CreatedResult; Assert.True(actualNewAssignmentResult != null, "actualNewAssignmentResult should be of type CreatedResult"); Assert.Equal(201, actualNewAssignmentResult.StatusCode); Assert.Matches("^.*/assignment/.*$", actualNewAssignmentResult.Location); }
public async Task TestNewAssignmentFailsWith400OnMissingClient() { // arrange var assignmentController = GetAssignmentController(); var nonExistantClientId = "ffff0000ffff0000ffff0000ffff0000"; 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 assignmentVM = new NewAssignmentBindingModel { InitialLocation = new GeoLocation { Latitude = -34.605062, Longitude = -58.375979 }, ClientId = nonExistantClientId, WorkerId = worker.Id, ProviderId = provider.Id, Status = AssignmentStatus.Created, StatusReason = AssignmentStatusReason.New, CreationDateTime = DateTimeOffset.Now }; _testDataStore.EnsureClientDoesNotExist(nonExistantClientId); _testDataStore.EnsureProvider(provider); _testDataStore.EnsureWorker(worker); // act var actualResult = await assignmentController.NewAssignment(assignmentVM); // assert var actualNewAssignmentResult = actualResult as BadRequestObjectResult; Assert.True(actualNewAssignmentResult != null, "actualNewAssignmentResult should be of type BadRequestObjectResult"); Assert.Equal(400, actualNewAssignmentResult.StatusCode); Assert.NotNull(actualNewAssignmentResult.Value); }