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 }
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 }
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 }