예제 #1
0
        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);
        }
예제 #2
0
        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);
        }