public async Task PromoteUserShouldReturnFalseIfUserIsNotInRegularUserRole()
        {
            var user = new MovieDatabaseUser
            {
                AvatarLink = "avatar",
                Email      = "*****@*****.**",
                UserName   = "******",
            };

            var adminRole = new IdentityRole {
                Name = "Admin", NormalizedName = "ADMIN"
            };

            await dbContext.Users.AddAsync(user);

            await dbContext.Roles.AddAsync(adminRole);

            await dbContext.SaveChangesAsync();

            var adminRoleId = adminRole.Id;

            mockUserManager.Setup(x => x.IsInRoleAsync(user, "Admin")).ReturnsAsync(true);

            var userService = new UserService(dbContext, mockUserManager.Object);

            var result = await userService.PromoteUserAsync(new PromoteUserInputModel { Name = "user1" });

            Assert.False(result);
        }
        public async Task DeleteSeasonReviewShouldReturnFalseIfReviewDoesntExist()
        {
            var user1 = new MovieDatabaseUser
            {
                UserName   = "******",
                Email      = "*****@*****.**",
                AvatarLink = "avatar",
            };
            var season1 = new Season
            {
                SeasonNumber     = 1,
                Episodes         = 10,
                LengthPerEpisode = 29,
                ReleaseDate      = DateTime.Parse("28 October 2016"),
            };

            await dbContext.Seasons.AddAsync(season1);

            await dbContext.SaveChangesAsync();

            var seasonId = season1.Id;
            var userId   = user1.Id;

            var reviewService = new ReviewService(dbContext, mapper);

            var actualResult = await reviewService.DeleteSeasonReviewAsync(userId, seasonId);

            Assert.False(actualResult);
            Assert.True(dbContext.SeasonReviews.Count() == 0);
        }
        public async Task CreateMovieReviewShouldReturnFalseIfReviewAlreadyExists()
        {
            var user1 = new MovieDatabaseUser
            {
                UserName   = "******",
                Email      = "*****@*****.**",
                AvatarLink = "avatar",
            };
            var artist1 = new Artist
            {
                FullName  = "name1",
                Biography = "biography1",
                BirthDate = DateTime.Parse("25 July 2019"),
                PhotoLink = "photo1",
            };
            var movie1 = new Movie
            {
                Name        = "movie1",
                ReleaseDate = DateTime.Parse("24 July 2019"),
                Description = "description1",
                Length      = 160,
                Genre       = new Genre {
                    Name = "genre1"
                },
                Director       = artist1,
                CoverImageLink = "cover1",
                TrailerLink    = "trailer1",
            };
            var movieReview1 = new MovieReview
            {
                Movie   = movie1,
                User    = user1,
                Content = "content1",
                Rating  = 8,
                Date    = DateTime.Parse("27 July 2019"),
            };
            await dbContext.Movies.AddAsync(movie1);

            await dbContext.MovieReviews.AddAsync(movieReview1);

            await dbContext.SaveChangesAsync();

            var movieId = movie1.Id;
            var userId  = user1.Id;

            var reviewService = new ReviewService(dbContext, mapper);

            var input = new CreateReviewInputModel
            {
                Id      = movieId,
                Content = "content1",
                Rating  = 8,
            };

            var actualResult = await reviewService.CreateMovieReviewAsync(userId, input);

            Assert.False(actualResult);
            Assert.True(dbContext.MovieReviews.Count() == 1);
        }
        public async Task MovieIsInUserWatchlistShouldReturnCorrectResult()
        {
            var user1 = new MovieDatabaseUser
            {
                UserName   = "******",
                Email      = "*****@*****.**",
                AvatarLink = "avatar",
            };
            var artist1 = new Artist
            {
                FullName  = "name1",
                Biography = "biography1",
                BirthDate = DateTime.Parse("25 July 2019"),
                PhotoLink = "photo1",
            };
            var movie1 = new Movie
            {
                Name        = "movie1",
                ReleaseDate = DateTime.Parse("24 July 2019"),
                Description = "description1",
                Length      = 160,
                Genre       = new Genre {
                    Name = "genre1"
                },
                Director       = artist1,
                CoverImageLink = "cover1",
                TrailerLink    = "trailer1",
            };
            var movieUser = new MovieUser
            {
                User  = user1,
                Movie = movie1,
            };
            await dbContext.Users.AddAsync(user1);

            await dbContext.Movies.AddAsync(movie1);

            await dbContext.MovieUsers.AddAsync(movieUser);

            await dbContext.SaveChangesAsync();

            var userId  = user1.Id;
            var movieId = movie1.Id;

            var watchlistService = new WatchlistService(dbContext, mapper);

            var movieResult = await watchlistService.MovieIsInUserWatchlistAsync(userId, movieId);

            var invalid1 = await watchlistService.MovieIsInUserWatchlistAsync("invalidUserId", movieId);

            var invalid2 = await watchlistService.MovieIsInUserWatchlistAsync(userId, "invalidMovieId");

            Assert.True(movieResult);
            Assert.False(invalid1);
            Assert.False(invalid2);
        }
        public async Task TVShowIsInUserWatchlistShouldReturnCorrectResult()
        {
            var user1 = new MovieDatabaseUser
            {
                UserName   = "******",
                Email      = "*****@*****.**",
                AvatarLink = "avatar",
            };
            var artist1 = new Artist
            {
                FullName  = "name1",
                Biography = "biography1",
                BirthDate = DateTime.Parse("25 July 2019"),
                PhotoLink = "photo1",
            };
            var tvShow1 = new TVShow
            {
                Name        = "tvShow1",
                Description = "description2",
                Genre       = new Genre {
                    Name = "genre2"
                },
                Creator        = artist1,
                CoverImageLink = "cover2",
                TrailerLink    = "trailer2",
            };
            var tvShowUser = new TVShowUser
            {
                User   = user1,
                TVShow = tvShow1,
            };
            await dbContext.Users.AddAsync(user1);

            await dbContext.TVShows.AddAsync(tvShow1);

            await dbContext.TVShowUsers.AddAsync(tvShowUser);

            await dbContext.SaveChangesAsync();

            var userId   = user1.Id;
            var tvShowId = tvShow1.Id;

            var watchlistService = new WatchlistService(dbContext, mapper);

            var tvShowResult = await watchlistService.TVShowIsInUserWatchlistAsync(userId, tvShowId);

            var invalid1 = await watchlistService.TVShowIsInUserWatchlistAsync("invalidUserId", tvShowId);

            var invalid2 = await watchlistService.TVShowIsInUserWatchlistAsync(userId, "invalidTvShowId");

            Assert.True(tvShowResult);
            Assert.False(invalid1);
            Assert.False(invalid2);
        }
        public async Task RemoveMovieFromUserWatchlistShouldShouldRemoveMovieFromWatchlistProperly()
        {
            var user1 = new MovieDatabaseUser
            {
                UserName   = "******",
                Email      = "*****@*****.**",
                AvatarLink = "avatar",
            };
            var artist1 = new Artist
            {
                FullName  = "name1",
                Biography = "biography1",
                BirthDate = DateTime.Parse("25 July 2019"),
                PhotoLink = "photo1",
            };
            var movie1 = new Movie
            {
                Name        = "movie1",
                ReleaseDate = DateTime.Parse("24 July 2019"),
                Description = "description1",
                Length      = 160,
                Genre       = new Genre {
                    Name = "genre1"
                },
                Director       = artist1,
                CoverImageLink = "cover1",
                TrailerLink    = "trailer1",
            };
            var movieUser = new MovieUser
            {
                User  = user1,
                Movie = movie1,
            };
            await dbContext.Users.AddAsync(user1);

            await dbContext.Movies.AddAsync(movie1);

            await dbContext.MovieUsers.AddAsync(movieUser);

            await dbContext.SaveChangesAsync();

            var userId  = user1.Id;
            var movieId = movie1.Id;

            var watchlistService = new WatchlistService(dbContext, mapper);

            Assert.True(dbContext.MovieUsers.Count() == 1);

            await watchlistService.RemoveMovieFromUserWatchlistAsync(userId, movieId);

            Assert.True(dbContext.MovieUsers.Count() == 0);
        }
        public async Task UpdateSeasonReviewShouldUpdateReviewProperly()
        {
            var user1 = new MovieDatabaseUser
            {
                UserName   = "******",
                Email      = "*****@*****.**",
                AvatarLink = "avatar",
            };
            var season1 = new Season
            {
                SeasonNumber     = 1,
                Episodes         = 10,
                LengthPerEpisode = 29,
                ReleaseDate      = DateTime.Parse("28 October 2016"),
            };
            var seasonReview1 = new SeasonReview
            {
                Season  = season1,
                User    = user1,
                Content = "content1",
                Rating  = 8,
                Date    = DateTime.Parse("27 July 2019"),
            };
            await dbContext.Seasons.AddAsync(season1);

            await dbContext.SeasonReviews.AddAsync(seasonReview1);

            await dbContext.SaveChangesAsync();

            var seasonId = season1.Id;
            var userId   = user1.Id;

            var reviewService = new ReviewService(dbContext, mapper);

            var input = new CreateReviewInputModel
            {
                Id      = seasonId,
                Content = "content2",
                Rating  = 7,
            };

            var actualResult = await reviewService.UpdateSeasonReviewAsync(userId, input);

            Assert.True(actualResult);
            Assert.True(dbContext.SeasonReviews.Count() == 1);

            Assert.Equal(7, dbContext.SeasonReviews.First().Rating);
            Assert.Equal("content2", dbContext.SeasonReviews.First().Content);
            Assert.Equal(userId, dbContext.SeasonReviews.First().UserId);
            Assert.Equal(seasonId, dbContext.SeasonReviews.First().SeasonId);
        }
        public async Task GetSeasonReviewShouldReturnCorrectModel()
        {
            var user1 = new MovieDatabaseUser
            {
                UserName   = "******",
                Email      = "*****@*****.**",
                AvatarLink = "avatar",
            };
            var season1 = new Season
            {
                SeasonNumber     = 1,
                Episodes         = 10,
                LengthPerEpisode = 29,
                ReleaseDate      = DateTime.Parse("28 October 2016"),
            };
            var seasonReview1 = new SeasonReview
            {
                Season  = season1,
                User    = user1,
                Content = "content1",
                Rating  = 8,
                Date    = DateTime.Parse("27 July 2019"),
            };
            await dbContext.Seasons.AddAsync(season1);

            await dbContext.SeasonReviews.AddAsync(seasonReview1);

            await dbContext.SaveChangesAsync();

            var seasonId = season1.Id;
            var userId   = user1.Id;

            var reviewService = new ReviewService(dbContext, mapper);

            var expectedResult = new CreateReviewInputModel
            {
                Id      = seasonId,
                Content = "content1",
                Rating  = 8,
            };

            var actualResult = await reviewService.GetSeasonReviewAsync(userId, seasonId);

            Assert.Equal(expectedResult.GetType(), actualResult.GetType());
            Assert.Equal(expectedResult.Id, actualResult.Id);
            Assert.Equal(expectedResult.Content, actualResult.Content);
            Assert.Equal(expectedResult.Rating, actualResult.Rating);
        }
        public async Task AddTVShowToUserWatchlistShouldShouldAddMovieTouserWatchlistProperly()
        {
            var user1 = new MovieDatabaseUser
            {
                UserName   = "******",
                Email      = "*****@*****.**",
                AvatarLink = "avatar",
            };
            var artist1 = new Artist
            {
                FullName  = "name1",
                Biography = "biography1",
                BirthDate = DateTime.Parse("25 July 2019"),
                PhotoLink = "photo1",
            };
            var tvShow1 = new TVShow
            {
                Name        = "movie1",
                Description = "description1",
                Genre       = new Genre {
                    Name = "genre1"
                },
                Creator        = artist1,
                CoverImageLink = "cover1",
                TrailerLink    = "trailer1",
            };
            await dbContext.Users.AddAsync(user1);

            await dbContext.TVShows.AddAsync(tvShow1);

            await dbContext.SaveChangesAsync();

            var userId   = user1.Id;
            var tvShowId = tvShow1.Id;

            var watchlistService = new WatchlistService(dbContext, mapper);

            Assert.True(dbContext.TVShowUsers.Count() == 0);

            await watchlistService.AddTVShowToUserWatchlistAsync(userId, tvShowId);

            Assert.True(dbContext.TVShowUsers.Count() == 1);

            Assert.Equal(dbContext.TVShowUsers.First().TVShow, tvShow1);
            Assert.Equal(dbContext.TVShowUsers.First().User, user1);
        }
        public async Task GetUserAvatarLinkShouldReturnDefaultImageIfIdIsInvalid()
        {
            var user = new MovieDatabaseUser
            {
                AvatarLink = "avatar",
                Email      = "*****@*****.**",
                UserName   = "******",
            };
            await dbContext.Users.AddAsync(user);

            await dbContext.SaveChangesAsync();

            var avatarService = new AvatarService(dbContext);

            var actualResult = await avatarService.GetUserAvatarLink("invalidId");

            Assert.True(actualResult == GlobalConstants.avatarLinkPrefix + "no_avatar.jpg");
        }
