예제 #1
0
        public async Task Create_InvalidInput_ReturnNull(string birthDate, string birthPlace, string description, string firstName, string lastName)
        {
            #region Arrange
            var dbContext = new ApplicationDbContext(_dbContextOptions);
            await dbContext.Database.EnsureDeletedAsync();

            var newPerson = new AdminPersonModel
            {
                ID          = 1,
                BirthDate   = DateTime.Parse(birthDate),
                BirthPlace  = birthPlace,
                Description = description,
                FirstName   = firstName,
                LastName    = lastName
            };

            var appPerson = new Person(dbContext);
            #endregion

            #region Act
            var actualPerson = await appPerson.Create(newPerson);

            #endregion

            #region Assert
            Assert.Null(actualPerson);
            #endregion
        }
예제 #2
0
        public async Task Create_InvalidRequest_ReturnsJsonResponseAndBadRequestWithErrors(string birthDate, string birthPlace, string description, string firstName, string lastName, IEnumerable <string> expectedErrorNames, IEnumerable <string> expectedErrorValues)
        {
            #region Arrange
            await DeleteDbContent();

            var client = GetHttpClient();

            var newPerson = new AdminPersonModel
            {
                BirthDate   = DateTime.Parse(birthDate),
                BirthPlace  = birthPlace,
                Description = description,
                FirstName   = firstName,
                LastName    = lastName
            };
            #endregion

            #region Act
            var response = await client.PostAsJsonAsync("/api/person", newPerson);

            var responseBody = await response.Content.ReadAsStreamAsync();

            var actualPerson = await JsonSerializer.DeserializeAsync <JsonElement>(responseBody);

            var errorProp = actualPerson.GetProperty("errors");
            var errors    = errorProp.EnumerateObject();
            #endregion

            #region Assert
            Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
            Assert.Equal(expectedErrorNames.Count(), errors.Count());
            Assert.All(expectedErrorNames, errorName => Assert.Contains(errorName, errors.Select(prop => prop.Name)));
            Assert.All(expectedErrorValues, errorValue => Assert.Contains(errorValue, errors.Select(prop => prop.Value[0].ToString())));
            #endregion
        }
예제 #3
0
        public async Task Update_InvalidRequest_ReturnsJsonResponseAndNotFound(int id)
        {
            #region Arrange
            await DeleteDbContent();

            var client = GetHttpClient();

            var newPerson = new AdminPersonModel
            {
                ID          = id,
                BirthDate   = DateTime.Parse("04-10-2010"),
                BirthPlace  = "Birth Place",
                Description = "Description",
                FirstName   = "First Name",
                LastName    = "Last Name"
            };
            #endregion

            #region Act
            var response = await client.PutAsJsonAsync($"/api/person/{id}", newPerson);

            #endregion

            #region Assert
            Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
            #endregion
        }
