示例#1
0
        public async Task GetAllReviewsFailureTest(string movieId)
        {
            // Arrange
            var mockReviewRepository = new Mock <IReviewRepository>();

            mockReviewRepository.Setup(x => x.GetAsync(It.IsAny <Expression <Func <ReviewEntity, bool> > >()))
            .Returns(Task.FromResult(ReviewCollection.Where(x => string.Equals(x.MovieId, movieId, StringComparison.OrdinalIgnoreCase))));

            var mockMovieRepository = new Mock <IMovieRepository>();

            mockMovieRepository.Setup(x => x.GetAsync(It.IsAny <Expression <Func <MovieEntity, bool> > >()))
            .Returns(Task.FromResult(Enumerable.Empty <MovieEntity>()));

            var mockUserRepository = new Mock <IUserProfileRepository>();

            mockUserRepository.Setup(x => x.GetAsync(It.IsAny <Expression <Func <UserProfileEntity, bool> > >()))
            .Returns((Expression <Func <UserProfileEntity, bool> > x) =>
                     Task.FromResult(UserCollection.AsQueryable <UserProfileEntity>().Where(x).AsEnumerable()));

            var unitOfWork = new Mock <IUnitOfWork>();

            unitOfWork.SetupGet(x => x.ReviewRepository).Returns(mockReviewRepository.Object);
            unitOfWork.SetupGet(x => x.UserProfileRepository).Returns(mockUserRepository.Object);
            unitOfWork.SetupGet(x => x.MovieRepository).Returns(mockMovieRepository.Object);

            // Act
            var reviewService = new ReviewService(unitOfWork.Object);
            var response      = await Assert.ThrowsAsync <ArgumentException>(() => reviewService.GetAllReviewsAsync(movieId));
        }
示例#2
0
        public async Task GetMovieFailureTest(string movieId, Exception exception)
        {
            var mockMovieRepository = new Mock <IMovieRepository>();

            mockMovieRepository.Setup(x => x.GetAsync(It.IsAny <Expression <Func <MovieEntity, bool> > >()))
            .Returns(Task.FromResult(EntityCollection.Where(x => x.Id == movieId)));

            var mockReviewRepository = new Mock <IReviewRepository>();

            mockReviewRepository.Setup(x => x.GetAsync(It.IsAny <Expression <Func <ReviewEntity, bool> > >()))
            .Returns(Task.FromResult(ReviewCollection.Where(x => x.MovieId == movieId)));

            var mockUserRepository = new Mock <IUserProfileRepository>();

            mockUserRepository.Setup(x => x.GetAsync(It.IsAny <Expression <Func <UserProfileEntity, bool> > >()))
            .Returns((Expression <Func <UserProfileEntity, bool> > x) =>
                     Task.FromResult(UserCollection.AsQueryable <UserProfileEntity>().Where(x).AsEnumerable()));


            var unitOfWork = new Mock <IUnitOfWork>();

            unitOfWork.SetupGet(x => x.MovieRepository).Returns(mockMovieRepository.Object);
            unitOfWork.SetupGet(x => x.UserProfileRepository).Returns(mockUserRepository.Object);
            unitOfWork.SetupGet(x => x.ReviewRepository).Returns(mockReviewRepository.Object);

            // Act
            var movieService = new MovieService(unitOfWork.Object);
            await Assert.ThrowsAsync(exception.GetType(), () => movieService.GetOne(movieId));
        }
示例#3
0
        internal static MovieReviewDto GetReviewsByUser(string userId)
        {
            var response         = new MovieReviewDto();
            var reviewCollection = ReviewCollection.Where(x => string.Equals(x.AuthorId, userId)).OrderBy(x => x.CreatedOn);

            return(response);
        }
示例#4
0
        internal static MovieReviewDto GetReviews(string movieId)
        {
            var response         = new MovieReviewDto();
            var reviewCollection = ReviewCollection.Where(x => string.Equals(x.MovieId, movieId));
            var userCollection   = UserCollection.Where(x => reviewCollection.Select(c => c.AuthorId).Contains(x.Id));
            var movie            = new MovieDto(movieId, string.Empty);
            var reviews          = reviewCollection.Select(x => new ReviewDto
            {
                Description = x.ReviewDescription,
                DownvotedBy = x.DownVotedBy,
                UpvotedBy   = x.UpVotedBy,
                Rating      = x.Rating,
                Id          = x.Id,
                Title       = x.ReviewTitle,
                Author      = userCollection.Where(c => string.Equals(x.AuthorId, c.Id)).Select(c => new UserDto
                {
                    DisplayName = c.DisplayName,
                    Id          = c.Id,
                    UserName    = c.UserName
                }).Single(),
                Movie = movie
            });

            response = response with
            {
                Reviews = reviews
            };

            return(response);
        }