Пример #11
0
        public async Task GetUserIdFromUsrnameShouldReturnNullIfInputIsInvalid()
        {
            var user = new MovieDatabaseUser
            {
                AvatarLink = "avatar",
                Email      = "*****@*****.**",
                UserName   = "******",
            };
            await dbContext.Users.AddAsync(user);

            await dbContext.SaveChangesAsync();

            var userService = new UserService(dbContext, mockUserManager.Object);

            var actualResult = await userService.GetUserIdFromUserNameAsync("invalid");

            Assert.True(actualResult == null);
        }
Пример #12
0
        public async Task GetUserIdFromUsrnameShouldReturnIdProperlyIfdataIsValid()
        {
            var user = new MovieDatabaseUser
            {
                AvatarLink = "avatar",
                Email      = "*****@*****.**",
                UserName   = "******",
            };
            await dbContext.Users.AddAsync(user);

            await dbContext.SaveChangesAsync();

            var expectedId = dbContext.Users.First().Id;

            var userService = new UserService(dbContext, mockUserManager.Object);

            var actualId = await userService.GetUserIdFromUserNameAsync("user1");

            Assert.Equal(actualId, expectedId);
        }
        public async Task GetUserAvatarLinkShouldReturnImageProperly()
        {
            var user = new MovieDatabaseUser
            {
                AvatarLink = "avatar",
                Email      = "*****@*****.**",
                UserName   = "******",
            };
            await dbContext.Users.AddAsync(user);

            await dbContext.SaveChangesAsync();

            var id = dbContext.Users.First().Id;

            var avatarService = new AvatarService(dbContext);

            var actualResult = await avatarService.GetUserAvatarLink(id);

            Assert.True(actualResult == "avatar");
        }
