Beispiel #1
0
        public async Task CreateReviewFailureTest(ReviewEntity reviewEntity, string authorUserName)
        {
            // Arrange
            var mockUserRepository = new Mock <IUserProfileRepository>();

            mockUserRepository.Setup(x => x.GetAsync(It.IsAny <Expression <Func <UserProfileEntity, bool> > >()))
            .Returns(Task.FromResult(_userProfileEntityCollection.Where(x => x.UserName.Equals(authorUserName, StringComparison.OrdinalIgnoreCase))));
            var mockReviewRepository = new Mock <IReviewRepository>();

            mockReviewRepository.Setup(x => x.CreateAsync(It.IsAny <ReviewEntity>()))
            .Returns(Task.FromResult(default(ReviewEntity)));
            mockReviewRepository.Setup(x => x.GetAsync(It.IsAny <Expression <Func <ReviewEntity, bool> > >()))
            .Throws <EntityAlreadyExistException>();


            var mockUnitOfWork = new Mock <IUnitOfWork>();

            mockUnitOfWork.SetupGet(x => x.ReviewRepository).Returns(mockReviewRepository.Object);
            mockUnitOfWork.SetupGet(x => x.UserProfileRepository).Returns(mockUserRepository.Object);

            // Act
            var reviewService = new ReviewService(mockUnitOfWork.Object);
            await Assert.ThrowsAsync <EntityAlreadyExistException>(() => reviewService.CreateAsync(reviewEntity, authorUserName));

            // Assert

            mockReviewRepository.Verify(x => x.CreateAsync(It.IsAny <ReviewEntity>()), Times.Never);
            mockReviewRepository.Verify(x => x.GetAsync(It.IsAny <Expression <Func <ReviewEntity, bool> > >()), Times.Once);
        }
Beispiel #2
0
        public async Task <IActionResult> AddReview(ReviewEditModel model, long productId)
        {
            if (HttpMethods.IsGet(Request.Method))
            {
                ModelState.Clear();

                await _appService.PrepareModelAsync(model, null);
            }
            else if (HttpMethods.IsPost(Request.Method))
            {
                if (ModelState.IsValid)
                {
                    var seller = await HttpContext.GetSellerAsync();

                    var customer = await HttpContext.GetMemberAsync();

                    var review = new Review();
                    await _appService.PrepareReviewAsync(review, model);

                    review.ProductId  = productId;
                    review.CustomerId = customer.Id;
                    review.Approved   = true;

                    await _reviewService.CreateAsync(review);

                    TempData.AddAlert(AlertMode.Notify, AlertType.Success, $"\"{review.Title}\" review was added.");
                }
            }

            return(PartialView("ReviewEdit", model));
        }
Beispiel #3
0
        public async Task CreateReviewSuccessfully()
        {
            var options = new DbContextOptionsBuilder <ApplicationDbContext>()
                          .UseInMemoryDatabase(databaseName: Guid.NewGuid().ToString())
                          .Options;

            var dbContext = new ApplicationDbContext(options);

            var repository = new EfDeletableEntityRepository <Review>(dbContext);
            var service    = new ReviewService(repository);

            await service.CreateAsync(1, UserId, "Fantastic");

            await service.CreateAsync(2, UserId, "Not bad");

            Assert.Equal(2, repository.All().Count());
        }
        public async Task <IActionResult> Create([FromBody] ReviewViewModel model)
        {
            var user = await GetCurrentUserAsync();

            var review = model.Adapt <Review>();

            review.User = user;

            await _reviewService.CreateAsync(review);

            return(Ok(review.Id));
        }
        public async Task <IActionResult> New(NewReviewModel model)
        {
            var result = await _movies.GetDetailsAsync(model.MovieId);

            if (result.IsAccessDenied)
            {
                return(Forbid());
            }
            if (!result.Succeeded)
            {
                return(Error(result.Errors));
            }

            var movie = result.Value;

            if (movie == null)
            {
                return(RedirectToAction("Index", "Movies"));
            }

            if (!movie.CanReview)
            {
                return(Forbid());
            }

            if (ModelState.IsValid)
            {
                var create = await _reviews.CreateAsync(model.MovieId, model.Stars, model.Comment);

                if (create.IsAccessDenied)
                {
                    return(new ForbidResult());
                }

                if (create.Succeeded)
                {
                    return(View("Success", new ReviewSuccessViewModel {
                        MovieId = model.MovieId, Action = "Created"
                    }));
                }
                else
                {
                    foreach (var error in create.Errors)
                    {
                        ModelState.AddModelError("", error);
                    }
                }
            }

            model.MovieTitle = movie.Title;

            return(View(model));
        }
