public void it_transitions_to_Selection_state_when_Nomination_ends()
        {
            var vt = new VoteTracker();

            vt.CloseNominationPhase();
            Assert.AreEqual(State.SelectionPhase, vt.CurrentState);
        }
        public void it_keeps_track_of_votes_when_many_are_logged()
        {
            var vt = new VoteTracker();

            var u1 = new User("1");
            var u2 = new User("2");
            var u3 = new User("3");
            var u4 = new User("4");
            var u5 = new User("5");

            var r1 = new Restaurant("Gracie's");
            var r2 = new Restaurant("L&E");

            vt.LogVote(u1, r1);
            vt.LogVote(u2, r1);
            vt.LogVote(u3, r2);
            vt.LogVote(u4, r1);
            vt.LogVote(u5, r2);
            vt.LogVote(u1, r1);
            vt.LogVote(u2, r2);
            vt.LogVote(u3, r1);

            Assert.AreEqual(2, vt.VotesForUser(u1));
            Assert.AreEqual(2, vt.VotesForUser(u2));
            Assert.AreEqual(2, vt.VotesForUser(u3));
            Assert.AreEqual(1, vt.VotesForUser(u4));
            Assert.AreEqual(1, vt.VotesForUser(u5));

            Assert.AreEqual(5, vt.VotesForRestaurant(r1));
            Assert.AreEqual(3, vt.VotesForRestaurant(r2));

            Assert.AreEqual(8, vt.TotalVotes);
        }
        public void it_keeps_track_of_votes()
        {
            var vt = new VoteTracker();

            vt.LogVote(new User(), new Restaurant());
            Assert.AreEqual(1, vt.TotalVotes);
        }
        public void it_keeps_track_of_votes_per_restaurant()
        {
            var vt = new VoteTracker();
            var r  = new Restaurant();

            vt.LogVote(new User(), r);
            vt.LogVote(new User(), r);
            vt.LogVote(new User(), r);
            vt.LogVote(new User(), r);
            vt.LogVote(new User(), r);

            Assert.AreEqual(5, vt.VotesForRestaurant(r));
        }
        public void it_keeps_track_of_votes_per_user()
        {
            var vt = new VoteTracker();
            var u  = new User();

            vt.LogVote(u, new Restaurant());
            vt.LogVote(u, new Restaurant());
            vt.LogVote(u, new Restaurant());
            vt.LogVote(u, new Restaurant());
            vt.LogVote(u, new Restaurant());

            Assert.AreEqual(5, vt.VotesForUser(u));
        }
        private static VoteTracker CreateVoteTrackerWithConstraints()
        {
            var MAX_VOTES_SELECTION  = 3;
            var MAX_VOTES_NOMINATION = 2;

            var vt                 = new VoteTracker();
            var nnrConstraint      = new NoNewRestaurantsConstraint(vt);
            var mvpuConstraint_nom = new MaxVotesPerUserConstraint(vt, MAX_VOTES_NOMINATION);
            var mvpuConstraint_sel = new MaxVotesPerUserConstraint(vt, MAX_VOTES_SELECTION);

            vt.SetConstraints(State.NominationPhase, mvpuConstraint_nom);
            vt.SetConstraints(State.SelectionPhase, mvpuConstraint_sel);
            vt.SetConstraints(State.SelectionPhase, nnrConstraint);

            return(vt);
        }
        public void it_resets_vote_counts_on_state_transition()
        {
            var vt = new VoteTracker();

            vt.LogVote(new User(), new Restaurant());
            vt.LogVote(new User(), new Restaurant());
            vt.LogVote(new User(), new Restaurant());
            Assert.AreEqual(3, vt.TotalVotes);

            vt.CloseNominationPhase();
            Assert.AreEqual(0, vt.TotalVotes);

            vt.LogVote(new User(), new Restaurant());
            vt.LogVote(new User(), new Restaurant());
            Assert.AreEqual(2, vt.TotalVotes);
        }
        public void it_constrains_max_votes_per_user_per_state()
        {
            const int MAX_VOTES_PER_USER = 5;

            var u = new User();
            var r = new Restaurant();

            var vt         = new VoteTracker();
            var constraint = new MaxVotesPerUserConstraint(vt, MAX_VOTES_PER_USER);

            vt.SetConstraints(State.NominationPhase, constraint);

            for (var x = 0; x <= (MAX_VOTES_PER_USER + 1); x++)
            {
                vt.LogVote(u, r);
            }

            Assert.Fail("exception not thrown");
        }
示例#9
0
    void RpcSendVote(string s, bool isSuggestion)
    {
        if (isSuggestion)
        {
            --remainingSuggestions;
        }

        EatLocation location;

        if (EatLocation.Presets.TryGetValue(s, out location))
        {
            VoteTracker.AddVote(location);
        }
        else
        {
            VoteTracker.AddVote(s);
        }

        VotesWindow.singleton.RefreshVotes();
    }
        public async Task <CommandResponse <VoteTracker> > RecordUserVote(int voteID, int optionID, bool restrictionsPassed)
        {
            DemandAuthentication();

            //TODO: Fuzzy Trap, ensure this option belongs to the vote

            var  response    = new CommandResponse <VoteTracker>();
            var  userName    = User.Identity.Name;
            bool saveChanges = false;

            var voteRecord = await _db.VoteTracker.Where(x => x.VoteID == voteID && x.VoteOptionID == optionID && x.UserName == userName).FirstOrDefaultAsync();

            if (voteRecord == null)
            {
                voteRecord = new VoteTracker()
                {
                    VoteID             = voteID,
                    VoteOptionID       = optionID,
                    RestrictionsPassed = restrictionsPassed,
                    CreationDate       = CurrentDate,
                    UserName           = User.Identity.Name
                };
                _db.VoteTracker.Add(voteRecord);
                saveChanges = true;
            }
            else if (voteRecord.VoteOptionID != optionID)
            {
                voteRecord.VoteOptionID = optionID;
                saveChanges             = true;
            }

            if (saveChanges)
            {
                await _db.SaveChangesAsync();
            }

            response.Response = voteRecord;
            response.Status   = Status.Success;

            return(response);
        }
示例#11
0
    void RpcSendSuggestion(string s, string desc)
    {
        EatLocation location;

        if (!EatLocation.Presets.TryGetValue(s, out location))
        {
            location = new EatLocation(s, desc);
        }
        VoteTracker.AddVote(location);
        VotesWindow.singleton.RefreshVotes();

        foreach (var player in Players)
        {
            if (player != this)
            {
                ++player.remainingSuggestions;
            }
        }
        if (!isLocalPlayer)
        {
            ReceiveSuggestion.ShowSuggestion(location);
        }
    }
示例#12
0
 void CmdInitCards(string initStr)
 {
     VoteTracker.SetInitString(initStr);
 }
 public MaxVotesPerUserConstraint(VoteTracker voteTracker, int maxVotesPerUser)
     : base(voteTracker)
 {
     _maxVotesPerUser = maxVotesPerUser;
 }
        public void it_is_in_Nomination_state_when_initialized()
        {
            var vt = new VoteTracker();

            Assert.AreEqual(State.NominationPhase, vt.CurrentState);
        }
 protected BaseStateConstraint(VoteTracker voteTracker)
 {
     VoteTracker = voteTracker;
 }
 public NoNewRestaurantsConstraint(VoteTracker vt)
     : base(vt)
 {
 }