def test_stable_sorting_of_equals(self): """Test that in case of a tie we get a stable but random sorting of candidates.""" from nuvavaalit.models import Candidate from nuvavaalit.models import Vote from nuvavaalit.models import Voter from nuvavaalit.views.results import results session = DBSession() session.add(Voter(u"buck.rogers", u"secret", u"Bück", u"Rögers")) session.add(Candidate(2, u"Steven", u"Seagal", u"No pain, no game", u"")) session.add(Candidate(7, u"Jet", u"Li", u"Yin, yang", u"")) session.add(Candidate(11, u"Jean-Claude", u"van Damme", u"No engrish", u"")) session.flush() candidate_two = session.query(Candidate).filter_by(number=2).first() candidate_seven = session.query(Candidate).filter_by(number=7).first() session.add(Vote(candidate_two)) session.add(Vote(candidate_seven)) session.flush() self.assertEquals( results(testing.DummyRequest(statsd=False)), { "others": [], "selected": [ {"name": u"Li, Jet", "number": 7, "percentage": "50.0", "votes": 1}, {"name": u"Seagal, Steven", "number": 2, "percentage": "50.0", "votes": 1}, {"name": u"van Damme, Jean-Claude", "number": 11, "percentage": "0.0", "votes": 0}, ], "threshold": 8, "total_votes": 2, "show_leftovers": False, "voting_percentage": "200.0", }, ) # Rendering the results again will result in the same relative ordering # of the equal votes. self.assertEquals( results(testing.DummyRequest(statsd=False)), { "others": [], "selected": [ {"name": u"Li, Jet", "number": 7, "percentage": "50.0", "votes": 1}, {"name": u"Seagal, Steven", "number": 2, "percentage": "50.0", "votes": 1}, {"name": u"van Damme, Jean-Claude", "number": 11, "percentage": "0.0", "votes": 0}, ], "threshold": 8, "total_votes": 2, "show_leftovers": False, "voting_percentage": "200.0", }, )
def test_no_votes(self): from nuvavaalit.models import Candidate from nuvavaalit.models import Voter from nuvavaalit.views.results import results session = DBSession() session.add(Voter(u"buck.rogers", u"secret", u"Bück", u"Rögers")) session.add(Candidate(2, u"Steven", u"Seagal", u"No pain, no game", u"")) session.add(Candidate(7, u"Jet", u"Li", u"Yin, yang", u"")) session.add(Candidate(11, u"Jean-Claude", u"van Damme", u"No engrish", u"")) session.flush() self.assertEquals( results(testing.DummyRequest(statsd=False)), { "others": [], "selected": [ {"name": u"Li, Jet", "number": 7, "percentage": "0.0", "votes": 0}, {"name": u"Seagal, Steven", "number": 2, "percentage": "0.0", "votes": 0}, {"name": u"van Damme, Jean-Claude", "number": 11, "percentage": "0.0", "votes": 0}, ], "threshold": 8, "total_votes": 0, "show_leftovers": False, "voting_percentage": "0.0", }, )
def test_empty_votes_removed_from_results_listing(self): """Test that in case of a tie we get a stable but random sorting of candidates.""" from nuvavaalit.models import Candidate from nuvavaalit.models import Vote from nuvavaalit.models import Voter from nuvavaalit.views.results import results session = DBSession() session.add(Voter(u"buck.rogers", u"secret", u"Bück", u"Rögers")) session.add(Candidate(Candidate.EMPTY_CANDIDATE, u"empty", u"empty", u"empty", u"empty")) session.add(Candidate(2, u"Steven", u"Seagal", u"No pain, no game", u"")) session.add(Candidate(7, u"Jet", u"Li", u"Yin, yang", u"")) session.add(Candidate(11, u"Jean-Claude", u"van Damme", u"No engrish", u"")) session.flush() candidate_two = session.query(Candidate).filter_by(number=2).first() candidate_seven = session.query(Candidate).filter_by(number=7).first() candidate_empty = session.query(Candidate).filter_by(number=Candidate.EMPTY_CANDIDATE).first() session.add(Vote(candidate_two)) session.add(Vote(candidate_seven)) session.add(Vote(candidate_empty)) session.add(Vote(candidate_empty)) session.flush() # The empty votes do not show up in the results listing but do # affect the number of votes, percentages, etc. self.assertEquals( results(testing.DummyRequest(statsd=False)), { "others": [], "selected": [ {"name": u"Li, Jet", "number": 7, "percentage": "25.0", "votes": 1}, {"name": u"Seagal, Steven", "number": 2, "percentage": "25.0", "votes": 1}, {"name": u"van Damme, Jean-Claude", "number": 11, "percentage": "0.0", "votes": 0}, ], "threshold": 8, "total_votes": 4, "show_leftovers": False, "voting_percentage": "400.0", }, )