public void IsProfileEligibleForVoteAlreadyVoted()
        {
            IVerseVoteRepository repository = GetRepositoryWithEnrolledUnitOfWork();
            Verse verse = CreateAndRegisterVerse<CandidateVerseType, NoviceAuthorityType, HaikuPoem>();
            var profile = CreateAndRegisterUserProfile<LegendAuthorityType>();
            VerseVote verseVote = new VerseVote
                                  {
                                      Amount = Rand.Next(0, 50),
                                      Date = DateTime.UtcNow,
                                      UserProfileId = profile.Id,
                                      VerseId = verse.Id
                                  };
            RegisterDataStoreObject(verseVote);

            var isEligible = repository.IsProfileEligibleForVote(verse.Id, profile.Id);

            Assert.IsFalse(isEligible);
        }
        public void GetVerseRating()
        {
            IVerseVoteRepository repository = GetRepositoryWithEnrolledUnitOfWork();
            Verse verse = CreateAndRegisterVerse<CandidateVerseType, NoviceAuthorityType, HaikuPoem>();
            var profileVoter = CreateAndRegisterUserProfile<LegendAuthorityType>();
            int numberOfVerseVotes = Rand.Next(0, 50);
            double expected = 0;
            for (int i = 0; i < numberOfVerseVotes; i++)
            {
                VerseVote verseVote = new VerseVote
                                      {
                                          Amount = Rand.Next(0, 50),
                                          Date = DateTime.UtcNow,
                                          UserProfileId = profileVoter.Id,
                                          VerseId = verse.Id
                                      };
                expected += verseVote.Amount;
                RegisterDataStoreObject(verseVote);
            }

            var actualAmount = repository.GetVerseRating(verse.Id);

            Assert.IsTrue(Math.Abs(actualAmount - expected) < 0.00001);
        }
        public void SuccessfulCreateAndInsertOfAVerseVote()
        {
            IVerseVoteRepository repository = GetRepositoryWithEnrolledUnitOfWork();
            Verse verse = CreateAndRegisterVerse<CandidateVerseType, NoviceAuthorityType, HaikuPoem>();
            var profileVoter = CreateAndRegisterUserProfile<LegendAuthorityType>();
            VerseVote verseVote = new VerseVote
                                  {
                                      Amount = Rand.Next(0, 50),
                                      Date = DateTime.UtcNow,
                                      UserProfileId = profileVoter.Id,
                                      VerseId = verse.Id
                                  };

            RegisterDataStoreObject(verseVote);
            var actualVote = repository.Get((vote) => vote.Id == verseVote.Id).FirstOrDefault();

            Assert.IsNotNull(actualVote);
            Assert.AreEqual(verseVote.Id, actualVote.Id);
            Assert.AreEqual(verseVote.Amount, actualVote.Amount);
            Assert.AreEqual(verseVote.Date, actualVote.Date);
            Assert.AreEqual(verseVote.UserProfileId, actualVote.UserProfileId);
            Assert.AreEqual(verseVote.VerseId, actualVote.VerseId);
        }