예제 #4
0
        public async Task Update_ValidRequest_ReturnsJsonResponseAndOk(int id, string birthDate, string birthPlace, string description, string firstName, string lastName)
        {
            #region Arrange
            await DeleteDbContent();

            var client    = GetHttpClient();
            var dbContext = GetDbContext();

            var person = new Domain.Person
            {
                BirthDate   = "04-10-2010",
                BirthPlace  = "Birth Place",
                Description = "Description",
                FirstName   = "First Name",
                LastName    = "Last Name"
            };
            dbContext.Persons.Add(person);
            await dbContext.SaveChangesAsync();

            var newPerson = new AdminPersonModel
            {
                ID          = id,
                BirthDate   = DateTime.Parse(birthDate),
                BirthPlace  = birthPlace,
                Description = description,
                FirstName   = firstName,
                LastName    = lastName
            };

            var expectedPerson = new PersonModel
            {
                ID          = id,
                BirthDate   = DateTime.Parse(birthDate),
                BirthPlace  = birthPlace,
                Description = description,
                FirstName   = firstName,
                LastName    = lastName
            };
            #endregion

            #region Act
            var response = await client.PutAsJsonAsync($"/api/person/{id}", newPerson);

            var responseBody = await response.Content.ReadAsStreamAsync();

            var actualPerson = await JsonSerializer.DeserializeAsync <PersonModel>(responseBody);

            #endregion

            #region Assert
            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
            Assert.Equal(expectedPerson.ID, actualPerson.ID);
            Assert.Equal(expectedPerson.BirthDate, actualPerson.BirthDate);
            Assert.Equal(expectedPerson.BirthPlace, actualPerson.BirthPlace);
            Assert.Equal(expectedPerson.Description, actualPerson.Description);
            Assert.Equal(expectedPerson.FirstName, actualPerson.FirstName);
            Assert.Equal(expectedPerson.LastName, actualPerson.LastName);
            #endregion
        }
        public async Task <IActionResult> Update([FromBody] AdminPersonModel adminPersonModel)
        {
            if (await person.Update(adminPersonModel) is PersonModel result && result != null)
            {
                return(Ok(result));
            }

            return(NotFound());
        }
        public async Task <IActionResult> Create([FromBody] AdminPersonModel adminPersonModel)
        {
            if (await person.Create(adminPersonModel) is PersonModel result && result != null)
            {
                return(CreatedAtAction(nameof(Read), new { id = result.ID }, result));
            }

            return(StatusCode((int)HttpStatusCode.InternalServerError));
        }
        public bool IsInputValid(AdminPersonModel adminPersonModel)
        {
            bool isBirthDateOk   = adminPersonModel.BirthDate != DateTime.Parse("1-1-0001 00:00:00");
            bool isBirthPlaceOk  = !(adminPersonModel.BirthPlace == null || adminPersonModel.BirthPlace == "");
            bool isDescriptionOk = !(adminPersonModel.Description == null || adminPersonModel.Description == "");
            bool isFirstNameOk   = !(adminPersonModel.FirstName == null || adminPersonModel.FirstName == "");
            bool isLastNameOk    = !(adminPersonModel.LastName == null || adminPersonModel.LastName == "");

            return(isBirthDateOk && isBirthPlaceOk && isDescriptionOk && isFirstNameOk && isLastNameOk);
        }
예제 #8
0
        public async Task Update_ValidInput_ReturnsCorrectData(int id, string birthDate, string birthPlace, string description, string firstName, string lastName)
        {
            #region Arrange
            var dbContext = new ApplicationDbContext(_dbContextOptions);
            await dbContext.Database.EnsureDeletedAsync();

            var person = new Domain.Person
            {
                BirthDate   = "04-10-2010",
                BirthPlace  = "Birth Place",
                Description = "Description",
                FirstName   = "Firt Name",
                LastName    = "Last Name"
            };
            dbContext.Persons.Add(person);
            await dbContext.SaveChangesAsync();

            var newPerson = new AdminPersonModel
            {
                ID          = id,
                BirthDate   = DateTime.Parse(birthDate),
                BirthPlace  = birthPlace,
                Description = description,
                FirstName   = firstName,
                LastName    = lastName
            };

            var expectedPerson = new PersonModel
            {
                ID          = id,
                BirthDate   = DateTime.Parse(birthDate),
                BirthPlace  = birthPlace,
                Description = description,
                FirstName   = firstName,
                LastName    = lastName
            };

            var appPerson = new Person(dbContext);
            #endregion

            #region Act
            var actualPerson = await appPerson.Update(newPerson);

            #endregion

            #region Assert
            Assert.Equal(expectedPerson.ID, actualPerson.ID);
            Assert.Equal(expectedPerson.BirthDate, actualPerson.BirthDate);
            Assert.Equal(expectedPerson.BirthPlace, actualPerson.BirthPlace);
            Assert.Equal(expectedPerson.Description, actualPerson.Description);
            Assert.Equal(expectedPerson.FirstName, actualPerson.FirstName);
            Assert.Equal(expectedPerson.LastName, actualPerson.LastName);
            #endregion
        }
