public void ElectionTieSpanningTopExtraOther() { var electionGuid = Guid.NewGuid(); var election = new Election { ElectionGuid = electionGuid, NumberToElect = 2, NumberExtra = 2 }; var location = new Location { LocationGuid = Guid.NewGuid(), ElectionGuid = electionGuid }; var ballots = new List<Ballot> { new Ballot {LocationGuid = location.LocationGuid, BallotGuid = Guid.NewGuid(), StatusCode = BallotStatusEnum.Ok}, new Ballot {LocationGuid = location.LocationGuid, BallotGuid = Guid.NewGuid(), StatusCode = BallotStatusEnum.Ok}, new Ballot {LocationGuid = location.LocationGuid, BallotGuid = Guid.NewGuid(), StatusCode = BallotStatusEnum.Ok}, }; // results wanted: // person 0 = 2 votes // person 1 = 1 // --- // person 2 = 1 // person 3 = 1 // -- // person 4 = 1 var votes = new List<vVoteInfo> { new vVoteInfo {PersonGuid = SamplePeople[0].PersonGuid, BallotGuid = ballots[0].BallotGuid}, new vVoteInfo {PersonGuid = SamplePeople[1].PersonGuid, BallotGuid = ballots[0].BallotGuid}, new vVoteInfo {PersonGuid = SamplePeople[0].PersonGuid, BallotGuid = ballots[1].BallotGuid}, new vVoteInfo {PersonGuid = SamplePeople[2].PersonGuid, BallotGuid = ballots[1].BallotGuid}, new vVoteInfo {PersonGuid = SamplePeople[3].PersonGuid, BallotGuid = ballots[2].BallotGuid}, new vVoteInfo {PersonGuid = SamplePeople[4].PersonGuid, BallotGuid = ballots[2].BallotGuid}, }; foreach (var vVoteInfo in votes) { vVoteInfo.ElectionGuid = electionGuid; vVoteInfo.PersonCombinedInfo = vVoteInfo.PersonCombinedInfoInVote = "zz"; vVoteInfo.BallotStatusCode = BallotStatusEnum.Ok; vVoteInfo.VoteStatusCode = VoteHelper.VoteStatusCode.Ok; } var model = new ElectionAnalyzerNormal(_fakes, election, votes, ballots, SamplePeople); model.GenerateResults(); var summary = model.ResultSummaryAuto; summary.BallotsReceived.ShouldEqual(3); summary.TotalVotes.ShouldEqual(6); summary.SpoiledBallots.ShouldEqual(0); summary.SpoiledVotes.ShouldEqual(0); summary.BallotsNeedingReview.ShouldEqual(0); var results = model.Results.OrderByDescending(r => r.VoteCount).ToList(); var resultTies = model.ResultTies.OrderBy(rt => rt.TieBreakGroup).ToList(); resultTies.Count.ShouldEqual(1); resultTies[0].NumToElect.ShouldEqual(3); 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); }
public void Election_3_people_with_3_way_Tie() { var electionGuid = Guid.NewGuid(); var election = new Election { ElectionGuid = electionGuid, NumberToElect = 1, NumberExtra = 0 }; var location = new Location { LocationGuid = Guid.NewGuid(), ElectionGuid = electionGuid }; var ballot1Guid = Guid.NewGuid(); var ballot2Guid = Guid.NewGuid(); var ballot3Guid = Guid.NewGuid(); var ballots = new List<Ballot> { new Ballot {LocationGuid = location.LocationGuid, BallotGuid = ballot1Guid, StatusCode = BallotStatusEnum.Ok}, new Ballot {LocationGuid = location.LocationGuid, BallotGuid = ballot2Guid, StatusCode = BallotStatusEnum.Ok}, new Ballot {LocationGuid = location.LocationGuid, BallotGuid = ballot3Guid, StatusCode = BallotStatusEnum.Ok}, }; var votes = new List<vVoteInfo> { new vVoteInfo {SingleNameElectionCount = 10, PersonGuid = Guid.NewGuid(), BallotGuid = ballot1Guid}, new vVoteInfo {SingleNameElectionCount = 10, PersonGuid = Guid.NewGuid(), BallotGuid = ballot2Guid}, new vVoteInfo {SingleNameElectionCount = 10, PersonGuid = Guid.NewGuid(), BallotGuid = ballot3Guid}, }; foreach (var vVoteInfo in votes) { vVoteInfo.ElectionGuid = electionGuid; vVoteInfo.PersonCombinedInfo = vVoteInfo.PersonCombinedInfoInVote = "zz"; vVoteInfo.BallotStatusCode = BallotStatusEnum.Ok; vVoteInfo.VoteStatusCode = VoteHelper.VoteStatusCode.Ok; } var model = new ElectionAnalyzerNormal(_fakes, election, votes, ballots, SamplePeople); model.GenerateResults(); var results = model.Results.OrderByDescending(r => r.VoteCount).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; }
public void Ballot_TwoPeople() { var electionGuid = Guid.NewGuid(); var election = new Election { ElectionGuid = electionGuid, NumberToElect = 2, NumberExtra = 0, CanReceive = ElectionModel.CanVoteOrReceive.All }; var personGuid = Guid.NewGuid(); var ballots = new List<Ballot> { new Ballot {BallotGuid = Guid.NewGuid(), StatusCode = BallotStatusEnum.Ok} }; var votes = new List<vVoteInfo> { new vVoteInfo {PersonGuid = personGuid}, new vVoteInfo {PersonGuid = Guid.NewGuid()}, }; foreach (var vVoteInfo in votes) { //vVoteInfo.PersonGuid = personGuid; // all for one person in this test vVoteInfo.ElectionGuid = electionGuid; vVoteInfo.PersonCombinedInfo = vVoteInfo.PersonCombinedInfoInVote = "zz"; vVoteInfo.BallotGuid = ballots.Select(b => b.BallotGuid).First(); vVoteInfo.BallotStatusCode = BallotStatusEnum.Ok; vVoteInfo.VoteStatusCode = VoteHelper.VoteStatusCode.Ok; } var model = new ElectionAnalyzerNormal(_fakes, election, votes, ballots, SamplePeople); model.GenerateResults(); var results = model.Results; 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 resultSummaryAuto = model.ResultSummaryAuto; resultSummaryAuto.BallotsNeedingReview.ShouldEqual(0); resultSummaryAuto.BallotsReceived.ShouldEqual(1); resultSummaryAuto.DroppedOffBallots.ShouldEqual(0); resultSummaryAuto.InPersonBallots.ShouldEqual(1); resultSummaryAuto.MailedInBallots.ShouldEqual(0); resultSummaryAuto.CalledInBallots.ShouldEqual(0); resultSummaryAuto.NumEligibleToVote.ShouldEqual(5); resultSummaryAuto.NumVoters.ShouldEqual(1); resultSummaryAuto.ResultType.ShouldEqual(ResultType.Automatic); }
public void Election_3_people() { var electionGuid = Guid.NewGuid(); var election = new Election { ElectionGuid = electionGuid, NumberToElect = 1, NumberExtra = 0 }; var location = new Location { LocationGuid = Guid.NewGuid(), ElectionGuid = electionGuid }; var ballot1Guid = Guid.NewGuid(); var ballot2Guid = Guid.NewGuid(); var ballot3Guid = Guid.NewGuid(); var ballots = new List<Ballot> { new Ballot {LocationGuid = location.LocationGuid, BallotGuid = ballot1Guid, StatusCode = BallotStatusEnum.Ok}, new Ballot {LocationGuid = location.LocationGuid, BallotGuid = ballot2Guid, StatusCode = BallotStatusEnum.Ok}, new Ballot {LocationGuid = location.LocationGuid, BallotGuid = ballot3Guid, StatusCode = BallotStatusEnum.Ok} }; var person1Guid = Guid.NewGuid(); var votes = new List<vVoteInfo> { new vVoteInfo {SingleNameElectionCount = 33, PersonGuid = person1Guid, BallotGuid = ballot1Guid}, new vVoteInfo {SingleNameElectionCount = 5, PersonGuid = person1Guid, BallotGuid = ballot2Guid}, new vVoteInfo {SingleNameElectionCount = 2, PersonGuid = Guid.NewGuid(), BallotGuid = ballot3Guid}, }; foreach (var vVoteInfo in votes) { vVoteInfo.ElectionGuid = electionGuid; vVoteInfo.PersonCombinedInfo = vVoteInfo.PersonCombinedInfoInVote = "zz"; vVoteInfo.BallotStatusCode = ballots.Single(b => b.BallotGuid == vVoteInfo.BallotGuid).StatusCode; vVoteInfo.VoteStatusCode = VoteHelper.VoteStatusCode.Ok; } var model = new ElectionAnalyzerNormal(_fakes, election, votes, ballots, SamplePeople); model.GenerateResults(); var results = model.Results.OrderByDescending(r => r.VoteCount).ToList(); results.Count.ShouldEqual(2); var result1 = results[0]; result1.VoteCount.ShouldEqual(2); result1.Rank.ShouldEqual(1); result1.Section.ShouldEqual(ResultHelper.Section.Top); result1.IsTied.ShouldEqual(false); var result2 = results[1]; result2.VoteCount.ShouldEqual(1); result2.Rank.ShouldEqual(2); result2.Section.ShouldEqual(ResultHelper.Section.Other); result2.IsTied.ShouldEqual(false); }