Esempio n. 1
0
        public void Ballot_TwoPeople()
        {
            new Election
            {
                NumberToElect = 2,
                NumberExtra   = 0,
                // CanReceive = ElectionModel.CanVoteOrReceive.All
            }.ForTests();

            var ballots = new[]
            {
                new Ballot().ForTests()
            };

            var votes = new[]
            {
                new Vote().ForTests(ballots[0], SamplePeople[0]),
                new Vote().ForTests(ballots[0], SamplePeople[1])
            };

            var model = new ElectionAnalyzerNormal(_fakes); // election, votes, ballots, SamplePeople);

            model.AnalyzeEverything();

            var results = model.Results.OrderBy(r => r.Rank).ToList();

            results.Count.ShouldEqual(2);

            var result1 = results[0];

            result1.VoteCount.ShouldEqual(1);
            result1.Rank.ShouldEqual(1);
            result1.Section.ShouldEqual(ResultHelper.Section.Top);

            var result2 = results[1];

            result2.VoteCount.ShouldEqual(1);
            result2.Rank.ShouldEqual(2);
            result2.Section.ShouldEqual(ResultHelper.Section.Top);

            var resultSummaryFinal = model.ResultSummaryFinal;

            resultSummaryFinal.BallotsNeedingReview.ShouldEqual(0);
            resultSummaryFinal.NumBallotsWithManual.ShouldEqual(1);

            resultSummaryFinal.DroppedOffBallots.ShouldEqual(0);
            resultSummaryFinal.InPersonBallots.ShouldEqual(1);
            resultSummaryFinal.MailedInBallots.ShouldEqual(0);
            resultSummaryFinal.CalledInBallots.ShouldEqual(0);
            resultSummaryFinal.OnlineBallots.ShouldEqual(0);
            resultSummaryFinal.ImportedBallots.ShouldEqual(0);
            resultSummaryFinal.Custom1Ballots.ShouldEqual(0);
            resultSummaryFinal.Custom2Ballots.ShouldEqual(0);
            resultSummaryFinal.Custom3Ballots.ShouldEqual(0);
            resultSummaryFinal.NumEligibleToVote.ShouldEqual(6);
            resultSummaryFinal.NumVoters.ShouldEqual(1);
            resultSummaryFinal.ResultType.ShouldEqual(ResultType.Final);
        }
Esempio n. 2
0
        public void Ballot_TwoPeople_AllSpoiled()
        {
            new Election
            {
                NumberToElect = 2,
                NumberExtra   = 0,
                // CanReceive = ElectionModel.CanVoteOrReceive.All
            }.ForTests();

            var ballots = new[]
            {
                new Ballot().ForTests()
            };

            var votes = new[]
            {
                new Vote().ForTests(ballots[0], SamplePeople[6]),
                new Vote().ForTests(ballots[0], SamplePeople[7])
            };

            var model = new ElectionAnalyzerNormal(_fakes);//, election, votes, ballots, SamplePeople);

            model.AnalyzeEverything();

            var results = model.Results.OrderBy(r => r.Rank).ToList();

            results.Count.ShouldEqual(0);

            ballots[0].StatusCode.ShouldEqual(BallotStatusEnum.Ok);
            votes[0].StatusCode.ShouldEqual(VoteStatusCode.Spoiled);
            votes[1].StatusCode.ShouldEqual(VoteStatusCode.Spoiled);

            //var spoiledCount = votes.Count(v => v.InvalidReasonGuid.HasValue || v.PersonIneligibleReasonGuid.HasValue || v.PersonCombinedInfo != v.PersonCombinedInfoInVote);
            //spoiledCount.ShouldEqual(2);

            var resultSummaryFinal = model.ResultSummaryFinal;

            resultSummaryFinal.BallotsNeedingReview.ShouldEqual(0);
            resultSummaryFinal.NumBallotsWithManual.ShouldEqual(1);

            resultSummaryFinal.DroppedOffBallots.ShouldEqual(0);
            resultSummaryFinal.InPersonBallots.ShouldEqual(1);
            resultSummaryFinal.MailedInBallots.ShouldEqual(0);
            resultSummaryFinal.CalledInBallots.ShouldEqual(0);
            resultSummaryFinal.OnlineBallots.ShouldEqual(0);
            resultSummaryFinal.NumEligibleToVote.ShouldEqual(6);
            resultSummaryFinal.NumVoters.ShouldEqual(1);
            resultSummaryFinal.ResultType.ShouldEqual(ResultType.Final);
        }
