Пример #1
0
        public async Task <IEnumerable <Movie> > GetMoviesByGenre(Genre genre)
        {
            GenreParser.Validate(genre);
            var allMovies = await GetAllMovies().ConfigureAwait(false);

            return(allMovies.Where(m => m.Genre == genre));
        }
        private static Task <HttpResponseMessage> WriteMoviesToResponse(HttpRequestMessage request, IEnumerable <global::DomainLayer.Managers.Models.Movie> movies)
        {
            IEnumerable <ImdbMovie> imdbMovies = null;

            var absolutePath = request.RequestUri.AbsolutePath;

            if (absolutePath.Contains("withcategories"))
            {
                imdbMovies = movies.Select(m => new ImdbMovie {
                    Title = m.Title, Category = GenreParser.ToString(m.Genre)
                });
            }
            else if (absolutePath.Contains("withimageurls"))
            {
                imdbMovies = movies.Select(m => new ImdbMovie {
                    Title = m.Title, ImageUrl = m.ImageUrl
                });
            }
            else if (absolutePath.Contains("withyears"))
            {
                imdbMovies = movies.Select(m => new ImdbMovie {
                    Title = m.Title, Year = m.Year
                });
            }

            var imdbMoviesJson      = JsonConvert.SerializeObject(imdbMovies);
            var httpResponseMessage = request.CreateResponse();

            httpResponseMessage.Content = new StringContent(imdbMoviesJson, Encoding.UTF8, "application/json");

            return(Task.FromResult(httpResponseMessage));
        }
        public async Task CreateMovie_WhenAnExceptionIsThrownInTheDomainLayer_ShouldThrow()
        {
            // Arrange
            var expectedMessage   = "Some Exception Message";
            var expectedException = new DuplicateMovieException(expectedMessage);
            var moviesController  = new MovieControllerForTest(expectedException);
            var movieResource     = new MovieResource
            {
                Title    = "Some Title",
                Genre    = GenreParser.ToString(Genre.Action),
                ImageUrl = "Some Url",
                Year     = 1900
            };

            // Act
            try
            {
                await moviesController.CreateMovie(movieResource);

                Assert.Fail("We were expecting an exception of type: DuplicateMovieException to be thrown, but no exception was thrown");
            }
            catch (DuplicateMovieException e)
            {
                // Assert
                Assert.AreEqual(expectedMessage, e.Message);
            }
        }
Пример #4
0
        public static void AssertMoviesAreEqual(IEnumerable <Movie> expectedMovies, IEnumerable <Movie> actualMovies)
        {
            var movieEqualityComparer = new MovieEqualityComparer();
            var moviesNotInActual     = expectedMovies.Except(actualMovies, movieEqualityComparer);
            var moviesNotInExpected   = actualMovies.Except(expectedMovies, movieEqualityComparer);

            if (!moviesNotInActual.Any() && !moviesNotInExpected.Any())
            {
                return;
            }

            var errorMessages = new StringBuilder();

            if (moviesNotInActual.Any())
            {
                errorMessages.AppendLine("The Following movies are in Expected Movies but Not in Actual Movies");
                foreach (var movie in moviesNotInActual)
                {
                    errorMessages.AppendLine($"Title: {movie.Title}, Genre: {GenreParser.ToString(movie.Genre)}, Year: {movie.Year}");
                }
            }

            if (moviesNotInExpected.Any())
            {
                errorMessages.AppendLine("The Following movies are in Actual Movies but Not in Expected Movies");
                foreach (var movie in moviesNotInExpected)
                {
                    errorMessages.AppendLine($"Title: {movie.Title}, Genre: {GenreParser.ToString(movie.Genre)}, Year: {movie.Year}");
                }
            }

            throw new AssertFailedException(errorMessages.ToString());
        }
        public async Task <IEnumerable <MovieResource> > GetMoviesByGenre(string genreAsString)
        {
            var genre  = GenreParser.Parse(genreAsString);
            var movies = await GetMoviesByGenre(genre);

            return(ModelToResourceMapper.MapToMovieResource(movies));
        }
