public async Task GetMoviesByGenre_WhenCalledWithValidGenre_ShouldReturnMoviesFilteredByGenre() { // Arrange var(domainFacade, testMediator) = CreateDomainFacade(); try { var randomMovies = new List <Movie>(); var moviesFromService = RandomMovieGenerator.GenerateRandomMovies(50); testMediator.MoviesForGetAllMovies = moviesFromService; randomMovies.AddRange(moviesFromService); randomMovies.AddRange(moviesInDb); var expectGenre = Genre.Comedy; var expectedMovies = randomMovies.Where(m => m.Genre == expectGenre).ToList(); // Act var actualMovies = await domainFacade.GetMoviesByGenre(expectGenre); // Assert MovieAssertions.AssertMoviesAreEqual(expectedMovies, actualMovies); } finally { domainFacade.Dispose(); } }
public async Task CreateMovie_WhenDuplicateMovieIsCreated_ShouldThrow() { // Arrange var(domainFacade, _) = CreateDomainFacade(); var expectedMovie = RandomMovieGenerator.GenerateRandomMovies(1).Single(); try { // Act await domainFacade.CreateMovie(expectedMovie); await domainFacade.CreateMovie(expectedMovie); Assert.Fail("We were expecting a DuplicateMovieException exception to be thrown, but no exception was thrown"); } catch (DuplicateMovieException e) { // Assert StringAssert.Contains(e.Message, $"Title: {expectedMovie.Title} already exists"); } finally { domainFacade.Dispose(); } }
public async Task GetMovies_WhenThereAreNoExceptions_ReturnsAllMovies() { // Arrange var expectedMovies = RandomMovieGenerator.GenerateRandomMovies(50); var moviesController = new MovieControllerForTest(expectedMovies); // Act var actualMovieResources = await moviesController.GetMovies(); // Assert var actualMovies = MapToMvoies(actualMovieResources); MovieAssertions.AssertMoviesAreEqual(expectedMovies, actualMovies); }
public async Task CreateMovie_WhenProvidedWithAValidMovieResource_ShouldCreateMovie() { // Arrange var movie = RandomMovieGenerator.GenerateRandomMovies(1).Single(); var movieResourceJson = $"{{\"title\": \"{movie.Title}\", \"ImageUrl\": \"{movie.ImageUrl}\", \"Genre\": \"{movie.Genre}\", \"Year\": {movie.Year} }}"; var movieHttpContent = new StringContent(movieResourceJson, Encoding.UTF8, "application/json"); // Act var httpResponseMessage = await _httpClient.PostAsync("api/movies", movieHttpContent); // Assert Assert.AreEqual(HttpStatusCode.Created, httpResponseMessage.StatusCode, "The Response content is: " + await httpResponseMessage.Content.ReadAsStringAsync() + $"The Movie that was used is: Title: {movie.Title}, ImageUrl: {movie.ImageUrl}, Genre: {movie.Genre}, Year: {movie.Year}"); }
public async Task GetMoviesByGenre_WhenProvidedWithAValidGenre_ReturnsMoviesByGenre() { // Arrange //// It is not the controller's responsibility to filter by genre /// or ensure all movies being returned have the genre specified var expectedMovies = RandomMovieGenerator.GenerateRandomMovies(50); var moviesController = new MovieControllerForTest(expectedMovies); var validGenreAsString = GenreParser.ToString(Genre.SciFi); // Act var actualMovieResources = await moviesController.GetMoviesByGenre(validGenreAsString); // Assert var actualMovies = MapToMvoies(actualMovieResources); MovieAssertions.AssertMoviesAreEqual(expectedMovies, actualMovies); }
public async Task CreateMovie_WhenCalledWithAValidMovieNonExistent_Succeed() { // Arrange var(domainFacade, _) = CreateDomainFacade(); var expectedMovie = RandomMovieGenerator.GenerateRandomMovies(1).Single(); try { // Act await domainFacade.CreateMovie(expectedMovie); // Assert var actualMovie = await MovieTestDataGenerator.RetrieveMovie(dbConnectionString, expectedMovie.Title); MovieAssertions.AssertMoviesAreEqual(new[] { expectedMovie }, new[] { actualMovie }); } finally { domainFacade.Dispose(); } }
public async Task CreateMovie_WhenProvidedWithADuplicateMovieResource_ShouldThrow() { // Arrange var movie = RandomMovieGenerator.GenerateRandomMovies(1).Single(); var movieResourceJson = $"{{\"title\": \"{movie.Title}\", \"ImageUrl\": \"{movie.ImageUrl}\", \"Genre\": \"{movie.Genre}\", \"Year\": {movie.Year} }}"; var movieHttpContent = new StringContent(movieResourceJson, Encoding.UTF8, "application/json"); await _httpClient.PostAsync("api/movies", movieHttpContent); // Act var httpResponseMessage = await _httpClient.PostAsync("api/movies", movieHttpContent); // Assert var contentString = await httpResponseMessage.Content.ReadAsStringAsync(); Assert.AreEqual(HttpStatusCode.BadRequest, httpResponseMessage.StatusCode, "The Response content is: " + contentString); var duplicateMovieException = new DuplicateMovieException(); Assert.AreEqual(duplicateMovieException.Reason, httpResponseMessage.ReasonPhrase, "The Response content is: " + contentString); StringAssert.Contains(contentString, movie.Title); }
public async Task GetAllMovies_WhenCalled_ReturnsAllMovies() { // Arrange var(domainFacade, testMediator) = CreateDomainFacade(); try { var moviesFromService = RandomMovieGenerator.GenerateRandomMovies(50); testMediator.MoviesForGetAllMovies = moviesFromService; var expectedMovies = new List <Movie>(); expectedMovies.AddRange(moviesFromService); expectedMovies.AddRange(moviesInDb); // Act var actualMovies = await domainFacade.GetAllMovies(); // Assert MovieAssertions.AssertMoviesAreEqual(expectedMovies, actualMovies); } finally { domainFacade.Dispose(); } }