Esempio n. 3
0
        public void Ballot_TwoPeople_NameExtended()
        {
            new Election
            {
                NumberToElect = 2,
                NumberExtra   = 0,
                // CanReceive = ElectionModel.CanVoteOrReceive.All
            }.ForTests();

            var ballots = new[]
            {
                new Ballot().ForTests()
            };

            var votes = new[] {
                new Vote().ForTests(ballots[0], SamplePeople[0]),
                new Vote().ForTests(ballots[0], SamplePeople[1]),
            };

            votes[0].PersonCombinedInfo = "ab";             // info in the vote is smaller, from an original version of the person

            var model = new ElectionAnalyzerNormal(_fakes); //, election, vVoteInfos, ballots, SamplePeople);

            model.AnalyzeEverything();

            var results = model.Results.OrderBy(r => r.Rank).ToList();

            results.Count.ShouldEqual(2);

            var resultSummaryFinal = model.ResultSummaryFinal;

            resultSummaryFinal.BallotsNeedingReview.ShouldEqual(0);
            resultSummaryFinal.NumBallotsWithManual.ShouldEqual(1);

            resultSummaryFinal.DroppedOffBallots.ShouldEqual(0);
            resultSummaryFinal.InPersonBallots.ShouldEqual(1);
            resultSummaryFinal.MailedInBallots.ShouldEqual(0);
            resultSummaryFinal.CalledInBallots.ShouldEqual(0);
            resultSummaryFinal.OnlineBallots.ShouldEqual(0);
            resultSummaryFinal.NumEligibleToVote.ShouldEqual(6);
            resultSummaryFinal.NumVoters.ShouldEqual(1);
            resultSummaryFinal.ResultType.ShouldEqual(ResultType.Final);
        }
