Beispiel #1
0
        public async Task <MovieModel> Create(AdminMovieModel adminMovieModel)
        {
            if (_movieValidation.IsInputValid(adminMovieModel))
            {
                var language = await _applicationDbContext.Languages.FirstOrDefaultAsync(x => x.ID == adminMovieModel.LanguageID);

                if (language != null)
                {
                    var movie = new Domain.Movie
                    {
                        Description = adminMovieModel.Description,
                        LanguageID  = adminMovieModel.LanguageID,
                        Length      = adminMovieModel.Length,
                        ReleaseDate = adminMovieModel.ReleaseDate.ToString("dd-MM-yyyy"),
                        Name        = adminMovieModel.Name
                    };

                    _applicationDbContext.Movies.Add(movie);
                    await _applicationDbContext.SaveChangesAsync();

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

                return(new MovieModel());
            }

            return(null);
        }
        public async Task Update_InvalidRequest_ReturnsJsonResponseAndNotFound(int id)
        {
            #region Arrange
            await DeleteDbContent();

            var client = GetHttpClient();

            var newMovie = new AdminMovieModel
            {
                ID          = id,
                Description = "Description",
                LanguageID  = 1,
                Length      = 104,
                ReleaseDate = DateTime.Parse("04-10-2010"),
                Name        = "Name"
            };
            #endregion

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

            #endregion

            #region Assert
            Assert.Equal(HttpStatusCode.NotFound, response.StatusCode);
            #endregion
        }
Beispiel #3
0
        public async Task <MovieModel> Update(AdminMovieModel adminMovieModel)
        {
            var movie = _applicationDbContext.Movies.FirstOrDefault(x => x.ID == adminMovieModel.ID);

            if (movie != null && _movieValidation.IsInputValid(adminMovieModel))
            {
                var language = await _applicationDbContext.Languages.FirstOrDefaultAsync(x => x.ID == adminMovieModel.LanguageID);

                if (language != null)
                {
                    movie.Description = adminMovieModel.Description;
                    movie.Length      = adminMovieModel.Length;
                    movie.LanguageID  = adminMovieModel.LanguageID;
                    movie.ReleaseDate = adminMovieModel.ReleaseDate.ToString("dd-MM-yyyy");
                    movie.Name        = adminMovieModel.Name;

                    await _applicationDbContext.SaveChangesAsync();

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

                return(new MovieModel());
            }

            return(null);
        }
        public async Task Create_InvalidInput_ReturnsNull(string description, int languageID, int length, string releaseDate, string title)
        {
            #region Arrange
            var dbContext = new ApplicationDbContext(_dbContextOptions);
            await dbContext.Database.EnsureDeletedAsync();

            var language = new Domain.Language
            {
                Name = "Name"
            };
            dbContext.Languages.Add(language);

            await dbContext.SaveChangesAsync();

            var newMovie = new AdminMovieModel
            {
                Description = description,
                LanguageID  = languageID,
                Length      = length,
                ReleaseDate = DateTime.Parse(releaseDate),
                Name        = title
            };

            var appMovie = new Movie(dbContext);
            #endregion

            #region Act
            var actualMovie = await appMovie.Create(newMovie);

            #endregion

            #region Assert
            Assert.Null(actualMovie);
            #endregion
        }
        public async Task Create_ValidRequest_ReturnsJsonResponseAndCreated(string description, int languageID, int length, string releaseDate, string name)
        {
            #region Arrange
            await DeleteDbContent();

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

            var language = new Domain.Language
            {
                Name = "Name"
            };
            dbContext.Languages.Add(language);
            await dbContext.SaveChangesAsync();

            var newMovie = new AdminMovieModel
            {
                Description = description,
                LanguageID  = languageID,
                Length      = length,
                ReleaseDate = DateTime.Parse(releaseDate),
                Name        = name
            };

            var expectedMovie = new MovieModel
            {
                ID          = 1,
                Description = description,
                Language    = new LanguageModel
                {
                    ID   = language.ID,
                    Name = language.Name
                },
                Length      = length,
                ReleaseDate = releaseDate,
                Name        = name
            };
            #endregion

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

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

            var actualMovie = await JsonSerializer.DeserializeAsync <MovieModel>(responseBody);

            #endregion

            #region Assert
            Assert.Equal(HttpStatusCode.Created, response.StatusCode);
            Assert.Equal(expectedMovie.ID, actualMovie.ID);
            Assert.Equal(expectedMovie.Description, actualMovie.Description);
            Assert.Equal(expectedMovie.Language.ID, actualMovie.Language.ID);
            Assert.Equal(expectedMovie.Language.Name, actualMovie.Language.Name);
            Assert.Equal(expectedMovie.Length, actualMovie.Length);
            Assert.Equal(expectedMovie.ReleaseDate, actualMovie.ReleaseDate);
            Assert.Equal(expectedMovie.Name, actualMovie.Name);
            #endregion
        }
        public async Task Update_InvalidRequest_ReturnsJsonResponseAndBadRequestWithErrors(int id, string description, int languageID, int length, string releaseDate, string name, IEnumerable <string> expectedErrorNames, IEnumerable <string> expectedErrorMessages)
        {
            #region Arrange
            await DeleteDbContent();

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

            var language = new Domain.Language {
                Name = "Name"
            };
            dbContext.Languages.Add(language);
            dbContext.Languages.Add(new Domain.Language {
                Name = "New Name"
            });
            await dbContext.SaveChangesAsync();

            var movie = new Domain.Movie
            {
                Description = "Description",
                LanguageID  = language.ID,
                Length      = 104,
                ReleaseDate = "04-10-2010",
                Name        = "Name"
            };
            dbContext.Movies.Add(movie);
            await dbContext.SaveChangesAsync();

            var newMovie = new AdminMovieModel
            {
                Description = description,
                LanguageID  = languageID,
                Length      = length,
                ReleaseDate = DateTime.Parse(releaseDate),
                Name        = name
            };
            #endregion

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

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

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

            var errorProp = actualMovie.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
        }
Beispiel #7
0
        public bool IsInputValid(AdminMovieModel adminMovieModel)
        {
            bool isDescriptionOk = !(adminMovieModel.Description == null || adminMovieModel.Description == "");
            bool isLanguageOk    = adminMovieModel.LanguageID != 0;
            bool isLengthOk      = adminMovieModel.Length != 0;
            bool isReleaseDateOk = adminMovieModel.ReleaseDate != DateTime.Parse("1-1-0001 00:00:00");
            bool isTitleOk       = !(adminMovieModel.Name == null || adminMovieModel.Name == "");

            return(isDescriptionOk && isLanguageOk && isLengthOk && isReleaseDateOk && isTitleOk);
        }
        public async Task Create_ValidInput_ReturnsCorrectData(string description, int languageID, int length, string releaseDate, string title)
        {
            #region Arrange
            var dbContext = new ApplicationDbContext(_dbContextOptions);
            await dbContext.Database.EnsureDeletedAsync();

            var language = new Domain.Language
            {
                Name = "Name"
            };
            dbContext.Languages.Add(language);
            await dbContext.SaveChangesAsync();

            var newMovie = new AdminMovieModel
            {
                ID          = 1,
                Description = description,
                LanguageID  = languageID,
                Length      = length,
                ReleaseDate = DateTime.Parse(releaseDate),
                Name        = title
            };

            var expectedMovie = new MovieModel
            {
                ID          = 1,
                Description = description,
                Language    = new LanguageModel {
                    ID   = languageID,
                    Name = language.Name
                },
                Length      = length,
                ReleaseDate = releaseDate,
                Name        = title
            };

            var appMovie = new Movie(dbContext);
            #endregion

            #region Act
            var actualMovie = await appMovie.Create(newMovie);

            #endregion

            #region Assert
            Assert.Equal(expectedMovie.ID, actualMovie.ID);
            Assert.Equal(expectedMovie.Description, actualMovie.Description);
            Assert.Equal(expectedMovie.Language.ID, actualMovie.Language.ID);
            Assert.Equal(expectedMovie.Language.Name, actualMovie.Language.Name);
            Assert.Equal(expectedMovie.Length, actualMovie.Length);
            Assert.Equal(expectedMovie.ReleaseDate, actualMovie.ReleaseDate);
            Assert.Equal(expectedMovie.Name, actualMovie.Name);
            #endregion
        }
        public async Task <IActionResult> Create([FromBody] AdminMovieModel adminMovieModel)
        {
            var result = await movie.Create(adminMovieModel);

            if (result != null)
            {
                if (result.ID > 0)
                {
                    return(CreatedAtAction(nameof(Read), new { id = result.ID }, result));
                }

                ModelState.AddModelError("LanguageID", "Does not exist.");
                return(NotFound(new ValidationProblemDetails(ModelState)));
            }

            return(StatusCode((int)HttpStatusCode.InternalServerError));
        }
        public async Task <IActionResult> Update([FromBody] AdminMovieModel adminMovieModel)
        {
            var result = await movie.Update(adminMovieModel);

            if (result != null)
            {
                if (result.ID > 0)
                {
                    return(Ok(result));
                }

                ModelState.AddModelError("LanguageID", "Does not exist.");
                return(NotFound(new ValidationProblemDetails(ModelState)));
            }

            return(NotFound());
        }
        public async Task Update_LanguageDoesNotExist_ReturnsEmptyMovieModel(int id, string description, int languageID, int length, string releaseDate, string title, int expectedID)
        {
            #region Arrange
            var dbContext = new ApplicationDbContext(_dbContextOptions);
            await dbContext.Database.EnsureDeletedAsync();

            var language = new Domain.Language
            {
                Name = "Name"
            };
            dbContext.Languages.Add(language);

            var movie = new Domain.Movie
            {
                Description = "Description",
                LanguageID  = language.ID,
                Length      = 104,
                ReleaseDate = "04-10-2010",
                Name        = "Title"
            };
            dbContext.Movies.Add(movie);
            await dbContext.SaveChangesAsync();

            var newMovie = new AdminMovieModel
            {
                ID          = id,
                Description = description,
                LanguageID  = languageID,
                Length      = length,
                ReleaseDate = DateTime.Parse(releaseDate),
                Name        = title
            };

            var appMovie = new Movie(dbContext);
            #endregion

            #region Act
            var actualMovie = await appMovie.Update(newMovie);

            #endregion

            #region Assert
            Assert.NotNull(actualMovie);
            Assert.Equal(expectedID, actualMovie.ID);
            #endregion
        }
        public async Task Create_LanguageDoesNotExist_ReturnsJsonResponseAndNotFoundWithErrors(string description, int languageID, int length, string releaseDate, string name, IEnumerable <string> expectedErrorNames, IEnumerable <string> expectedErrorValues)
        {
            #region Arrange
            await DeleteDbContent();

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

            var language = new Domain.Language
            {
                Name = "Name"
            };
            dbContext.Languages.Add(language);

            await dbContext.SaveChangesAsync();

            var newMovie = new AdminMovieModel
            {
                Description = description,
                LanguageID  = languageID,
                Length      = length,
                ReleaseDate = DateTime.Parse(releaseDate),
                Name        = name
            };
            #endregion

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

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

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

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

            #region Assert
            Assert.Equal(HttpStatusCode.NotFound, 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
        }