From 1e389f4d6569c7a77cd19b41211760c935574e08 Mon Sep 17 00:00:00 2001 From: RunasSudo Date: Sun, 24 Sep 2017 01:23:43 +1000 Subject: [PATCH] Basic ballot casting --- eos/base/election.py | 14 ++++++++++---- eos/base/tests.py | 26 +++++++++++++++++--------- 2 files changed, 27 insertions(+), 13 deletions(-) diff --git a/eos/base/election.py b/eos/base/election.py index cea1e09..feabd1e 100644 --- a/eos/base/election.py +++ b/eos/base/election.py @@ -17,15 +17,18 @@ from eos.core.objects import * from eos.base.workflow import * -class BallotQuestion(EmbeddedObject): +class Answer(EmbeddedObject): pass -class PlaintextBallotQuestion(BallotQuestion): - choices = ListField(IntField()) +class EncryptedAnswer(EmbeddedObject): + pass + +class NullEncryptedAnswer(EncryptedAnswer): + answer = EmbeddedObjectField() class Ballot(EmbeddedObject): _id = UUIDField() - questions = EmbeddedObjectListField() + encrypted_answers = EmbeddedObjectListField() class Voter(EmbeddedObject): _id = UUIDField() @@ -37,6 +40,9 @@ class Question(EmbeddedObject): class ApprovalQuestion(Question): choices = ListField(StringField()) +class ApprovalAnswer(Answer): + choices = ListField(IntField()) + class Election(TopLevelObject): _id = UUIDField() workflow = EmbeddedObjectField(Workflow) # Once saved, we don't care what kind of workflow it is diff --git a/eos/base/tests.py b/eos/base/tests.py index c6ca686..458644d 100644 --- a/eos/base/tests.py +++ b/eos/base/tests.py @@ -37,17 +37,10 @@ class ElectionTestCase(TestCase): for i in range(3): election.voters.append(Voter()) - question = ApprovalQuestion() - question.prompt = 'President' - question.choices.append('John Smith') - question.choices.append('Joe Bloggs') - question.choices.append('John Q. Public') + question = ApprovalQuestion(prompt='President', choices=['John Smith', 'Joe Bloggs', 'John Q. Public']) election.questions.append(question) - question = ApprovalQuestion() - question.prompt = 'Chairman' - question.choices.append('John Doe') - question.choices.append('Andrew Citizen') + question = ApprovalQuestion(prompt='Chairman', choices=['John Doe', 'Andrew Citizen']) election.questions.append(question) election.save() @@ -61,3 +54,18 @@ class ElectionTestCase(TestCase): election.workflow.get_task('eos.base.workflow.TaskConfigureElection').exit() self.assertEqual(election.workflow.get_task('eos.base.workflow.TaskConfigureElection').status, WorkflowTask.Status.EXITED) self.assertEqual(election.workflow.get_task('eos.base.workflow.TaskOpenVoting').status, WorkflowTask.Status.READY) + + election.save() + + # Cast ballots + VOTES = [[[0], [0]], [[0, 1], [1]], [[2], [0]]] + + for i in range(3): + ballot = Ballot() + for j in range(2): + answer = ApprovalAnswer(choices=VOTES[i][j]) + encrypted_answer = NullEncryptedAnswer(answer=answer) + ballot.encrypted_answers.append(encrypted_answer) + election.voters[i].ballots.append(ballot) + + election.save()