Esempio n. 4
0
        public void ElectionTieWithTieBreakTiedInExtraSection2()
        {
            new Election
            {
                NumberToElect = 2,
                NumberExtra   = 2
            }.ForTests();

            var ballots = new[]
            {
                new Ballot().ForTests(),
                new Ballot().ForTests(),
                new Ballot().ForTests(),
            };

            // test wanted:
            //  person 0 = 2  TieBreak:
            //  person 1 = 1            2
            //  ---Extra
            //  person 2 = 1            1
            //  person 3 = 1            1
            //  ---
            //ballots:
            //  Ballot 0: 0,1
            //  Ballot 1: 0,2
            //  Ballot 2: 3,spoiled
            var votes = new[]
            {
                new Vote().ForTests(ballots[0], SamplePeople[0]),
                new Vote().ForTests(ballots[0], SamplePeople[1]),
                new Vote().ForTests(ballots[1], SamplePeople[0]),
                new Vote().ForTests(ballots[1], SamplePeople[2]),
                new Vote().ForTests(ballots[2], SamplePeople[3]),
                new Vote().ForTests(ballots[2], IneligibleReasonEnum.Ineligible_Other)
            };

            var model = new ElectionAnalyzerNormal(_fakes); // election, votes, ballots, SamplePeople);

            model.AnalyzeEverything();

            var summary = model.ResultSummaryFinal;

            summary.NumBallotsWithManual.ShouldEqual(3);
            summary.SpoiledBallots.ShouldEqual(0);
            summary.SpoiledVotes.ShouldEqual(1);
            summary.BallotsNeedingReview.ShouldEqual(0);

            var results = model.Results.OrderBy(r => r.Rank).ToList();

            results.Count.ShouldEqual(4);

            var resultTies = model.ResultTies.OrderBy(rt => rt.TieBreakGroup).ToList();

            resultTies.Count.ShouldEqual(1);
            resultTies[0].NumToElect.ShouldEqual(1);
            resultTies[0].NumInTie.ShouldEqual(3);
            resultTies[0].TieBreakRequired.ShouldEqual(true);

            results[0].IsTied.ShouldEqual(false);
            results[0].CloseToPrev.ShouldEqual(false);
            results[0].CloseToNext.ShouldEqual(true);
            results[0].Section.ShouldEqual(ResultHelper.Section.Top);
            results[0].TieBreakRequired.ShouldEqual(false);
            results[0].ForceShowInOther.ShouldEqual(false);

            results[1].IsTied.ShouldEqual(true);
            results[1].TieBreakGroup.ShouldEqual(1);
            results[1].CloseToPrev.ShouldEqual(true);
            results[1].CloseToNext.ShouldEqual(true);
            results[1].Section.ShouldEqual(ResultHelper.Section.Top);
            results[1].TieBreakRequired.ShouldEqual(true);
            results[1].ForceShowInOther.ShouldEqual(false);

            results[2].IsTied.ShouldEqual(true);
            results[2].TieBreakGroup.ShouldEqual(1);
            results[2].CloseToPrev.ShouldEqual(true);
            results[2].CloseToNext.ShouldEqual(true);
            results[2].Section.ShouldEqual(ResultHelper.Section.Extra);
            results[2].TieBreakRequired.ShouldEqual(true);
            results[2].ForceShowInOther.ShouldEqual(false);

            results[3].IsTied.ShouldEqual(true);
            results[3].TieBreakGroup.ShouldEqual(1);
            results[3].CloseToPrev.ShouldEqual(true);
            results[3].CloseToNext.ShouldEqual(false);
            results[3].Section.ShouldEqual(ResultHelper.Section.Extra);
            results[3].TieBreakRequired.ShouldEqual(true);
            results[3].ForceShowInOther.ShouldEqual(false);


            // apply tie break counts
            results[1].TieBreakCount = 2;
            results[2].TieBreakCount = 1;
            results[3].TieBreakCount = 1;

            model.AnalyzeEverything();

            results = model.Results.OrderBy(r => r.Rank).ToList();

            results.Count.ShouldEqual(4);

            resultTies = model.ResultTies.OrderBy(rt => rt.TieBreakGroup).ToList();

            resultTies.Count.ShouldEqual(1);
            resultTies[0].NumToElect.ShouldEqual(1);
            resultTies[0].NumInTie.ShouldEqual(3);
            resultTies[0].TieBreakRequired.ShouldEqual(true);

            // not resolved
            resultTies[0].IsResolved.ShouldEqual(false);

            results[0].IsTied.ShouldEqual(false);
            results[0].CloseToPrev.ShouldEqual(false);
            results[0].CloseToNext.ShouldEqual(true);
            results[0].Section.ShouldEqual(ResultHelper.Section.Top);
            results[0].TieBreakRequired.ShouldEqual(false);
            results[0].ForceShowInOther.ShouldEqual(false);

            results[1].IsTied.ShouldEqual(true);
            results[1].TieBreakGroup.ShouldEqual(1);
            results[1].CloseToPrev.ShouldEqual(true);
            results[1].CloseToNext.ShouldEqual(true);
            results[1].Section.ShouldEqual(ResultHelper.Section.Top);
            results[1].TieBreakRequired.ShouldEqual(true);
            results[1].ForceShowInOther.ShouldEqual(false);

            results[2].IsTied.ShouldEqual(true);
            results[2].TieBreakGroup.ShouldEqual(1);
            results[2].CloseToPrev.ShouldEqual(true);
            results[2].CloseToNext.ShouldEqual(true);
            results[2].Section.ShouldEqual(ResultHelper.Section.Extra);
            results[2].TieBreakRequired.ShouldEqual(true);
            results[2].ForceShowInOther.ShouldEqual(false);

            results[3].IsTied.ShouldEqual(true);
            results[3].TieBreakGroup.ShouldEqual(1);
            results[3].CloseToPrev.ShouldEqual(true);
            results[3].CloseToNext.ShouldEqual(false);
            results[3].Section.ShouldEqual(ResultHelper.Section.Extra);
            results[3].TieBreakRequired.ShouldEqual(true);
            results[3].ForceShowInOther.ShouldEqual(false);
        }