示例#5
0
 internal static IEnumerable <MovieEntity> GetMovies(string movieTitle)
 {
     return(MovieCollection.Where(c => c.Title.Contains(movieTitle, StringComparison.OrdinalIgnoreCase))
            .Select(movie => new MovieEntity
     {
         Id = movie.Id,
         Director = movie.Director,
         PlotSummary = movie.PlotSummary,
         Language = movie.Language,
         Title = movie.Title,
         Genre = movie.Genre,
         ReleaseDate = movie.ReleaseDate,
         CastAndCrew = movie.CastAndCrew,
         Rating = ReviewCollection.Where(review => review.MovieId == movie.Id).Any()?ReviewCollection.Where(review => review.MovieId == movie.Id).Average(review => review.Rating):0,
         TotalReviews = ReviewCollection.Where(review => review.MovieId == movie.Id).Count(),
     }));
 }
示例#6
0
        public async Task GetAllReviewsSuccessTest(string movieId, MovieReviewDto expectedResult)
        {
            // Arrange
            var mockReviewRepository = new Mock <IReviewRepository>();

            mockReviewRepository.Setup(x => x.GetAsync(It.IsAny <Expression <Func <ReviewEntity, bool> > >()))
            .Returns(Task.FromResult(ReviewCollection.Where(x => string.Equals(x.MovieId, movieId, StringComparison.OrdinalIgnoreCase))));

            var mockMovieRepository = new Mock <IMovieRepository>();

            mockMovieRepository.Setup(x => x.GetAsync(It.IsAny <Expression <Func <MovieEntity, bool> > >()))
            .Returns(Task.FromResult(MovieCollection.Where(x => string.Equals(x.Id, movieId, StringComparison.OrdinalIgnoreCase))));

            var mockUserRepository = new Mock <IUserProfileRepository>();

            mockUserRepository.Setup(x => x.GetAsync(It.IsAny <Expression <Func <UserProfileEntity, bool> > >()))
            .Returns((Expression <Func <UserProfileEntity, bool> > x) =>
                     Task.FromResult(UserCollection.AsQueryable <UserProfileEntity>().Where(x).AsEnumerable()));

            var unitOfWork = new Mock <IUnitOfWork>();

            unitOfWork.SetupGet(x => x.ReviewRepository).Returns(mockReviewRepository.Object);
            unitOfWork.SetupGet(x => x.MovieRepository).Returns(mockMovieRepository.Object);
            unitOfWork.SetupGet(x => x.UserProfileRepository).Returns(mockUserRepository.Object);

            // Act
            var reviewService = new ReviewService(unitOfWork.Object);
            var response      = await reviewService.GetAllReviewsAsync(movieId);

            // Assert
            Assert.Equal(expectedResult.Reviews.Count(), response.Reviews.Count());

            foreach (var(expected, actual) in expectedResult.Reviews.OrderBy(x => x.Id).Zip(response.Reviews.OrderBy(x => x.Id)))
            {
                Assert.Equal(expected.Title, actual.Title);
                Assert.Equal(expected.Description, actual.Description);
                Assert.Equal(expected.Id, actual.Id);
                Assert.Equal(expected.Rating, actual.Rating);
                Assert.Equal(expected.UpvotedBy.OrderBy(x => x), actual.UpvotedBy.OrderBy(x => x));
                Assert.Equal(expected.DownvotedBy.OrderBy(x => x), actual.DownvotedBy.OrderBy(x => x));

                Assert.Equal(expected.Movie.Id, actual.Movie.Id);
                Assert.Equal(expected.Movie.Title, actual.Movie.Title);
            }
        }
示例#7
0
        internal static MovieEntity GetMovie(string movieId)
        {
            var reviews     = ReviewCollection.Where(review => review.MovieId == movieId);
            var movieReview = MovieCollection.Where(c => c.Id == movieId)
                              .Select(movie => new MovieEntity
            {
                Id           = movie.Id,
                Director     = movie.Director,
                PlotSummary  = movie.PlotSummary,
                Language     = movie.Language,
                Title        = movie.Title,
                ReleaseDate  = movie.ReleaseDate,
                CastAndCrew  = movie.CastAndCrew,
                TotalReviews = reviews.Count(),
                Rating       = reviews.Any() ? reviews.Average(x => x.Rating):0
            }).Single();

            return(movieReview);
        }
