diff --git a/src/ekklesia_portal/lib/vvvote/election_config.py b/src/ekklesia_portal/lib/vvvote/election_config.py index df0b4c41..6c288766 100644 --- a/src/ekklesia_portal/lib/vvvote/election_config.py +++ b/src/ekklesia_portal/lib/vvvote/election_config.py @@ -31,8 +31,11 @@ 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 @@ -40,8 +43,17 @@ def ballot_to_vvvote_question(ballot, question_id=1): 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"], @@ -49,9 +61,9 @@ def voting_phase_to_vvvote_election_config(module_config, phase) -> vvvote_schem 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( diff --git a/tests/lib/vvvote/test_election_config.py b/tests/lib/vvvote/test_election_config.py index 837c36f5..78f7e01f 100644 --- a/tests/lib/vvvote/test_election_config.py +++ b/tests/lib/vvvote/test_election_config.py @@ -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)] @@ -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