public void GetCssClassForVotePercentage_returns_correct_value_when_failing_percent()
        {
            // Act
            string result = HtmlHelpers.GetCssClassForVotePercentage("66");

            // Assert
            Assert.AreEqual("text-danger", result);
        }
        public ActionResult Create(int issueId, string voteType)
        {
            Issue issue  = _issueRepo.Find(issueId);
            var   userId = User.Identity.GetUserId();

            if (issue == null)
            {
                return(new HttpStatusCodeResult(HttpStatusCode.BadRequest));
            }

            if (!issue.IsVotableIssue)
            {
                Response.StatusCode = 422;
                if (Request.IsAjaxRequest())
                {
                    var data = new
                    {
                        issueId   = issue.Id,
                        isVotable = false
                    };

                    return(Json(data));
                }
                return(View("../Issues/Vote", _issueRepo.GetAllVotableIssuesSortedByDate()));
            }

            var  usersVotes = issue.Votes.Where(v => v.AuthorID == userId);
            Vote vote;
            bool isUpvote = voteType == "Up";

            if (usersVotes.Count() > 0)
            {
                vote          = usersVotes.First();
                vote.IsUpvote = isUpvote;
            }
            else
            {
                vote = new Vote()
                {
                    AuthorID = userId,
                    IssueID  = issue.Id,
                    IsUpvote = isUpvote
                };

                issue.Votes.Add(vote);
            }

            _issueRepo.Update(issue);

            if (vote.VoteID > 0)
            {
                if (Request.IsAjaxRequest())
                {
                    string votePercent = issue.GetPrettyPercentage();
                    var    data        = new
                    {
                        votePercent            = votePercent,
                        votes                  = issue.TotalVotes(),
                        issueId                = issue.Id,
                        wasUpvote              = isUpvote,
                        votePercentageCssClass = HtmlHelpers.GetCssClassForVotePercentage(votePercent),
                        isVotable              = true
                    };

                    return(Json(data));
                }
                else
                {
                    return(Redirect("/Issues/Vote#" + issueId));
                }
            }

            return(new HttpStatusCodeResult(HttpStatusCode.InternalServerError));
        }