Skip to content

Commit

Permalink
VVVote: voting start from voting phase, option for registration start
Browse files Browse the repository at this point in the history
Add an voting module option registration_days_before_voting which allows
to start registration for voting before the actual voting starts.
  • Loading branch information
dpausp committed Jul 10, 2021
1 parent d916d8c commit 16e72a5
Show file tree
Hide file tree
Showing 2 changed files with 26 additions and 8 deletions.
24 changes: 18 additions & 6 deletions src/ekklesia_portal/lib/vvvote/election_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -31,27 +31,39 @@ def ballot_to_vvvote_question(ballot, question_id=1):
question_wording = ballot.name

question = vvvote_schema.Question(
questionWording=question_wording, questionID=question_id, scheme=voting_scheme, options=options,
findWinner=['yesNo', 'score', 'random']
questionWording=question_wording,
questionID=question_id,
scheme=voting_scheme,
options=options,
findWinner=['yesNo', 'score', 'random']
)

return question


def voting_phase_to_vvvote_election_config(module_config, phase) -> vvvote_schema.ElectionConfig:
questions = [ballot_to_vvvote_question(b, ii) for ii, b in enumerate(phase.ballots, start=1)]
end = phase.target
start = end - datetime.timedelta(days=14)

voting_start = phase.voting_start
if voting_start is None:
raise ValueError("Cannot create voting for phase {phase}, voting_start is None")

end = phase.voting_end
if end is None:
raise ValueError("Cannot create voting for phase {phase}, voting_end is None")

registration_days_before_voting = module_config.get("registration_days_before_voting", 0)
registration_start = voting_start - datetime.timedelta(days=registration_days_before_voting)

auth_data = vvvote_schema.OAuthConfig(
eligible=module_config["must_be_eligible"],
external_voting=True,
verified=module_config["must_be_verified"],
nested_groups=[module_config["required_role"]],
serverId=module_config["auth_server_id"],
RegistrationStartDate=start,
RegistrationStartDate=registration_start,
RegistrationEndDate=end,
VotingStart=start,
VotingStart=voting_start,
VotingEnd=end,
)
config = vvvote_schema.ElectionConfig(
Expand Down
10 changes: 8 additions & 2 deletions tests/lib/vvvote/test_election_config.py
Original file line number Diff line number Diff line change
Expand Up @@ -13,12 +13,14 @@ def test_ballot_to_vvvote_question(db_session, ballot, proposition_factory):


def test_voting_phase_to_vvvote_election_config(db_session, ballot_factory, proposition_factory, voting_phase_factory):
voting_phase = voting_phase_factory(status=VotingStatus.PREPARING, target=datetime.datetime.now())
target = datetime.datetime.now()
voting_phase = voting_phase_factory(status=VotingStatus.PREPARING, voting_days=4, target=target)
module_config = {
"must_be_eligible": True,
"must_be_verified": True,
"required_role": "testrole",
"auth_server_id": "testserver"
"auth_server_id": "testserver",
"registration_days_before_voting": 1
}
ballot_1 = ballot_factory()
ballot_1.propositions = [proposition_factory(ballot=ballot_1)]
Expand All @@ -33,3 +35,7 @@ def test_voting_phase_to_vvvote_election_config(db_session, ballot_factory, prop
assert len(config.questions[0].options) == 1
assert len(config.questions[1].options) == 3
assert len(config.questions[2].options) == 5
assert config.authData.VotingStart == target - datetime.timedelta(days=4)
assert config.authData.VotingEnd == target
assert config.authData.RegistrationStartDate == target - datetime.timedelta(days=5)
assert config.authData.RegistrationEndDate == target

0 comments on commit 16e72a5

Please sign in to comment.