Пример #6
0
        private static IEnumerable <Movie> JoinImdbMoviesMapToMovies(IEnumerable <ImdbMovie> moviesWithCategory, IEnumerable <ImdbMovie> moviesWithImgUrl, IEnumerable <ImdbMovie> moviesWithYear)
        {
            var allMovies = new List <Movie>();

            using (var moviesWithCategoryEnumerator = moviesWithCategory.GetEnumerator())
                using (var moviesWithImgUrlEnumerator = moviesWithImgUrl.GetEnumerator())
                    using (var moviesWithYearEnumerator = moviesWithYear.GetEnumerator())
                    {
                        while (moviesWithCategoryEnumerator.MoveNext())
                        {
                            var movieWithCategory = moviesWithCategoryEnumerator.Current;

                            moviesWithImgUrlEnumerator.MoveNext();
                            var movieWithImgUrl = moviesWithImgUrlEnumerator.Current;

                            moviesWithYearEnumerator.MoveNext();
                            var movieWithYear = moviesWithYearEnumerator.Current;

                            allMovies.Add(new Movie(
                                              title: movieWithCategory.Title,
                                              imageUrl: movieWithImgUrl.ImageUrl,
                                              genre: GenreParser.Parse(movieWithCategory.Category),
                                              year: movieWithYear.Year));
                        }
                    }

            return(allMovies);
        }
Пример #7
0
        public async Task <IEnumerable <MovieResource> > MoviesByGenre(string genreAsString)
        {
            var genre  = GenreParser.Parse(genreAsString);
            var movies = await GetMoviesByGenre(genre).ConfigureAwait(false);

            return(MapToMovieResource(movies));
        }
Пример #8
0
 private static IEnumerable <Movie> MapMovieResourceToMovie(IEnumerable <MovieResource> movieResources)
 {
     foreach (var movieResource in movieResources)
     {
         yield return(new Movie(movieResource.Name, GenreParser.Parse(movieResource.Genre), movieResource.Year, movieResource.ImageUrl));
     }
 }
        public IEnumerable <MovieResource> GetMoviesByGenre(string genreAsString)
        {
            var genre  = GenreParser.Parse(genreAsString);
            var movies = _domainFacade.GetMoviesByGenre(genre);

            return(MapToMovieResource(movies));
        }
 public static Movie MapToMovie(MovieResource movieResource)
 {
     return(new Movie(
                title: movieResource.Title,
                imageUrl: movieResource.ImageUrl,
                genre: GenreParser.Parse(movieResource.Genre),
                year: movieResource.Year));
 }
Пример #11
0
 private static IEnumerable <MovieResource> MapToMovieResource(IEnumerable <Movie> movies)
 {
     foreach (var movie in movies)
     {
         yield return(new MovieResource {
             Name = movie.Name, Genre = GenreParser.ToString(movie.Genre), ImageUrl = movie.ImageUrl, Year = movie.Year
         });
     }
 }
Пример #12
0
 private IEnumerable <ImdbMovieResource> MapMoviesToImdbMovies(IEnumerable <Movie> movies)
 {
     foreach (var movie in movies)
     {
         yield return(new ImdbMovieResource {
             Title = movie.Name, Category = GenreParser.ToString(movie.Genre), ImageUrl = movie.ImageUrl, Year = movie.Year
         });
     }
 }
 public static MovieResource MapToMovieResource(Movie movie)
 {
     return(new MovieResource
     {
         Title = movie.Title,
         ImageUrl = movie.ImageUrl,
         Genre = GenreParser.ToString(movie.Genre),
         Year = movie.Year
     });
 }
Пример #14
0
        private static string ValidateGenre(Genre genre)
        {
            var errorMessage = GenreParser.ValidationMessage(genre);

            if (errorMessage != null)
            {
                errorMessage += "\r\n";
            }

            return(errorMessage);
        }
Пример #15
0
 private static async IAsyncEnumerable <Movie> MapToMoviesStreaming(DbDataReader dbDataReader)
 {
     while (await dbDataReader.ReadAsync().ConfigureAwait(false))
     {
         yield return(new Movie(
                          title: (string)dbDataReader[0],
                          genre: GenreParser.Parse((string)dbDataReader[1]),
                          year: (int)dbDataReader[2],
                          imageUrl: (string)dbDataReader[3]));
     }
 }
Пример #16
0
 private static IEnumerable <Movie> MapMovieResourceToMovie(IEnumerable <ImdbMovieResource> moviesResource)
 {
     foreach (var movieResource in moviesResource)
     {
         yield return(new Movie(
                          movieResource.Title,
                          GenreParser.Parse(movieResource.Category),
                          movieResource.Year,
                          movieResource.ImageUrl));
     }
 }
