Beispiel #1
0
        public async Task UserReviewVoteAsyncChangesVoteCorrectly()
        {
            var reviews = new List <Review>();
            var review  = new Review()
            {
                Id             = "test",
                ReviewAuthorId = "gosho",
                ReviewNumber   = "123"
            };

            reviews.Add(review);
            var mockReviewsRepo = new Mock <IReviewsRepository>();

            mockReviewsRepo.Setup(x => x.GetReviewByReviewNumber("123")).Returns(review);
            var mockReviewsVotesRepo = new Mock <IReviewsVotesRepository>();
            var reviewVote           = new ReviewVote()
            {
                ReviewId          = "test",
                ApplicationUserId = "gosho",
            };

            mockReviewsVotesRepo.Setup(x => x.GetReviewVoteByIds("test", "gosho")).Returns(reviewVote);

            var service = new ReviewsVotesService(mockReviewsVotesRepo.Object, mockReviewsRepo.Object);

            await service.UserReviewVoteAsync("123", true, "gosho");

            Assert.Equal("UpVote", reviewVote.Vote.ToString());

            await service.UserReviewVoteAsync("123", false, "gosho");

            Assert.Equal("DownVote", reviewVote.Vote.ToString());
        }
        public async Task <IHttpActionResult> LikeReview(int id, bool isup)
        {
            var userId = User.Identity.GetUserId();

            if (userId != null)
            {
                Review comment = await db.Reviews.FindAsync(id);

                var commentVoteByUser = await db.ReviewVotes.FirstOrDefaultAsync(x => x.reviewId == id && x.votedBy == userId);

                if (comment == null)
                {
                    return(NotFound());
                }
                var vote = commentVoteByUser;
                if (vote != null)
                {
                    if (vote.isup && isup)
                    {
                        return(BadRequest("You have already voteup"));
                    }
                    else if (vote.isup && !isup)
                    {
                        vote.isup = false;
                    }
                    else if (!vote.isup && !isup)
                    {
                        return(BadRequest("You have already votedown"));
                    }
                    else if (!vote.isup && isup)
                    {
                        vote.isup = true;
                    }
                }
                else
                {
                    ReviewVote repvote = new  ReviewVote();
                    repvote.isup     = isup;
                    repvote.votedBy  = userId;
                    repvote.reviewId = id;
                    db.ReviewVotes.Add(repvote);
                }
                await db.SaveChangesAsync();

                var q = (from x in comment.ReviewVotes.Where(x => x.reviewId == comment.Id)
                         let voteUp = comment.ReviewVotes.Count(m => m.isup)
                                      let voteDown = comment.ReviewVotes.Count(m => m.isup == false)
                                                     select new { voteUpCount = voteUp, voteDownCount = voteDown }).FirstOrDefault();

                return(Ok(q));
            }
            else
            {
                return(BadRequest("You are not login"));
            }
        }
Beispiel #3
0
        public ActionResult DownvoteReview(int reviewID, int movieID)
        {
            if (User.Identity.IsAuthenticated == false)
            {
                TempData["msg"] = "<script>alert('You must be logged in to vote on a review.');</script>";
                return(Redirect(Request.UrlReferrer.ToString()));
            }
            String  currentuserID = User.Identity.GetUserId();
            AppUser currentuser   = db.Users.First(x => x.Id == currentuserID);
            IEnumerable <ReviewVote> reviewvotes = db.ReviewVotes.Where(x => x.Review.ReviewID == reviewID);
            IEnumerable <ReviewVote> UserReviews = reviewvotes.Where(x => x.AppUser == currentuser);

            if (UserReviews != null && UserReviews.GetEnumerator().MoveNext())
            {
                foreach (ReviewVote vote in UserReviews)
                {
                    if (vote.UpOrDown == UpOrDown.Up)
                    {
                        vote.UpOrDown        = UpOrDown.Down;
                        db.Entry(vote).State = EntityState.Modified;
                        TempData["msg"]      = "<script>alert('Your vote was changed.');</script>";
                        return(Redirect(Request.UrlReferrer.ToString()));
                    }
                    else
                    {
                        TempData["msg"] = "<script>alert('You have already downvoted this review.');</script>";
                        return(Redirect(Request.UrlReferrer.ToString()));
                    }
                }
                db.SaveChanges();
            }
            else
            {
                Review MovieReview = db.Reviews.First(x => x.ReviewID == reviewID);
                IEnumerable <Review> MovieReviews = db.Reviews.Where(x => x.Movie.MovieID == movieID);
                Movie      movie      = db.Movies.First(x => x.MovieID == movieID);
                ReviewVote reviewvote = new ReviewVote();
                reviewvote.UpOrDown     = UpOrDown.Down;
                reviewvote.AppUser      = currentuser;
                reviewvote.Review       = MovieReview;
                reviewvote.Review.Movie = movie;
                MovieReview.TotalVotes += 1;
                db.ReviewVotes.Add(reviewvote);
                db.SaveChanges();
                return(Redirect(Request.UrlReferrer.ToString()));
            }
            return(Redirect(Request.UrlReferrer.ToString()));
        }
        public void GetUserReviewsWorksCorrectly()
        {
            var reviews  = new List <Review>();
            var dateTime = new DateTime(1994, 01, 01);
            var review   = new Review()
            {
                Id             = "012",
                ReviewAuthorId = "gosho",
                ReviewNumber   = "123",
                ReviewInfo     = "work",
                CreatedOn      = dateTime,
                WebtoonId      = "456",
                Webtoon        = new Webtoon()
                {
                    Title       = "test",
                    TitleNumber = "789"
                },
                ReviewVotes = new List <ReviewVote>()
            };
            var reviewVote = new ReviewVote()
            {
                ApplicationUserId = "ivan",
                ReviewId          = "012",
                Vote = MyWebtoonWebProject.Data.Models.Enums.VoteType.UpVote
            };

            review.ReviewVotes.Add(reviewVote);
            reviews.Add(review);
            var mockReviewRepo = new Mock <IReviewsRepository>();

            mockReviewRepo.Setup(x => x.All()).Returns(reviews.AsQueryable());

            var service = new ApplicationUsersService(null, mockReviewRepo.Object, null, null, null, null);

            var result = service.GetUserReviews("gosho");

            Assert.Equal(new DateTime(1994, 01, 01), result.First().CreatedOn);
            Assert.Equal(0, result.First().Dislikes);
            Assert.Equal(1, result.First().Likes);
            Assert.Equal("gosho", result.First().ReviewAuthorId);
            Assert.Equal("123", result.First().ReviewNumber);
            Assert.Equal("789", result.First().WebtoonTitleNumber);
            Assert.Equal("test", result.First().WebtoonTitle);
            Assert.Equal("work", result.First().ReviewInfo);
        }
