python-voting/voting/test_voting.py

108 lines
3.0 KiB
Python
Raw Normal View History

2023-04-02 14:31:25 +00:00
import unittest
import voting as V
from voting import QuorumKind, Quorum, Vote, Voting
voters = ['a', 'b', 'c', 'd', 'e', 'f', 'g', 'h', 'i', 'j']
class TestAtLeastOneVoter(unittest.TestCase):
def test_no_voters(self):
self.assertRaises(RuntimeError, Voting,
title="Test",
2023-04-02 14:52:13 +00:00
quorum=Quorum(),
2023-04-02 14:31:25 +00:00
voters=[],
)
def test_one_voter(self):
Voting(title="Test", quorum=Quorum(), voters=['a'])
class TestNoVotesBeforeStart(unittest.TestCase):
def setUp(self) -> None:
self.voting = Voting(title="Test", quorum=Quorum(), voters=voters)
def test_vote_before_started(self):
self.assertRaises(RuntimeError, self.voting.vote, voter='a', vote=Vote.YES)
def test_vote_after_started(self):
self.voting.start()
self.voting.vote(voter='a', vote=Vote.YES)
class TestQuorumSanity(unittest.TestCase):
def test_invalid_absolute_values(self):
self.assertRaises(ValueError, Quorum, kind=QuorumKind.ABSOLUTE, value=0)
self.assertRaises(ValueError, Quorum, kind=QuorumKind.ABSOLUTE, value=-1)
def test_valid_absolute_values(self):
Quorum(kind=QuorumKind.ABSOLUTE, value=1)
def test_invalid_percent_values(self):
self.assertRaises(ValueError, Quorum, kind=QuorumKind.PERCENT, value=0)
self.assertRaises(ValueError, Quorum, kind=QuorumKind.PERCENT, value=-1)
self.assertRaises(ValueError, Quorum, kind=QuorumKind.PERCENT, value=100.1)
def test_valid_percent_values(self):
Quorum(kind=QuorumKind.PERCENT, value=0.1)
Quorum(kind=QuorumKind.PERCENT, value=100)
class TestVoteMustBeLegal(unittest.TestCase):
def setUp(self) -> None:
self.voting = Voting(title="Test", quorum=Quorum(), voters=voters)
self.voting.start()
def test_unknown_voter(self):
self.assertRaises(ValueError, self.voting.vote, voter='z', vote=Vote.YES)
def test_known_voter(self):
self.voting.vote('a', Vote.YES)
class TestResultAbsoluteQuorum(unittest.TestCase):
def setUp(self) -> None:
def new_voting():
v = Voting(
title="Test",
quorum=Quorum(kind=QuorumKind.ABSOLUTE, value=1),
voters=voters,
)
v.start()
return v
self.new_voting = new_voting
def test_quorum(self):
v = self.new_voting()
assert not v.result().quorum_reached
v.vote(voter='a', vote=Vote.YES)
assert v.result().quorum_reached
class TestResultPercentQuorum(unittest.TestCase):
def setUp(self) -> None:
def new_voting():
v = Voting(
title="Test",
quorum=Quorum(kind=QuorumKind.PERCENT, value=15),
voters=voters,
)
v.start()
return v
self.new_voting = new_voting
def test_quorum(self):
v = self.new_voting()
assert not v.result().quorum_reached
v.vote('a', Vote.YES)
assert not v.result().quorum_reached
v.vote('b', Vote.YES)
assert v.result().quorum_reached
if __name__ == '__main__':
unittest.main()