Пример #17
0
        public async Task <IEnumerable <Movie> > GetMoviesByGenre(Genre genre)
        {
            GenreParser.Validate(genre);
            var moviesFromImdbTask            = ImdbServiceGateway.GetAllMovies();
            var moviesFromDbMatchingGenreTask = DataFacade.GetMovieByGenre(genre);
            await Task.WhenAll(moviesFromImdbTask, moviesFromDbMatchingGenreTask).ConfigureAwait(false);

            var moviesMatchingGenre = moviesFromDbMatchingGenreTask.Result.ToList();

            moviesMatchingGenre.AddRange(moviesFromImdbTask.Result.Where(m => m.Genre == genre));
            return(moviesMatchingGenre);
        }
Пример #18
0
 public static IEnumerable <ImdbMovie> ToImdbMovies(DbDataReader dbDataReader)
 {
     while (dbDataReader.Read())
     {
         yield return(new ImdbMovie(
                          title: (string)dbDataReader[0],
                          genre: GenreParser.Parse((string)dbDataReader[1]),
                          year: (int)dbDataReader[2],
                          imageUrl: (string)dbDataReader[3]
                          ));
     }
 }
        private static IEnumerable <SqlDataRecord> ConvertToSqlDataRecord(IEnumerable <Movie> movies)
        {
            var sqlDataRecord = new SqlDataRecord(s_sqlMetaDataCreateMovies);

            foreach (var movie in movies)
            {
                sqlDataRecord.SetString(0, movie.Title);
                sqlDataRecord.SetString(1, GenreParser.ToString(movie.Genre));
                sqlDataRecord.SetInt32(2, movie.Year);
                sqlDataRecord.SetString(3, movie.ImageUrl);
                yield return(sqlDataRecord);
            }
        }
Пример #20
0
        private static async Task <Movie> MapToMovie(DbDataReader dbDataReader)
        {
            if (await dbDataReader.ReadAsync().ConfigureAwait(false))
            {
                return(new Movie(
                           title: (string)dbDataReader[0],
                           genre: GenreParser.Parse((string)dbDataReader[1]),
                           year: (int)dbDataReader[2],
                           imageUrl: (string)dbDataReader[3]));
            }

            return(null);
        }
Пример #21
0
 public ActionResult <IEnumerable <MovieResource> > GetMoviesByGenre(string genreAsString)
 {
     try
     {
         var genre  = GenreParser.Parse(genreAsString);
         var movies = _domainFacade.GetMoviesByGenre(genre);
         return(new OkObjectResult(MapToMovieResource(movies)));
     }
     catch (Exception e)
     {
         return(new ExceptionActionResult(e));
     }
 }
Пример #22
0
        private static IEnumerable <Movie> MapToMovies(DbDataReader dbDataReader)
        {
            var movies = new List <Movie>();

            while (dbDataReader.Read())
            {
                movies.Add(new Movie(
                               title: (string)dbDataReader[0],
                               genre: GenreParser.Parse((string)dbDataReader[1]),
                               year: (int)dbDataReader[2],
                               imageUrl: (string)dbDataReader[3]));
            }

            return(movies);
        }
Пример #23
0
        private static async Task <IEnumerable <Movie> > MapToMovies(DbDataReader dbDataReader)
        {
            var movies = new List <Movie>();

            while (await dbDataReader.ReadAsync().ConfigureAwait(false))
            {
                movies.Add(new Movie(
                               title: (string)dbDataReader[0],
                               genre: GenreParser.Parse((string)dbDataReader[1]),
                               year: (int)dbDataReader[2],
                               imageUrl: (string)dbDataReader[3]));
            }

            return(movies);
        }
        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);
        }
        private static IEnumerable <Movie> MapToMvoies(IEnumerable <MovieResource> movieResources)
        {
            var movies = new List <Movie>();

            foreach (var movieResource in movieResources)
            {
                movies.Add(
                    new Movie(
                        movieResource.Title,
                        movieResource.ImageUrl,
                        GenreParser.Parse(movieResource.Genre),
                        movieResource.Year)
                    );
            }

            return(movies);
        }
