Exemplo n.º 1
0
        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)));
        }
Exemplo n.º 2
0
        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);
        }
Exemplo n.º 3
0
        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);
        }