Esempio n. 5
0
        public void ElectionTieSpanningTopExtraOther()
        {
            new Election
            {
                ElectionGuid  = _electionGuid,
                NumberToElect = 2,
                NumberExtra   = 2
            }.ForTests();

            var ballots = new[]
            {
                new Ballot().ForTests(),
                new Ballot().ForTests(),
                new Ballot().ForTests(),
            };

            // results wanted:
            //  person 0 = 2 votes
            //  person 1 = 1
            // ---
            //  person 2 = 1
            //  person 3 = 1
            // --
            //  person 4 = 1
            var votes = new[]
            {
                new Vote().ForTests(ballots[0], SamplePeople[0]),
                new Vote().ForTests(ballots[0], SamplePeople[1]),
                new Vote().ForTests(ballots[1], SamplePeople[0]),
                new Vote().ForTests(ballots[1], SamplePeople[2]),
                new Vote().ForTests(ballots[2], SamplePeople[3]),
                new Vote().ForTests(ballots[2], SamplePeople[4]),
            };

            var model = new ElectionAnalyzerNormal(_fakes); // election, votes, ballots, SamplePeople);

            model.AnalyzeEverything();

            var summary = model.ResultSummaryFinal;

            summary.NumBallotsWithManual.ShouldEqual(3);
            summary.SpoiledBallots.ShouldEqual(0);
            summary.SpoiledVotes.ShouldEqual(0);
            summary.BallotsNeedingReview.ShouldEqual(0);

            var results    = model.Results.OrderBy(r => r.Rank).ToList();
            var resultTies = model.ResultTies.OrderBy(rt => rt.TieBreakGroup).ToList();

            resultTies.Count.ShouldEqual(1);
            resultTies[0].NumToElect.ShouldEqual(1);
            resultTies[0].NumInTie.ShouldEqual(4);
            resultTies[0].TieBreakRequired.ShouldEqual(true);

            results.Count.ShouldEqual(5);

            results[0].IsTied.ShouldEqual(false);
            results[0].CloseToPrev.ShouldEqual(false);
            results[0].CloseToNext.ShouldEqual(true);
            results[0].Section.ShouldEqual(ResultHelper.Section.Top);
            results[0].TieBreakRequired.ShouldEqual(false);
            results[0].ForceShowInOther.ShouldEqual(false);

            results[1].IsTied.ShouldEqual(true);
            results[1].TieBreakGroup.ShouldEqual(1);
            results[1].CloseToPrev.ShouldEqual(true);
            results[1].CloseToNext.ShouldEqual(true);
            results[1].Section.ShouldEqual(ResultHelper.Section.Top);
            results[1].TieBreakRequired.ShouldEqual(true);
            results[1].ForceShowInOther.ShouldEqual(false);

            results[2].IsTied.ShouldEqual(true);
            results[2].TieBreakGroup.ShouldEqual(1);
            results[2].CloseToPrev.ShouldEqual(true);
            results[2].CloseToNext.ShouldEqual(true);
            results[2].Section.ShouldEqual(ResultHelper.Section.Extra);
            results[2].TieBreakRequired.ShouldEqual(true);
            results[2].ForceShowInOther.ShouldEqual(false);

            results[3].IsTied.ShouldEqual(true);
            results[3].TieBreakGroup.ShouldEqual(1);
            results[3].CloseToPrev.ShouldEqual(true);
            results[3].CloseToNext.ShouldEqual(true);
            results[3].Section.ShouldEqual(ResultHelper.Section.Extra);
            results[3].TieBreakRequired.ShouldEqual(true);
            results[3].ForceShowInOther.ShouldEqual(false);

            results[4].IsTied.ShouldEqual(true);
            results[4].TieBreakGroup.ShouldEqual(1);
            results[4].CloseToPrev.ShouldEqual(true);
            results[4].CloseToNext.ShouldEqual(false);
            results[4].Section.ShouldEqual(ResultHelper.Section.Other);
            results[4].ForceShowInOther.ShouldEqual(true);
            results[4].TieBreakRequired.ShouldEqual(true);
            results[4].ForceShowInOther.ShouldEqual(true);
        }