Пример #26
0
        public static async Task <Movie> RetrieveMovie(string dbConnectionString, string title)
        {
            DbConnection dbConnection = null;
            DbCommand    dbCommand    = null;

            try
            {
                dbConnection = CreateDbConnection(dbConnectionString);
                await dbConnection.OpenAsync();

                dbCommand = dbConnection.CreateCommand();

                dbCommand.CommandType = CommandType.Text;
                dbCommand.CommandText = "SELECT	Title, Genre, Year, ImageUrl FROM dbo.MovieVw WHERE Title = @Title";

                AddDbParameter(dbCommand, "@Title", title, DbType.String, 50);
                var dbDataReader = await dbCommand.ExecuteReaderAsync();

                if (dbDataReader.Read())
                {
                    const int MovieTitleIndex    = 0;
                    const int MovieGenreIndex    = 1;
                    const int MovieYearIndex     = 2;
                    const int MovieImageUrlIndex = 3;

                    return(new Movie
                           (
                               title: (string)dbDataReader[MovieTitleIndex],
                               imageUrl: (string)dbDataReader[MovieImageUrlIndex],
                               genre: GenreParser.Parse((string)dbDataReader[MovieGenreIndex]),
                               year: (int)dbDataReader[MovieYearIndex]
                           ));
                }

                return(null);
            }
            finally
            {
                dbCommand?.Dispose();
                dbConnection.Dispose();
            }
        }
        public async Task CreateMovie_WhenProvidedWithAValidMovieResource_Succeeds()
        {
            // Arrange
            var movieResource = new MovieResource
            {
                Title    = "Some Title",
                Genre    = GenreParser.ToString(Genre.Action),
                ImageUrl = "Some Url",
                Year     = 1900
            };

            var moviesController = new MovieControllerForTest(movies: null);

            // Act
            await moviesController.CreateMovie(movieResource);

            // Assert
            // Nothing to Assert
            Assert.IsTrue(true);
        }
Пример #28
0
        public async Task GetMoviesByGenre_WhenProvidedWithAValidAndExistingGenre_ShouldReturnMoviesForGenre()
        {
            // Act
            var validGenre          = GenreParser.ToString(Genre.SciFi);
            var httpResponseMessage = await _httpClient.GetAsync($"api/movies/genre/{validGenre}");

            // Assert
            if (httpResponseMessage.StatusCode == HttpStatusCode.OK)
            {
                var actualMovieResource = await httpResponseMessage.Content.ReadAsAsync <IEnumerable <MovieResource> >();

                Assert.IsTrue(actualMovieResource.All(m => m.Genre == validGenre));
            }
            else
            {
                var httpContent = await httpResponseMessage.Content.ReadAsStringAsync();

                Assert.Fail($"Reason Phrase: {httpResponseMessage.ReasonPhrase} with Content: {httpContent}");
            }
        }
        public static DbCommand CreateCommandForGetMoviesByGenre(DbConnection dbConnection, Genre genre)
        {
            var dbCommand = dbConnection.CreateCommand();

            dbCommand.CommandType = CommandType.StoredProcedure;
            dbCommand.CommandText = "dbo.GetMoviesByGenre";
            AddReturnValueParameter(dbCommand);
            AddCommandParameter(dbCommand, "@Genre", ParameterDirection.Input, DbType.String, GenreParser.ToString(genre), 50);
            return(dbCommand);
        }
        public static DbCommand CreateCommandForCreateMovie(DbConnection dbConnection, DbTransaction dbTransaction, Movie movie)
        {
            var dbCommand = dbConnection.CreateCommand();

            dbCommand.CommandText = "dbo.CreateMovie";
            dbCommand.CommandType = CommandType.StoredProcedure;
            dbCommand.Transaction = dbTransaction;
            AddReturnValueParameter(dbCommand);
            AddCommandParameter(dbCommand, "@Title", ParameterDirection.Input, DbType.String, movie.Title, 50);
            AddCommandParameter(dbCommand, "@Genre", ParameterDirection.Input, DbType.String, GenreParser.ToString(movie.Genre), 50);
            AddCommandParameter(dbCommand, "@Year", ParameterDirection.Input, DbType.Int32, movie.Year, 0);
            AddCommandParameter(dbCommand, "@ImageUrl", ParameterDirection.Input, DbType.String, movie.ImageUrl, 200);
            return(dbCommand);
        }