Beispiel #6
0
        public async Task CreateAsync_ShouldCreateNewReview()
        {
            // Arrange
            FitStoreDbContext database = this.Database;

            IReviewService reviewService = new ReviewService(database);

            // Act
            await reviewService.CreateAsync(content, rating, userId, supplementId);

            // Assert
            Review review = database.Reviews.Find(reviewId);

            review.Content.Should().Be(content);
            review.Rating.Should().Be(rating);
            review.AuthorId.Should().Be(userId);
            review.SupplementId.Should().Be(supplementId);
        }
Beispiel #7
0
        public async Task CreateReviewSuccessTest(ReviewEntity reviewEntity, string authorUserName, ReviewEntity expected)
        {
            // Arrange
            var mockUserRepository = new Mock <IUserProfileRepository>();

            mockUserRepository.Setup(x => x.GetAsync(It.IsAny <Expression <Func <UserProfileEntity, bool> > >()))
            .Returns(Task.FromResult(_userProfileEntityCollection.Where(x => x.UserName.Equals(authorUserName, StringComparison.OrdinalIgnoreCase))));
            var mockReviewRepository = new Mock <IReviewRepository>();

            mockReviewRepository.Setup(x => x.CreateAsync(It.IsAny <ReviewEntity>()))
            .Returns(Task.FromResult(expected));
            mockReviewRepository.Setup(x => x.GetAsync(It.IsAny <Expression <Func <ReviewEntity, bool> > >()))
            .Returns(Task.FromResult(EntityCollection.Where(x => Equals(x.AuthorId, reviewEntity.AuthorId) &&
                                                            Equals(x.MovieId, reviewEntity.MovieId))));


            var mockUnitOfWork = new Mock <IUnitOfWork>();

            mockUnitOfWork.SetupGet(x => x.ReviewRepository).Returns(mockReviewRepository.Object);
            mockUnitOfWork.SetupGet(x => x.UserProfileRepository).Returns(mockUserRepository.Object);

            // Act
            var reviewService = new ReviewService(mockUnitOfWork.Object);
            var result        = await reviewService.CreateAsync(reviewEntity, authorUserName);

            // Assert
            Assert.False(string.IsNullOrEmpty(result.Id));
            Assert.Equal(expected.MovieId, result.MovieId);
            Assert.Equal(expected.AuthorId, result.AuthorId);
            Assert.Equal(expected.ReviewTitle, result.ReviewTitle);
            Assert.Equal(expected.ReviewDescription, result.ReviewDescription);
            Assert.Equal(expected.Rating, result.Rating);

            mockReviewRepository.Verify(x => x.CreateAsync(It.IsAny <ReviewEntity>()), Times.Once);
            mockReviewRepository.Verify(x => x.GetAsync(It.IsAny <Expression <Func <ReviewEntity, bool> > >()), Times.Once);
        }
        public async Task Create_Review_WithWrongCategory()
        {
            var options     = Utils.GetOptions(nameof(Create_Review_WithWrongCategory));
            var userStore   = new Mock <IUserStore <User> >();
            var userManager = new Mock <UserManager <User> >(userStore.Object, null, null, null,
                                                             null, null, null, null, null);
            var contextAccessor      = new Mock <IHttpContextAccessor>();
            var userPrincipalFactory = new Mock <IUserClaimsPrincipalFactory <User> >().Object;
            var signManager          = new Mock <SignInManager <User> >(userManager.Object, contextAccessor.Object, userPrincipalFactory, null, null, null, null).Object;
            var context = new Mock <HttpContext>();

            contextAccessor.Setup(x => x.HttpContext).Returns(context.Object);
            var userService  = new Mock <IUserService>();
            var photoService = new Mock <IPhotoService>();

            var newReviewDTO = new Mock <NewReviewDTO>().Object;

            newReviewDTO.PhotoId       = Guid.Parse("e165b91f-03bf-414e-88b7-c51b87775683");
            newReviewDTO.Comment       = "new comment";
            newReviewDTO.Score         = 5;
            newReviewDTO.WrongCategory = true;

            using (var arrContext = new PhotoContestContext(options))
            {
                await arrContext.Contests.AddRangeAsync(Utils.SeedContests());

                await arrContext.Ranks.AddRangeAsync(Utils.SeedRanks());

                await arrContext.Categories.AddRangeAsync(Utils.SeedCategories());

                await arrContext.Statuses.AddRangeAsync(Utils.SeedStatuses());

                await arrContext.Photos.AddRangeAsync(Utils.SeedPhotos());

                await arrContext.Juries.AddRangeAsync(Utils.SeedJuries());

                await arrContext.Users.AddRangeAsync(Utils.SeedUsers());

                await arrContext.SaveChangesAsync();
            };
            using (var actContext = new PhotoContestContext(options))
            {
                var userToGet = await actContext.Users.Include(u => u.Rank).Skip(1).FirstAsync();

                userManager.Setup(x => x.GetUserName(signManager.Context.User)).Returns(userToGet.UserName);
                userService.Setup(x => x.GetUserByUsernameAsync(It.IsAny <string>())).Returns(Task.FromResult(userToGet));
                var photo = await actContext.Photos
                            .Include(p => p.User)
                            .Include(p => p.Contest)
                            .ThenInclude(p => p.Category)
                            .Include(p => p.Contest)
                            .ThenInclude(c => c.Status)
                            .Where(p => p.IsDeleted == false)
                            .FirstOrDefaultAsync(p => p.Id == Guid.Parse("e165b91f-03bf-414e-88b7-c51b87775683"));

                photoService.Setup(x => x.FindPhotoAsync(It.IsAny <Guid>())).Returns(Task.FromResult(photo));

                var sut    = new ReviewService(actContext, photoService.Object, userService.Object, contextAccessor.Object, userManager.Object, signManager);
                var result = await sut.CreateAsync(newReviewDTO);

                Assert.AreEqual("Photo is in a wrong category.", result.Comment);
                Assert.AreEqual(0, result.Score);
                Assert.AreEqual(userToGet.FirstName + " " + userToGet.LastName, result.Evaluator);
                Assert.AreEqual(photo.Title, result.PhotoTitle);
            }
        }
        public async Task Throw_When_ContestIsInvalidPhase()
        {
            var options     = Utils.GetOptions(nameof(Throw_When_ContestIsInvalidPhase));
            var userStore   = new Mock <IUserStore <User> >();
            var userManager = new Mock <UserManager <User> >(userStore.Object, null, null, null,
                                                             null, null, null, null, null);
            var contextAccessor      = new Mock <IHttpContextAccessor>();
            var userPrincipalFactory = new Mock <IUserClaimsPrincipalFactory <User> >().Object;
            var signManager          = new Mock <SignInManager <User> >(userManager.Object, contextAccessor.Object, userPrincipalFactory, null, null, null, null).Object;
            var context = new Mock <HttpContext>();

            contextAccessor.Setup(x => x.HttpContext).Returns(context.Object);
            var userService  = new Mock <IUserService>();
            var photoService = new Mock <IPhotoService>();

            var newReviewDTO = new Mock <NewReviewDTO>().Object;

            newReviewDTO.PhotoId       = Guid.Parse("94499cdd-e18c-4743-b0c4-2e1b7564c46c");
            newReviewDTO.Comment       = "new comment";
            newReviewDTO.Score         = 5;
            newReviewDTO.WrongCategory = false;

            using (var arrContext = new PhotoContestContext(options))
            {
                await arrContext.Contests.AddRangeAsync(Utils.SeedContests());

                await arrContext.Ranks.AddRangeAsync(Utils.SeedRanks());

                await arrContext.Categories.AddRangeAsync(Utils.SeedCategories());

                await arrContext.Statuses.AddRangeAsync(Utils.SeedStatuses());

                await arrContext.Photos.AddRangeAsync(Utils.SeedPhotos());

                await arrContext.Juries.AddRangeAsync(Utils.SeedJuries());

                await arrContext.Users.AddRangeAsync(Utils.SeedUsers());

                await arrContext.SaveChangesAsync();
            };
            using (var actContext = new PhotoContestContext(options))
            {
                var userToGet = await actContext.Users.Include(u => u.Rank).Skip(1).FirstAsync();

                userManager.Setup(x => x.GetUserName(signManager.Context.User)).Returns(userToGet.UserName);
                userService.Setup(x => x.GetUserByUsernameAsync(It.IsAny <string>())).Returns(Task.FromResult(userToGet));
                var photo = await actContext.Photos
                            .Include(p => p.User)
                            .Include(p => p.Contest)
                            .ThenInclude(p => p.Category)
                            .Include(p => p.Contest)
                            .ThenInclude(c => c.Status)
                            .Where(p => p.IsDeleted == false)
                            .FirstOrDefaultAsync(p => p.Id == Guid.Parse("94499cdd-e18c-4743-b0c4-2e1b7564c46c"));

                photoService.Setup(x => x.FindPhotoAsync(It.IsAny <Guid>())).Returns(Task.FromResult(photo));

                var sut = new ReviewService(actContext, photoService.Object, userService.Object, contextAccessor.Object, userManager.Object, signManager);
                await Assert.ThrowsExceptionAsync <ArgumentException>(() => sut.CreateAsync(newReviewDTO));
            }
        }
        public async Task Throw_When_PhotoIsAlreadyReviewedApi()
        {
            var options     = Utils.GetOptions(nameof(Throw_When_PhotoIsAlreadyReviewedApi));
            var userStore   = new Mock <IUserStore <User> >();
            var userManager = new Mock <UserManager <User> >(userStore.Object, null, null, null,
                                                             null, null, null, null, null);
            var contextAccessor      = new Mock <IHttpContextAccessor>();
            var userPrincipalFactory = new Mock <IUserClaimsPrincipalFactory <User> >().Object;
            var signManager          = new Mock <SignInManager <User> >(userManager.Object, contextAccessor.Object, userPrincipalFactory, null, null, null, null).Object;
            var context = new Mock <HttpContext>();

            contextAccessor.Setup(x => x.HttpContext).Returns(context.Object);
            var userService  = new Mock <IUserService>();
            var photoService = new Mock <IPhotoService>();

            var newReviewDTO = new Mock <NewReviewDTO>().Object;

            newReviewDTO.PhotoId       = Guid.Parse("e165b91f-03bf-414e-88b7-c51b87775683");
            newReviewDTO.Comment       = "new comment";
            newReviewDTO.Score         = 5;
            newReviewDTO.WrongCategory = false;

            using (var arrContext = new PhotoContestContext(options))
            {
                await arrContext.Contests.AddRangeAsync(Utils.SeedContests());

                await arrContext.Ranks.AddRangeAsync(Utils.SeedRanks());

                await arrContext.Categories.AddRangeAsync(Utils.SeedCategories());

                await arrContext.Statuses.AddRangeAsync(Utils.SeedStatuses());

                await arrContext.Photos.AddRangeAsync(Utils.SeedPhotos());

                await arrContext.Juries.AddRangeAsync(Utils.SeedJuries());

                await arrContext.Users.AddRangeAsync(Utils.SeedUsers());

                await arrContext.SaveChangesAsync();
            };
            using (var actContext = new PhotoContestContext(options))
            {
                var userToGet = await actContext.Users.Include(u => u.Rank).Skip(1).FirstAsync();

                var claims = new List <Claim>()
                {
                    new Claim(ClaimTypes.NameIdentifier, userToGet.UserName.ToString()),
                };
                var identity        = new ClaimsIdentity(claims);
                var claimsPrincipal = new ClaimsPrincipal(identity);
                contextAccessor.Setup(x => x.HttpContext.User).Returns(claimsPrincipal);
                userService.Setup(x => x.GetUserByUsernameAsync(It.IsAny <string>())).Returns(Task.FromResult(userToGet));
                var photo = await actContext.Photos
                            .Include(p => p.User)
                            .Include(p => p.Contest)
                            .ThenInclude(p => p.Category)
                            .Include(p => p.Contest)
                            .ThenInclude(c => c.Status)
                            .Where(p => p.IsDeleted == false)
                            .FirstOrDefaultAsync(p => p.Id == Guid.Parse("e165b91f-03bf-414e-88b7-c51b87775683"));

                photoService.Setup(x => x.FindPhotoAsync(It.IsAny <Guid>())).Returns(Task.FromResult(photo));

                var sut = new ReviewService(actContext, photoService.Object, userService.Object, contextAccessor.Object, userManager.Object, signManager);
                await sut.CreateAsync(newReviewDTO);

                await Assert.ThrowsExceptionAsync <ArgumentException>(() => sut.CreateApiAsync(newReviewDTO));
            }
        }