public async Task <SavePersonResponse> Save([FromBody] SavePersonRequest request)
        {
            SavePersonResponse response = new SavePersonResponse();

            if (response.InitializeFromModelStateIfInvalid(ModelState))
            {
                return(response);
            }

            if (request.Person.ID == Guid.Empty)
            {
                request.Person.ID = Guid.NewGuid();
                await _personUpsert.ExecuteAsync(request.Person, true);
            }
            else
            {
                var existingSite = _personSearch.Execute(new PersonSearchCriteria
                {
                    IncludedPersonIDs = new List <Guid> {
                        request.Person.ID
                    }
                }).FirstOrDefault();
                await _personUpsert.ExecuteAsync(request.Person);
            }
            response.Person = request.Person;
            return(response);
        }
예제 #2
0
        public async Task <SavePersonResponse> SavePerson(SavePersonRequest request)
        {
            const string userMessage = "Unable to save Person";
            var          response    = new SavePersonResponse();

            try
            {
                var p = await _dbContext.People.FindAsync(request.Person.Id);

                if (p == null)
                {
                    p = new People {
                        Id = Guid.NewGuid()
                    };
                    _dbContext.People.Add(p);
                }
                else
                {
                    _dbContext.Entry(p).State = EntityState.Modified;
                }
                p.FirstName = request.Person.FirstName;
                p.LastName  = request.Person.LastName;
                p.Email     = request.Person.Email;
                p.Photo     = request.Person.Photo;
                await _dbContext.SaveChangesAsync();

                response.Success = true;
                response.Id      = p.Id;
                return(response);
            }
            catch (Exception ex)
            {
                //log the exception..
                //In production we wouldn't return the exception detail
                return(new SavePersonResponse
                {
                    Success = false,
                    FailureInformation = userMessage + " | " + ex.Message
                });
            }
        }
        public async Task Returns_error_message_when_validation_errors()
        {
            var anyErrorMessage = "any error message";

            _savePersonHandler.Save(Arg.Is <SavePersonRequest>(request => request.Name.Equals("any name"))).Returns(SavePersonResponse.Failed(anyErrorMessage));

            var result = await _controller.Save(new SavePersonModel { Name = "any name", DateCreated = DateTime.UtcNow });

            var response = result as BadRequestObjectResult;

            response.Value.ShouldBe(anyErrorMessage);
        }
        public async Task Returns_bad_request_result_when_validation_errors()
        {
            _savePersonHandler.Save(Arg.Is <SavePersonRequest>(request => request.Name == "any name")).Returns(SavePersonResponse.Failed(string.Empty));

            var result = await _controller.Save(new SavePersonModel { Name = "any name", DateCreated = DateTime.UtcNow });

            (result is BadRequestObjectResult).ShouldBeTrue();
        }
        public async Task Returns_url_for_newly_created_resource_when_no_validation_errors()
        {
            var personId = Guid.NewGuid();

            var anyName = "any name";

            _savePersonHandler.Save(Arg.Is <SavePersonRequest>(request => request.Name.Equals(anyName))).Returns(SavePersonResponse.Success(personId));

            var result = await _controller.Save(new SavePersonModel { Name = anyName, DateCreated = DateTime.UtcNow });

            var response = result as CreatedResult;

            response.Location.ShouldBe($"/persons/{personId}");
        }
        public async Task Returns_created_result_when_no_validation_errors()
        {
            var personId = Guid.NewGuid();
            var anyName  = "any name";

            _savePersonHandler.Save(Arg.Is <SavePersonRequest>(request => request.Name.Equals(anyName))).Returns(SavePersonResponse.Success(personId));

            var result = await _controller.Save(new SavePersonModel { Name = anyName, DateCreated = DateTime.UtcNow });

            (result is CreatedResult).ShouldBeTrue();
        }