Beispiel #5
0
        protected async override Task <HandleResult> HandleCoreAsync(VoteReviewRequest reqObj)
        {
            var reviewVote = new ReviewVote
            {
                MID      = reqObj.MID,
                ReviewID = reqObj.RID,
                Oppose   = 0,
                Support  = reqObj.Support,
                UID      = reqObj.UserId,
                VoteTime = DateTime.Now
            };

            var rowAffected = await _mottoRepo.AddReviewVoteAsync(reviewVote);

            return(new VoteReviewResult
            {
                State = HandleStates.Success,
                Msg = "操作成功"
            });
        }
        public void ReviewLikesAndDislikesWorksCorrectly()
        {
            var reviews = new List <Review>();
            var review  = new Review()
            {
                ReviewNumber = "pesho",
                Id           = "test123"
            };

            reviews.Add(review);
            var reviewVote = new ReviewVote()
            {
                ApplicationUserId = "gosho",
                ReviewId          = "test123",
                Vote = MyWebtoonWebProject.Data.Models.Enums.VoteType.UpVote
            };
            var secondReviewVote = new ReviewVote()
            {
                ApplicationUserId = "pesho",
                ReviewId          = "test123",
                Vote = MyWebtoonWebProject.Data.Models.Enums.VoteType.DownVote
            };

            review.ReviewVotes.Add(reviewVote);
            review.ReviewVotes.Add(secondReviewVote);
            var mockReviewsRepo = new Mock <IReviewsRepository>();;

            mockReviewsRepo.Setup(x => x.GetReviewByReviewNumber("pesho")).Returns(review);

            var service = new ReviewsService(mockReviewsRepo.Object, null);

            var result = service.ReviewLikesAndDislikes("pesho");

            Assert.Equal(1, result.Dislikes);
            Assert.Equal(1, result.Likes);
        }
Beispiel #7
0
        public async Task UserReviewVoteAsync(string reviewNumber, bool isUpVote, string userId)
        {
            var reviewId = this.reviewsRepository.GetReviewByReviewNumber(reviewNumber).Id;

            var userReviewVote = this.reviewsVotesRepository.GetReviewVoteByIds(reviewId, userId);

            if (userReviewVote != null)
            {
                userReviewVote.Vote = isUpVote ? VoteType.UpVote : VoteType.DownVote;
            }
            else
            {
                userReviewVote = new ReviewVote
                {
                    ReviewId          = reviewId,
                    ApplicationUserId = userId,
                    Vote = isUpVote ? VoteType.UpVote : VoteType.DownVote,
                };

                await this.reviewsVotesRepository.AddAsync(userReviewVote);
            }

            await this.reviewsVotesRepository.SaveChangesAsync();
        }
Beispiel #8
0
        public async Task <int> AddReviewVoteAsync(ReviewVote rv)
        {
            var rowAffected = 0;

            using (var conn = _connProvider.GetConnection())
            {
                var tran = conn.BeginTransaction();

                try
                {
                    var cmd = conn.CreateCommand();
                    cmd.Transaction = tran;
                    if (rv.Support == 1)
                    {
                        rowAffected = await conn.ExecuteAsync("Insert into ReviewVotes (MID,ReviewID,UID,Support,Oppose,VoteTime) " +
                                                              "values(@MID,@ReviewID,@UID,@Support,@Oppose,@VoteTime)",
                                                              rv, tran);
                    }
                    else
                    {
                        rowAffected = await conn.ExecuteAsync("delete from ReviewVotes where MID=@MID and ReviewID=@ReviewID and UID=@UID", rv, tran);
                    }

                    if (rowAffected > 0)
                    {
                        if (rv.Support == 1)
                        {
                            await conn.ExecuteAsync("update Reviews set Up=Up+1 where MID=@mid and ID=@reviewId",
                                                    new
                            {
                                MID      = rv.MID,
                                ReviewId = rv.ReviewID
                            }, tran);
                        }
                        else
                        {
                            await conn.ExecuteAsync("update Reviews set Up=Up-1 where MID=@mid and ID=@reviewId",
                                                    new
                            {
                                MID      = rv.MID,
                                ReviewId = rv.ReviewID
                            }, tran);
                        }

                        tran.Commit();
                    }
                    else
                    {
                        tran.Rollback();
                    }
                }
                catch
                {
                    try
                    {
                        tran.Rollback();
                    }
                    catch
                    {
                    }

                    throw;
                }
            }

            return(rowAffected);
        }