Пример #14
0
        public async Task <IActionResult> OnPostAsync(string returnUrl = null)
        {
            returnUrl = returnUrl ?? Url.Content("~/");
            if (ModelState.IsValid)
            {
                var user = new MovieDatabaseUser {
                    UserName = Input.UserName, Email = Input.Email, AvatarLink = GlobalConstants.noUserAvatar
                };

                var result = await userManager.CreateAsync(user, Input.Password);

                if (userManager.Users.Count() == 1)
                {
                    await userManager.AddToRoleAsync(user, GlobalConstants.adminRoleName);
                }
                else
                {
                    await userManager.AddToRoleAsync(user, GlobalConstants.userRoleName);
                }

                if (result.Succeeded)
                {
                    logger.LogInformation("User created a new account with password.");

                    await signInManager.SignInAsync(user, isPersistent : false);

                    return(LocalRedirect(returnUrl));
                }
                foreach (var error in result.Errors)
                {
                    ModelState.AddModelError(string.Empty, error.Description);
                }
            }

            // If we got this far, something failed, redisplay form
            return(Page());
        }
Пример #15
0
        public async Task GetMovieAndDetailsByIdShouldReturnCorrectModel()
        {
            var user1 = new MovieDatabaseUser
            {
                UserName   = "******",
                AvatarLink = "img",
                Email      = "*****@*****.**",
            };
            var artist1 = new Artist
            {
                FullName  = "name1",
                Biography = "biography1",
                BirthDate = DateTime.Parse("25 July 2019"),
                PhotoLink = "photo1",
            };
            var movie1 = new Movie
            {
                Name        = "movie1",
                ReleaseDate = DateTime.Parse("24 July 2019"),
                Description = "description1",
                Length      = 160,
                Genre       = new Genre {
                    Name = "genre1"
                },
                Director       = artist1,
                CoverImageLink = "cover1",
                TrailerLink    = "trailer1",
                Cast           = new List <MovieRole>
                {
                    new MovieRole
                    {
                        Artist          = artist1,
                        CharacterPlayed = "character1",
                    },
                }
            };
            var movieReview = new MovieReview
            {
                User    = user1,
                Movie   = movie1,
                Content = "content",
                Rating  = 9,
                Date    = DateTime.Parse("26 July 2019"),
            };
            await dbContext.Users.AddAsync(user1);

            await dbContext.Artists.AddAsync(artist1);

            await dbContext.Movies.AddAsync(movie1);

            await dbContext.MovieReviews.AddAsync(movieReview);

            await dbContext.SaveChangesAsync();

            var id = dbContext.Movies.First().Id;

            reviewService.Setup(r => r.ReviewExistsAsync("", ""))
            .ReturnsAsync(false);

            var movieService = new MovieService(dbContext, reviewService.Object, watchlistService.Object, mapper);

            var expectedResult = new MovieDetailsViewModel
            {
                Name                    = "movie1",
                ReleaseDate             = DateTime.Parse("24 July 2019"),
                Description             = "description1",
                Length                  = 160,
                Genre                   = "genre1",
                Director                = "name1",
                CoverImageLink          = "cover1",
                TrailerLink             = "trailer1",
                IsReviewedByCurrentUser = false,
                Rating                  = 9,
                ReviewsCount            = 1,
                RandomReview            = new MovieReviewViewModel
                {
                    User    = "******",
                    Movie   = "movie1",
                    Content = "content",
                    Rating  = 9,
                    Date    = DateTime.Parse("26 July 2019"),
                },
            };

            var actualResult = await movieService.GetMovieAndDetailsByIdAsync(id);

            Assert.Equal(expectedResult.Name, actualResult.Name);
            Assert.Equal(expectedResult.ReleaseDate, actualResult.ReleaseDate);
            Assert.Equal(expectedResult.Description, actualResult.Description);
            Assert.Equal(expectedResult.Length, actualResult.Length);
            Assert.Equal(expectedResult.Genre, actualResult.Genre);
            Assert.Equal(expectedResult.Director, actualResult.Director);
            Assert.Equal(expectedResult.CoverImageLink, actualResult.CoverImageLink);
            Assert.Equal(expectedResult.TrailerLink, actualResult.TrailerLink);

            Assert.Equal(expectedResult.Rating, actualResult.Rating);
            Assert.Equal(expectedResult.ReviewsCount, actualResult.ReviewsCount);

            Assert.Equal(expectedResult.RandomReview.User, actualResult.RandomReview.User);
            Assert.Equal(expectedResult.RandomReview.Movie, actualResult.RandomReview.Movie);
            Assert.Equal(expectedResult.RandomReview.Content, actualResult.RandomReview.Content);
            Assert.Equal(expectedResult.RandomReview.Rating, actualResult.RandomReview.Rating);
            Assert.Equal(expectedResult.RandomReview.Date, actualResult.RandomReview.Date);

            Assert.True(actualResult.Cast.Count() == 1);
            Assert.True(actualResult.Cast.First().Actor == "name1");
            Assert.True(actualResult.Cast.First().MovieCharacter == "character1");
        }
        public async Task GetItemsInUserWatchlistShouldReturnWatchlistProperly()
        {
            var user1 = new MovieDatabaseUser
            {
                UserName   = "******",
                Email      = "*****@*****.**",
                AvatarLink = "avatar",
            };
            var user2 = new MovieDatabaseUser
            {
                UserName   = "******",
                Email      = "*****@*****.**",
                AvatarLink = "avatar2",
            };
            var artist1 = new Artist
            {
                FullName  = "name1",
                Biography = "biography1",
                BirthDate = DateTime.Parse("25 July 2019"),
                PhotoLink = "photo1",
            };
            var movie1 = new Movie
            {
                Name        = "movie1",
                ReleaseDate = DateTime.Parse("24 July 2019"),
                Description = "description1",
                Length      = 160,
                Genre       = new Genre {
                    Name = "genre1"
                },
                Director       = artist1,
                CoverImageLink = "cover1",
                TrailerLink    = "trailer1",
            };
            var tvShow1 = new TVShow
            {
                Name        = "tvShow1",
                Description = "description2",
                Genre       = new Genre {
                    Name = "genre2"
                },
                Creator        = artist1,
                CoverImageLink = "cover2",
                TrailerLink    = "trailer2",
            };
            var season1 = new Season
            {
                TVShow           = tvShow1,
                SeasonNumber     = 1,
                Episodes         = 20,
                LengthPerEpisode = 45,
                ReleaseDate      = DateTime.Parse("24 July 2019"),
            };
            var movieUser = new MovieUser
            {
                User  = user1,
                Movie = movie1,
            };
            var movieUser2 = new MovieUser
            {
                User  = user2,
                Movie = movie1,
            };
            var movieReview = new MovieReview
            {
                User    = user1,
                Movie   = movie1,
                Content = "content1",
                Rating  = 6,
                Date    = DateTime.UtcNow,
            };
            var tvShowUser = new TVShowUser
            {
                User   = user1,
                TVShow = tvShow1,
            };
            var seasonReview = new SeasonReview
            {
                User    = user1,
                Season  = season1,
                Content = "content2",
                Rating  = 5,
                Date    = DateTime.UtcNow,
            };
            await dbContext.Users.AddAsync(user1);

            await dbContext.Movies.AddAsync(movie1);

            await dbContext.TVShows.AddAsync(tvShow1);

            await dbContext.Seasons.AddAsync(season1);

            await dbContext.MovieUsers.AddAsync(movieUser);

            await dbContext.MovieUsers.AddAsync(movieUser2);

            await dbContext.TVShowUsers.AddAsync(tvShowUser);

            await dbContext.MovieReviews.AddAsync(movieReview);

            await dbContext.SeasonReviews.AddAsync(seasonReview);

            await dbContext.SaveChangesAsync();

            var userId    = user1.Id;
            var movie1Id  = movie1.Id;
            var tvShow1Id = tvShow1.Id;

            var watchlistService = new WatchlistService(dbContext, mapper);

            var expectedResult = new List <WatchlistAllViewModel>
            {
                new WatchlistAllViewModel
                {
                    Id             = movie1Id,
                    Name           = "movie1",
                    ReleaseDate    = DateTime.Parse("24 July 2019"),
                    Description    = "description1....",
                    CoverImageLink = "cover1",
                    Category       = "Movies",
                    Rating         = 6,
                },
                new WatchlistAllViewModel
                {
                    Id             = tvShow1Id,
                    Name           = "tvShow1",
                    ReleaseDate    = DateTime.Parse("24 July 2019"),
                    Description    = "description2....",
                    CoverImageLink = "cover2",
                    Category       = "TVShows",
                    Rating         = 5,
                }
            };

            var actualResult = await watchlistService.GetItemsInUserWatchlistAsync(userId);

            Assert.True(actualResult.Count() == 2);

            Assert.Equal(expectedResult[0].Id, actualResult[0].Id);
            Assert.Equal(expectedResult[0].Name, actualResult[0].Name);
            Assert.Equal(expectedResult[0].ReleaseDate, actualResult[0].ReleaseDate);
            Assert.Equal(expectedResult[0].Description, actualResult[0].Description);
            Assert.Equal(expectedResult[0].CoverImageLink, actualResult[0].CoverImageLink);
            Assert.Equal(expectedResult[0].Category, actualResult[0].Category);
            Assert.Equal(expectedResult[0].Rating, actualResult[0].Rating);

            Assert.Equal(expectedResult[1].Id, actualResult[1].Id);
            Assert.Equal(expectedResult[1].Name, actualResult[1].Name);
            Assert.Equal(expectedResult[1].ReleaseDate, actualResult[1].ReleaseDate);
            Assert.Equal(expectedResult[1].Description, actualResult[1].Description);
            Assert.Equal(expectedResult[1].CoverImageLink, actualResult[1].CoverImageLink);
            Assert.Equal(expectedResult[1].Category, actualResult[1].Category);
            Assert.Equal(expectedResult[1].Rating, actualResult[1].Rating);
        }
        public async Task ReviewExistsShouldReturnCorrectResult()
        {
            var user1 = new MovieDatabaseUser
            {
                UserName   = "******",
                Email      = "*****@*****.**",
                AvatarLink = "avatar",
            };
            var artist1 = new Artist
            {
                FullName  = "name1",
                Biography = "biography1",
                BirthDate = DateTime.Parse("25 July 2019"),
                PhotoLink = "photo1",
            };
            var movie1 = new Movie
            {
                Name        = "movie1",
                ReleaseDate = DateTime.Parse("24 July 2019"),
                Description = "description1",
                Length      = 160,
                Genre       = new Genre {
                    Name = "genre1"
                },
                Director       = artist1,
                CoverImageLink = "cover1",
                TrailerLink    = "trailer1",
            };
            var season1 = new Season
            {
                SeasonNumber     = 1,
                Episodes         = 5,
                ReleaseDate      = DateTime.UtcNow,
                LengthPerEpisode = 35,
            };
            var movieReview = new MovieReview
            {
                Movie   = movie1,
                User    = user1,
                Content = "content1",
                Rating  = 8,
                Date    = DateTime.UtcNow,
            };
            var seasonReview = new SeasonReview
            {
                Season  = season1,
                User    = user1,
                Content = "content2",
                Rating  = 7,
                Date    = DateTime.UtcNow,
            };
            await dbContext.Movies.AddAsync(movie1);

            await dbContext.Seasons.AddAsync(season1);

            await dbContext.MovieReviews.AddAsync(movieReview);

            await dbContext.SeasonReviews.AddAsync(seasonReview);

            await dbContext.SaveChangesAsync();

            var userId   = user1.Id;
            var movieId  = movie1.Id;
            var seasonId = season1.Id;

            var reviewService = new ReviewService(dbContext, mapper);

            var movieResult = await reviewService.ReviewExistsAsync(userId, movieId);

            var seasonResult = await reviewService.ReviewExistsAsync(userId, seasonId);

            var invalid = await reviewService.ReviewExistsAsync(userId, "invalidId");

            Assert.True(movieResult);
            Assert.True(seasonResult);
            Assert.False(invalid);
        }
        public async Task GetAllMovieReviewsShouldReturnAllReviewsProperly()
        {
            var user1 = new MovieDatabaseUser
            {
                UserName   = "******",
                Email      = "*****@*****.**",
                AvatarLink = "avatar",
            };
            var user2 = new MovieDatabaseUser
            {
                UserName   = "******",
                Email      = "*****@*****.**",
                AvatarLink = "avatar2",
            };
            var artist1 = new Artist
            {
                FullName  = "name1",
                Biography = "biography1",
                BirthDate = DateTime.Parse("25 July 2019"),
                PhotoLink = "photo1",
            };
            var movie1 = new Movie
            {
                Name        = "movie1",
                ReleaseDate = DateTime.Parse("24 July 2019"),
                Description = "description1",
                Length      = 160,
                Genre       = new Genre {
                    Name = "genre1"
                },
                Director       = artist1,
                CoverImageLink = "cover1",
                TrailerLink    = "trailer1",
            };
            var movieReview1 = new MovieReview
            {
                Movie   = movie1,
                User    = user1,
                Content = "content1",
                Rating  = 8,
                Date    = DateTime.Parse("27 July 2019"),
            };
            var movieReview2 = new MovieReview
            {
                Movie   = movie1,
                User    = user2,
                Content = "content2",
                Rating  = 9,
                Date    = DateTime.Parse("27 July 2019"),
            };
            await dbContext.Movies.AddAsync(movie1);

            await dbContext.MovieReviews.AddAsync(movieReview1);

            await dbContext.MovieReviews.AddAsync(movieReview2);

            await dbContext.SaveChangesAsync();

            var movieId = movie1.Id;

            var reviewService = new ReviewService(dbContext, mapper);

            var expectedResult = new List <ReviewAllViewModel>
            {
                new ReviewAllViewModel
                {
                    Item    = "movie1",
                    User    = "******",
                    Content = "content1",
                    Rating  = 8,
                    Date    = DateTime.Parse("27 July 2019"),
                },
                new ReviewAllViewModel
                {
                    Item    = "movie1",
                    User    = "******",
                    Content = "content2",
                    Rating  = 9,
                    Date    = DateTime.Parse("27 July 2019"),
                },
            };

            var actualResult = await reviewService.GetAllMovieReviewsAsync(movieId);

            Assert.True(actualResult.Count() == 2);

            Assert.Equal(expectedResult[0].Item, actualResult[0].Item);
            Assert.Equal(expectedResult[0].User, actualResult[0].User);
            Assert.Equal(expectedResult[0].Content, actualResult[0].Content);
            Assert.Equal(expectedResult[0].Rating, actualResult[0].Rating);
            Assert.Equal(expectedResult[0].Date, actualResult[0].Date);

            Assert.Equal(expectedResult[1].Item, actualResult[1].Item);
            Assert.Equal(expectedResult[1].User, actualResult[1].User);
            Assert.Equal(expectedResult[1].Content, actualResult[1].Content);
            Assert.Equal(expectedResult[1].Rating, actualResult[1].Rating);
            Assert.Equal(expectedResult[1].Date, actualResult[1].Date);
        }
        public async Task GetAllSeasonReviewsShouldReturnAllReviewsProperly()
        {
            var user1 = new MovieDatabaseUser
            {
                UserName   = "******",
                Email      = "*****@*****.**",
                AvatarLink = "avatar",
            };
            var user2 = new MovieDatabaseUser
            {
                UserName   = "******",
                Email      = "*****@*****.**",
                AvatarLink = "avatar2",
            };
            var tvShow1 = new TVShow
            {
                Name        = "tvshow1",
                Description = "description",
            };
            var season1 = new Season
            {
                SeasonNumber     = 1,
                Episodes         = 9,
                LengthPerEpisode = 56,
                ReleaseDate      = DateTime.Parse("11 January 1998"),
                TVShow           = tvShow1,
            };
            var seasonReview1 = new SeasonReview
            {
                Season  = season1,
                User    = user1,
                Content = "content1",
                Rating  = 8,
                Date    = DateTime.Parse("27 July 2019"),
            };
            var seasonReview2 = new SeasonReview
            {
                Season  = season1,
                User    = user2,
                Content = "content2",
                Rating  = 9,
                Date    = DateTime.Parse("27 July 2019"),
            };
            await dbContext.TVShows.AddAsync(tvShow1);

            await dbContext.Seasons.AddAsync(season1);

            await dbContext.SeasonReviews.AddAsync(seasonReview1);

            await dbContext.SeasonReviews.AddAsync(seasonReview2);

            await dbContext.SaveChangesAsync();

            var seasonId = season1.Id;

            var reviewService = new ReviewService(dbContext, mapper);

            var expectedResult = new List <ReviewAllViewModel>
            {
                new ReviewAllViewModel
                {
                    Item    = "tvshow1 Season 1",
                    User    = "******",
                    Content = "content1",
                    Rating  = 8,
                    Date    = DateTime.Parse("27 July 2019"),
                },
                new ReviewAllViewModel
                {
                    Item    = "tvshow1 Season 1",
                    User    = "******",
                    Content = "content2",
                    Rating  = 9,
                    Date    = DateTime.Parse("27 July 2019"),
                },
            };

            var actualResult = await reviewService.GetAllSeasonReviewsAsync(seasonId);

            Assert.True(actualResult.Count() == 2);

            Assert.Equal(expectedResult[0].Item, actualResult[0].Item);
            Assert.Equal(expectedResult[0].User, actualResult[0].User);
            Assert.Equal(expectedResult[0].Content, actualResult[0].Content);
            Assert.Equal(expectedResult[0].Rating, actualResult[0].Rating);
            Assert.Equal(expectedResult[0].Date, actualResult[0].Date);

            Assert.Equal(expectedResult[1].Item, actualResult[1].Item);
            Assert.Equal(expectedResult[1].User, actualResult[1].User);
            Assert.Equal(expectedResult[1].Content, actualResult[1].Content);
            Assert.Equal(expectedResult[1].Rating, actualResult[1].Rating);
            Assert.Equal(expectedResult[1].Date, actualResult[1].Date);
        }