Esempio n. 6
0
        public void Election_3_people_with_3_way_Tie()
        {
            new Election
            {
                NumberToElect = 1,
                NumberExtra   = 0
            }.ForTests();

            var ballots = new[]
            {
                new Ballot().ForTests(),
                new Ballot().ForTests(),
                new Ballot().ForTests(),
            };

            var votes = new[]
            {
                new Vote {
                    SingleNameElectionCount = 10
                }.ForTests(ballots[0], SamplePeople[0]),
                new Vote {
                    SingleNameElectionCount = 10
                }.ForTests(ballots[1], SamplePeople[1]),
                new Vote {
                    SingleNameElectionCount = 10
                }.ForTests(ballots[2], SamplePeople[2]),
            };

            var model = new ElectionAnalyzerNormal(_fakes); // election, votes, ballots, SamplePeople);

            model.AnalyzeEverything();

            var results = model.Results.OrderBy(r => r.Rank).ToList();

            var resultTies = model.ResultTies.OrderBy(rt => rt.TieBreakGroup).ToList();

            resultTies.Count.ShouldEqual(1);
            resultTies[0].NumToElect.ShouldEqual(1);
            resultTies[0].NumInTie.ShouldEqual(3);
            resultTies[0].TieBreakRequired.ShouldEqual(true);

            results.Count.ShouldEqual(3);

            var result1 = results[0];

            result1.VoteCount.ShouldEqual(1);
            result1.Rank.ShouldEqual(1);
            result1.Section.ShouldEqual(ResultHelper.Section.Top);
            result1.IsTied.ShouldEqual(true);
            result1.TieBreakGroup.ShouldEqual(1);
            result1.TieBreakRequired = true;

            var result2 = results[1];

            result2.VoteCount.ShouldEqual(1);
            result2.Rank.ShouldEqual(2);
            result2.Section.ShouldEqual(ResultHelper.Section.Other);
            result2.IsTied.ShouldEqual(true);
            result2.TieBreakGroup.ShouldEqual(1);
            result2.TieBreakRequired = true;
            result2.ForceShowInOther = true;

            var result3 = results[2];

            result3.VoteCount.ShouldEqual(1);
            result3.Rank.ShouldEqual(3);
            result3.Section.ShouldEqual(ResultHelper.Section.Other);
            result3.IsTied.ShouldEqual(true);
            result3.TieBreakGroup.ShouldEqual(1);
            result3.TieBreakRequired = true;
            result3.ForceShowInOther = true;
        }
Esempio n. 7
0
        public void NSA_Election_1()
        {
            new Election
            {
                ElectionType  = ElectionTypeEnum.Nsa,
                ElectionMode  = ElectionModeEnum.Normal,
                NumberToElect = 2,
            }.ForTests();

            var ballots = new[]
            {
                new Ballot().ForTests(),
                new Ballot().ForTests(),
                new Ballot().ForTests(),
            };

            var votes = new[]
            {
                new Vote().ForTests(ballots[0], SamplePeople[0]),
                new Vote().ForTests(ballots[0], SamplePeople[1]),

                new Vote().ForTests(ballots[1], SamplePeople[0]),
                new Vote().ForTests(ballots[1], SamplePeople[1]),

                new Vote().ForTests(ballots[2], SamplePeople[0]),
                new Vote().ForTests(ballots[2], SamplePeople[2]),
            };

            var model = new ElectionAnalyzerNormal(_fakes); // election, votes, ballots, SamplePeople);

            model.AnalyzeEverything();

            var results = model.Results.OrderBy(r => r.Rank).ToList();

            results.Count.ShouldEqual(3);

            var result1 = results[0];

            result1.VoteCount.ShouldEqual(3);
            result1.Rank.ShouldEqual(1);
            result1.Section.ShouldEqual(ResultHelper.Section.Top);

            var result2 = results[1];

            result2.VoteCount.ShouldEqual(2);
            result2.Rank.ShouldEqual(2);
            result2.Section.ShouldEqual(ResultHelper.Section.Top);

            var result3 = results[2];

            result3.VoteCount.ShouldEqual(1);
            result3.Rank.ShouldEqual(3);
            result3.Section.ShouldEqual(ResultHelper.Section.Other);

            var resultSummaryFinal = model.ResultSummaryFinal;

            resultSummaryFinal.BallotsNeedingReview.ShouldEqual(0);
            resultSummaryFinal.NumBallotsWithManual.ShouldEqual(3);

            resultSummaryFinal.DroppedOffBallots.ShouldEqual(0);
            resultSummaryFinal.InPersonBallots.ShouldEqual(1);
            resultSummaryFinal.MailedInBallots.ShouldEqual(0);
            resultSummaryFinal.CalledInBallots.ShouldEqual(0);
            resultSummaryFinal.OnlineBallots.ShouldEqual(0);
            resultSummaryFinal.NumEligibleToVote.ShouldEqual(6);
            resultSummaryFinal.NumVoters.ShouldEqual(1);
            resultSummaryFinal.ResultType.ShouldEqual(ResultType.Final);
        }