예제 #9
0
        public async Task Update_InvalidRequest_ReturnsJsonResponseAndBadRequestWithErrors(int id, string birthDate, string birthPlace, string description, string firstName, string lastName, IEnumerable <string> expectedErrorNames, IEnumerable <string> expectedErrorMessages)
        {
            #region Arrange
            await DeleteDbContent();

            var client    = GetHttpClient();
            var dbContext = GetDbContext();

            var person = new Domain.Person
            {
                BirthDate   = "04-10-2010",
                BirthPlace  = "Birth Place",
                Description = "Description",
                FirstName   = "First Name",
                LastName    = "Last Name"
            };
            dbContext.Persons.Add(person);
            await dbContext.SaveChangesAsync();

            var newPerson = new AdminPersonModel
            {
                ID          = id,
                BirthDate   = DateTime.Parse(birthDate),
                BirthPlace  = birthPlace,
                Description = description,
                FirstName   = firstName,
                LastName    = lastName
            };
            #endregion

            #region Act
            var response = await client.PutAsJsonAsync($"/api/person/{id}", newPerson);

            var responseBody = await response.Content.ReadAsStreamAsync();

            var actualPerson = await JsonSerializer.DeserializeAsync <JsonElement>(responseBody);

            var errorProp = actualPerson.GetProperty("errors");
            var errors    = errorProp.EnumerateObject();
            #endregion

            #region Assert
            Assert.Equal(HttpStatusCode.BadRequest, response.StatusCode);
            Assert.Equal(expectedErrorNames.Count(), errors.Count());
            Assert.All(expectedErrorNames, errorName => Assert.Contains(errorName, errors.Select(prop => prop.Name)));
            Assert.All(expectedErrorMessages, errorMessage => Assert.Contains(errorMessage, errors.Select(prop => prop.Value[0].ToString())));
            #endregion
        }
예제 #10
0
        public async Task Create_ValidRequest_ReturnsJsonResponseAndCreated(string birthDate, string birthPlace, string description, string firstName, string lastName)
        {
            #region Arrange
            await DeleteDbContent();

            var client = GetHttpClient();

            var newPerson = new AdminPersonModel
            {
                BirthDate   = DateTime.Parse(birthDate),
                BirthPlace  = birthPlace,
                Description = description,
                FirstName   = firstName,
                LastName    = lastName
            };

            var expectedPerson = new PersonModel
            {
                ID          = 1,
                BirthDate   = DateTime.Parse(birthDate),
                BirthPlace  = birthPlace,
                Description = description,
                FirstName   = firstName,
                LastName    = lastName
            };
            #endregion

            #region Act
            var response = await client.PostAsJsonAsync("/api/person", newPerson);

            var responseBody = await response.Content.ReadAsStreamAsync();

            var actualPerson = await JsonSerializer.DeserializeAsync <PersonModel>(responseBody);

            #endregion

            #region Assert
            Assert.Equal(HttpStatusCode.Created, response.StatusCode);
            Assert.Equal(expectedPerson.ID, actualPerson.ID);
            Assert.Equal(expectedPerson.BirthDate, actualPerson.BirthDate);
            Assert.Equal(expectedPerson.BirthPlace, actualPerson.BirthPlace);
            Assert.Equal(expectedPerson.Description, actualPerson.Description);
            Assert.Equal(expectedPerson.FirstName, actualPerson.FirstName);
            Assert.Equal(expectedPerson.LastName, actualPerson.LastName);
            #endregion
        }
예제 #11
0
        public async Task <PersonModel> Update(AdminPersonModel adminPersonModel)
        {
            var person = _applicationDbContext.Persons.FirstOrDefault(x => x.ID == adminPersonModel.ID);

            if (person != null && _personValidation.IsInputValid(adminPersonModel))
            {
                person.BirthDate   = adminPersonModel.BirthDate.ToString("dd-MM-yyyy");
                person.BirthPlace  = adminPersonModel.BirthPlace;
                person.Description = adminPersonModel.Description;
                person.FirstName   = adminPersonModel.FirstName;
                person.LastName    = adminPersonModel.LastName;

                await _applicationDbContext.SaveChangesAsync();

                return(await Read(person.ID));
            }

            return(null);
        }
예제 #12
0
        public async Task <PersonModel> Create(AdminPersonModel adminPersonModel)
        {
            if (_personValidation.IsInputValid(adminPersonModel))
            {
                var person = new Domain.Person
                {
                    BirthDate   = adminPersonModel.BirthDate.ToString("dd-MM-yyyy"),
                    BirthPlace  = adminPersonModel.BirthPlace,
                    Description = adminPersonModel.Description,
                    FirstName   = adminPersonModel.FirstName,
                    LastName    = adminPersonModel.LastName
                };

                _applicationDbContext.Persons.Add(person);
                await _applicationDbContext.SaveChangesAsync();

                return(await Read(person.ID));
            }

            return(null);
        }