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)); }
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)); }
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); }
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); }
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(), })); }
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); } }
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); }
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); }
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))); } }