示例#8
0
        public async Task GetMovieSuccessTest(string movieId, MovieEntity expectedResult)
        {
            // Arrange
            var mockMovieRepository = new Mock <IMovieRepository>();

            mockMovieRepository.Setup(x => x.GetAsync(It.IsAny <Expression <Func <MovieEntity, bool> > >()))
            .Returns(Task.FromResult(EntityCollection.Where(x => x.Id == movieId)));

            var mockReviewRepository = new Mock <IReviewRepository>();

            mockReviewRepository.Setup(x => x.GetAsync(It.IsAny <Expression <Func <ReviewEntity, bool> > >()))
            .Returns(Task.FromResult(ReviewCollection.Where(x => x.MovieId == movieId)));

            var mockUserRepository = new Mock <IUserProfileRepository>();

            mockUserRepository.Setup(x => x.GetAsync(It.IsAny <Expression <Func <UserProfileEntity, bool> > >()))
            .Returns((Expression <Func <UserProfileEntity, bool> > x) =>
                     Task.FromResult(UserCollection.AsQueryable <UserProfileEntity>().Where(x).AsEnumerable()));

            var unitOfWork = new Mock <IUnitOfWork>();

            unitOfWork.SetupGet(x => x.MovieRepository).Returns(mockMovieRepository.Object);
            unitOfWork.SetupGet(x => x.UserProfileRepository).Returns(mockUserRepository.Object);
            unitOfWork.SetupGet(x => x.ReviewRepository).Returns(mockReviewRepository.Object);

            // Act
            var movieService = new MovieService(unitOfWork.Object);
            var result       = await movieService.GetOne(movieId);

            // Assert
            Assert.Equal(expectedResult.Id, result.Id);
            Assert.Equal(expectedResult.Title, result.Title);
            Assert.Equal(expectedResult.PlotSummary, result.PlotSummary);
            Assert.Equal(expectedResult.Director, result.Director);
            Assert.Equal(expectedResult.CastAndCrew, result.CastAndCrew);
            Assert.Equal(expectedResult.ReleaseDate, result.ReleaseDate);
            Assert.Equal(expectedResult.Language, result.Language);
            Assert.Equal(expectedResult.TotalReviews, result.TotalReviews);
            Assert.Equal(expectedResult.Rating, result.Rating);
        }
示例#9
0
        public async Task SearchMovieSuccessTest(string movieTitle, int maxCount, IEnumerable <MovieEntity> expected)
        {
            var mockMovieRepository = new Mock <IMovieRepository>();

            mockMovieRepository.Setup(x => x.GetAsync(It.IsAny <Expression <Func <MovieEntity, bool> > >()))
            .Returns(Task.FromResult(EntityCollection.Where(x => (x.Title.ToLower().Contains(movieTitle.ToLower()) ||
                                                                  x.Title.ToLower().StartsWith(movieTitle.ToLower())))));

            var mockReviewRepository = new Mock <IReviewRepository>();

            mockReviewRepository.Setup(x => x.GetAsync(It.IsAny <Expression <Func <ReviewEntity, bool> > >()))
            .Returns((Expression <Func <ReviewEntity, bool> > a) => Task.FromResult(ReviewCollection.Where(a.Compile())));

            var mockUnitOfWork = new Mock <IUnitOfWork>();

            mockUnitOfWork.SetupGet(x => x.MovieRepository).Returns(mockMovieRepository.Object);
            mockUnitOfWork.SetupGet(x => x.ReviewRepository).Returns(mockReviewRepository.Object);
            var movieService = new MovieService(mockUnitOfWork.Object);
            var result       = await movieService.SearchMovie(movieTitle, maxCount);

            Assert.Equal(expected.Count(), result.Count());

            foreach (var movie in result)
            {
                var expectedMovie = expected.Single(c => c.Id.Equals(movie.Id));
                Assert.Equal(expectedMovie.Title, movie.Title);
                Assert.Equal(expectedMovie.PlotSummary, movie.PlotSummary);
                Assert.Equal(expectedMovie.Language, movie.Language);
                Assert.Equal(expectedMovie.Director, movie.Director);
                Assert.Equal(expectedMovie.Genre, movie.Genre);
                Assert.Equal(expectedMovie.ReleaseDate, movie.ReleaseDate);
                Assert.Equal(expectedMovie.Rating, movie.Rating);
                Assert.Equal(expectedMovie.TotalReviews, movie.TotalReviews);
                Assert.True(expectedMovie.CastAndCrew.OrderBy(x => x).SequenceEqual(movie.CastAndCrew.OrderBy(x => x)));
            }
        }