Exemple #1
0
        public async Task Create_InvalidInput_ReturnNull(string name)
        {
            #region Arrange
            var dbContext = new ApplicationDbContext(_dbContextOptions);
            await dbContext.Database.EnsureDeletedAsync();

            await dbContext.SaveChangesAsync();

            var newGenre = new AdminGenreModel
            {
                Name = name
            };

            var appGenre = new Genre(dbContext);
            #endregion

            #region Act
            var actualGenre = await appGenre.Create(newGenre);

            #endregion

            #region Assert
            Assert.Null(actualGenre);
            #endregion
        }
        public async Task Create_InvalidRequest_ReturnsJsonResponseAndBadRequestWithErrors(string name, IEnumerable <string> expectedErrorNames, IEnumerable <string> expectedErrorValues)
        {
            #region Arrange
            await DeleteDbContent();

            var client = GetHttpClient();

            var newGenre = new AdminGenreModel
            {
                Name = name
            };
            #endregion

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

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

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

            var errorProp = actualGenre.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
        }
        public async Task Create_ValidRequest_ReturnsJsonResponseAndCreated(string name)
        {
            #region Arrange
            await DeleteDbContent();

            var client = GetHttpClient();

            var newGenre = new AdminGenreModel
            {
                Name = name
            };

            var expectedGenre = new GenreModel
            {
                ID   = 1,
                Name = name
            };
            #endregion

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

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

            var actualGenre = await JsonSerializer.DeserializeAsync <GenreModel>(responseBody);

            #endregion

            #region Assert
            Assert.Equal(HttpStatusCode.Created, response.StatusCode);
            Assert.Equal(expectedGenre.ID, actualGenre.ID);
            Assert.Equal(expectedGenre.Name, actualGenre.Name);
            #endregion
        }
Exemple #4
0
        public async Task Update_InvalidInput_ReturnsNull(int id, string name)
        {
            #region Arrange
            var dbContext = new ApplicationDbContext(_dbContextOptions);
            await dbContext.Database.EnsureDeletedAsync();

            var genre = new Domain.Genre
            {
                Name = "Name"
            };
            dbContext.Genres.Add(genre);

            await dbContext.SaveChangesAsync();

            var newGenre = new AdminGenreModel
            {
                ID   = id,
                Name = name
            };

            var appGenre = new Genre(dbContext);
            #endregion

            #region Act
            var actualGenre = await appGenre.Update(newGenre);

            #endregion

            #region Assert
            Assert.Null(actualGenre);
            #endregion
        }
Exemple #5
0
        public async Task Create_ValidInput_ReturnsCorrectData(string name)
        {
            #region Arrange
            var dbContext = new ApplicationDbContext(_dbContextOptions);
            await dbContext.Database.EnsureDeletedAsync();

            var newGenre = new AdminGenreModel
            {
                Name = name
            };

            var expectedGenre = new GenreModel
            {
                ID   = 1,
                Name = name
            };

            var appGenre = new Genre(dbContext);
            #endregion

            #region Act
            var actualGenre = await appGenre.Create(newGenre);

            #endregion

            #region Assert
            Assert.Equal(expectedGenre.ID, actualGenre.ID);
            Assert.Equal(expectedGenre.Name, actualGenre.Name);
            #endregion
        }
Exemple #6
0
        public async Task <IActionResult> Update([FromBody] AdminGenreModel adminGenreModel)
        {
            if (await genre.Update(adminGenreModel) is GenreModel result && result != null)
            {
                return(Ok(result));
            }

            return(NotFound());
        }
Exemple #7
0
        public async Task <IActionResult> Create([FromBody] AdminGenreModel adminGenreModel)
        {
            if (await genre.Create(adminGenreModel) is GenreModel result && result != null)
            {
                return(CreatedAtAction(nameof(Read), new { id = result.ID }, result));
            }

            return(StatusCode((int)HttpStatusCode.InternalServerError));
        }
Exemple #8
0
        public async Task <GenreModel> Update(AdminGenreModel adminGenreModel)
        {
            var genre = _applicationDbContext.Genres.FirstOrDefault(x => x.ID == adminGenreModel.ID);

            if (genre != null && _genreValidation.IsInputValid(adminGenreModel))
            {
                genre.Name = adminGenreModel.Name;

                await _applicationDbContext.SaveChangesAsync();

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

            return(null);
        }
Exemple #9
0
        public async Task <GenreModel> Create(AdminGenreModel adminGenreModel)
        {
            if (_genreValidation.IsInputValid(adminGenreModel))
            {
                var genre = new Domain.Genre
                {
                    Name = adminGenreModel.Name
                };

                _applicationDbContext.Genres.Add(genre);

                await _applicationDbContext.SaveChangesAsync();

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

            return(null);
        }
        public async Task Update_ValidRequest_ReturnsJsonResponseAndOk(int id, string name)
        {
            #region Arrange
            await DeleteDbContent();

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

            dbContext.Genres.Add(new Domain.Genre
            {
                Name = "Name"
            });
            await dbContext.SaveChangesAsync();

            var newGenre = new AdminGenreModel
            {
                ID   = id,
                Name = name
            };

            var expectedGenre = new GenreModel
            {
                ID   = id,
                Name = name
            };
            #endregion

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

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

            var actualGenre = await JsonSerializer.DeserializeAsync <GenreModel>(responseBody);

            #endregion

            #region Assert
            Assert.Equal(HttpStatusCode.OK, response.StatusCode);
            Assert.Equal(expectedGenre.ID, actualGenre.ID);
            Assert.Equal(expectedGenre.Name, actualGenre.Name);
            #endregion
        }
        public async Task Update_InvalidRequest_ReturnsJsonResponseAndBadRequestWithErrors(int id, string name, IEnumerable <string> expectedErrorNames, IEnumerable <string> expectedErrorMessages)
        {
            #region Arrange
            await DeleteDbContent();

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

            dbContext.Genres.Add(new Domain.Genre
            {
                Name = "Name"
            });
            await dbContext.SaveChangesAsync();

            var newGenre = new AdminGenreModel
            {
                ID   = id,
                Name = name
            };
            #endregion

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

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

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

            var errorProp = actualGenre.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
        }
        public async Task Update_InvalidRequest_ReturnsJsonResponseAndNotFound(int id)
        {
            #region Arrange
            await DeleteDbContent();

            var client = GetHttpClient();

            var newGenre = new AdminGenreModel
            {
                ID   = id,
                Name = "New Name"
            };
            #endregion

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

            #endregion

            #region Assert
            Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
            #endregion
        }
        public bool IsInputValid(AdminGenreModel adminGenreModel)
        {
            bool isNameOk = !(adminGenreModel.Name == null || adminGenreModel.Name == "");

            return(isNameOk);
        }