mirror of
https://github.com/ae-utbm/sith.git
synced 2026-03-13 15:15:03 +00:00
refactor TestElectionForm
This commit is contained in:
@@ -1,12 +1,13 @@
|
|||||||
from datetime import timedelta
|
from datetime import timedelta
|
||||||
|
|
||||||
import pytest
|
import pytest
|
||||||
from pytest_django.asserts import assertRedirects
|
|
||||||
from django.conf import settings
|
from django.conf import settings
|
||||||
from django.test import Client, TestCase
|
from django.test import Client, TestCase
|
||||||
from django.urls import reverse
|
from django.urls import reverse
|
||||||
from django.utils.timezone import now
|
from django.utils.timezone import now
|
||||||
from model_bakery import baker
|
from model_bakery import baker
|
||||||
|
from model_bakery.recipe import Recipe
|
||||||
|
from pytest_django.asserts import assertRedirects
|
||||||
|
|
||||||
from core.baker_recipes import subscriber_user
|
from core.baker_recipes import subscriber_user
|
||||||
from core.models import Group, User
|
from core.models import Group, User
|
||||||
@@ -52,137 +53,103 @@ class TestElectionUpdateView(TestElection):
|
|||||||
)
|
)
|
||||||
assert response.status_code == 403
|
assert response.status_code == 403
|
||||||
|
|
||||||
|
|
||||||
class TestElectionForm(TestCase):
|
class TestElectionForm(TestCase):
|
||||||
@classmethod
|
@classmethod
|
||||||
def setUpTestData(cls):
|
def setUpTestData(cls):
|
||||||
cls.election = baker.make(
|
cls.election = baker.make(Election, end_date=now() + timedelta(days=1))
|
||||||
Election,
|
|
||||||
end_date = now() + timedelta(days=1),
|
|
||||||
)
|
|
||||||
cls.group = baker.make(Group)
|
cls.group = baker.make(Group)
|
||||||
cls.election.vote_groups.add(cls.group)
|
cls.election.vote_groups.add(cls.group)
|
||||||
cls.election.edit_groups.add(cls.group)
|
cls.election.edit_groups.add(cls.group)
|
||||||
lists = baker.make(ElectionList, election=cls.election, _quantity=2, _bulk_create=True)
|
lists = baker.make(
|
||||||
cls.roles = baker.make(Role, election=cls.election, _quantity=2, _bulk_create=True)
|
ElectionList, election=cls.election, _quantity=2, _bulk_create=True
|
||||||
|
)
|
||||||
|
cls.roles = baker.make(
|
||||||
|
Role, election=cls.election, _quantity=2, _bulk_create=True
|
||||||
|
)
|
||||||
users = baker.make(User, _quantity=4, _bulk_create=True)
|
users = baker.make(User, _quantity=4, _bulk_create=True)
|
||||||
|
recipe = Recipe(Candidature)
|
||||||
cls.cand = [
|
cls.cand = [
|
||||||
baker.make(Candidature, role=cls.roles[0], user=users[0], election_list=lists[0]),
|
recipe.prepare(role=cls.roles[0], user=users[0], election_list=lists[0]),
|
||||||
baker.make(Candidature, role=cls.roles[0], user=users[1], election_list=lists[1]),
|
recipe.prepare(role=cls.roles[0], user=users[1], election_list=lists[1]),
|
||||||
baker.make(Candidature, role=cls.roles[1], user=users[2], election_list=lists[0]),
|
recipe.prepare(role=cls.roles[1], user=users[2], election_list=lists[0]),
|
||||||
baker.make(Candidature, role=cls.roles[1], user=users[3], election_list=lists[1]),
|
recipe.prepare(role=cls.roles[1], user=users[3], election_list=lists[1]),
|
||||||
]
|
]
|
||||||
cls.url = reverse("election:vote", kwargs={"election_id": cls.election.id})
|
Candidature.objects.bulk_create(cls.cand)
|
||||||
|
cls.vote_url = reverse("election:vote", kwargs={"election_id": cls.election.id})
|
||||||
|
cls.detail_url = reverse(
|
||||||
|
"election:detail", kwargs={"election_id": cls.election.id}
|
||||||
|
)
|
||||||
|
|
||||||
def test_election_good_form(self):
|
def test_election_good_form(self):
|
||||||
election = self.election
|
postes = (self.roles[0].title, self.roles[1].title)
|
||||||
group = self.group
|
|
||||||
roles = self.roles
|
|
||||||
cand = self.cand
|
|
||||||
|
|
||||||
votes = [
|
votes = [
|
||||||
{
|
{postes[0]: "", postes[1]: str(self.cand[2].id)},
|
||||||
roles[0].title : "",
|
{postes[0]: "", postes[1]: ""},
|
||||||
roles[1].title : str(cand[2].id),
|
{postes[0]: str(self.cand[0].id), postes[1]: str(self.cand[2].id)},
|
||||||
},
|
{postes[0]: str(self.cand[0].id), postes[1]: str(self.cand[3].id)},
|
||||||
|
|
||||||
{
|
|
||||||
roles[0].title : "",
|
|
||||||
roles[1].title : "",
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
roles[0].title : str(cand[0].id),
|
|
||||||
roles[1].title : str(cand[2].id),
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
roles[0].title : str(cand[0].id),
|
|
||||||
roles[1].title : str(cand[3].id),
|
|
||||||
},
|
|
||||||
]
|
]
|
||||||
|
|
||||||
voters = subscriber_user.make(_quantity=len(votes), _bulk_create=True)
|
voters = subscriber_user.make(_quantity=len(votes), _bulk_create=True)
|
||||||
group.users.set(voters)
|
self.group.users.set(voters)
|
||||||
|
|
||||||
for voter, vote in zip(voters, votes):
|
for voter, vote in zip(voters, votes, strict=True):
|
||||||
assert election.can_vote(voter)
|
assert self.election.can_vote(voter)
|
||||||
self.client.force_login(voter)
|
self.client.force_login(voter)
|
||||||
response = self.client.post(self.url, data = vote)
|
response = self.client.post(self.vote_url, data=vote)
|
||||||
assertRedirects(
|
assertRedirects(response, self.detail_url)
|
||||||
response,
|
|
||||||
reverse("election:detail", kwargs={"election_id": election.id})
|
assert set(self.election.voters.all()) == set(voters)
|
||||||
)
|
assert self.election.results == {
|
||||||
|
postes[0]: {
|
||||||
assert set(election.voters.all()) == set(voters)
|
self.cand[0].user.username: {"percent": 50.0, "vote": 2},
|
||||||
assert election.results == {
|
self.cand[1].user.username: {"percent": 0.0, "vote": 0},
|
||||||
roles[0].title: {
|
|
||||||
cand[0].user.username: {"percent": 50.0, "vote": 2},
|
|
||||||
cand[1].user.username: {"percent": 0.0, "vote": 0},
|
|
||||||
"blank vote": {"percent": 50.0, "vote": 2},
|
"blank vote": {"percent": 50.0, "vote": 2},
|
||||||
"total vote": 4,
|
"total vote": 4,
|
||||||
},
|
},
|
||||||
roles[1].title: {
|
postes[1]: {
|
||||||
cand[2].user.username: {"percent": 50.0, "vote": 2},
|
self.cand[2].user.username: {"percent": 50.0, "vote": 2},
|
||||||
cand[3].user.username: {"percent": 25.0, "vote": 1},
|
self.cand[3].user.username: {"percent": 25.0, "vote": 1},
|
||||||
"blank vote": {"percent": 25.0, "vote": 1},
|
"blank vote": {"percent": 25.0, "vote": 1},
|
||||||
"total vote": 4,
|
"total vote": 4,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
def test_election_bad_form(self):
|
def test_election_bad_form(self):
|
||||||
election = self.election
|
postes = (self.roles[0].title, self.roles[1].title)
|
||||||
group = self.group
|
|
||||||
roles = self.roles
|
|
||||||
cand = self.cand
|
|
||||||
unknow_user = baker.make(User, _quantity=1, _bulk_create=True)
|
|
||||||
|
|
||||||
votes = [
|
votes = [
|
||||||
|
{postes[0]: "", postes[1]: str(self.cand[0].id)}, # wrong candidate
|
||||||
|
{postes[0]: ""},
|
||||||
{
|
{
|
||||||
roles[0].title : "",
|
postes[0]: "0123456789", # unknow users
|
||||||
roles[1].title : str(cand[0].id), #wrong candidate
|
postes[1]: str(subscriber_user.make().id), # not a candidate
|
||||||
},
|
},
|
||||||
|
{},
|
||||||
{
|
|
||||||
roles[0].title : "",
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
roles[0].title : "0123456789", #unknow users
|
|
||||||
roles[1].title : str(unknow_user[0].id), #not a candidate
|
|
||||||
},
|
|
||||||
|
|
||||||
{
|
|
||||||
},
|
|
||||||
]
|
]
|
||||||
|
|
||||||
voters = subscriber_user.make(_quantity=len(votes), _bulk_create=True)
|
voters = subscriber_user.make(_quantity=len(votes), _bulk_create=True)
|
||||||
group.users.set(voters)
|
self.group.users.set(voters)
|
||||||
|
|
||||||
for voter, vote in zip(voters, votes):
|
for voter, vote in zip(voters, votes, strict=True):
|
||||||
assert election.can_vote(voter)
|
|
||||||
self.client.force_login(voter)
|
self.client.force_login(voter)
|
||||||
response = self.client.post(self.url, data = vote)
|
response = self.client.post(self.vote_url, data=vote)
|
||||||
assertRedirects(
|
assertRedirects(response, self.detail_url)
|
||||||
response,
|
|
||||||
reverse("election:detail", kwargs={"election_id": election.id})
|
|
||||||
)
|
|
||||||
|
|
||||||
assert election.results == {
|
assert self.election.results == {
|
||||||
roles[0].title: {
|
postes[0]: {
|
||||||
cand[0].user.username: {"percent": 0.0, "vote": 0},
|
self.cand[0].user.username: {"percent": 0.0, "vote": 0},
|
||||||
cand[1].user.username: {"percent": 0.0, "vote": 0},
|
self.cand[1].user.username: {"percent": 0.0, "vote": 0},
|
||||||
"blank vote": {"percent": 100.0, "vote": 2},
|
"blank vote": {"percent": 100.0, "vote": 2},
|
||||||
"total vote": 2,
|
"total vote": 2,
|
||||||
},
|
},
|
||||||
roles[1].title: {
|
postes[1]: {
|
||||||
cand[2].user.username: {"percent": 0.0, "vote": 0},
|
self.cand[2].user.username: {"percent": 0.0, "vote": 0},
|
||||||
cand[3].user.username: {"percent": 0.0, "vote": 0},
|
self.cand[3].user.username: {"percent": 0.0, "vote": 0},
|
||||||
"blank vote": {"percent": 100.0, "vote": 2},
|
"blank vote": {"percent": 100.0, "vote": 2},
|
||||||
"total vote": 2,
|
"total vote": 2,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
@pytest.mark.django_db
|
@pytest.mark.django_db
|
||||||
def test_election_create_list_permission(client: Client):
|
def test_election_create_list_permission(client: Client):
|
||||||
election = baker.make(Election, end_candidature=now() + timedelta(hours=1))
|
election = baker.make(Election, end_candidature=now() + timedelta(hours=1))
|
||||||
@@ -245,4 +212,4 @@ def test_election_results():
|
|||||||
"blank vote": {"percent": 25.0, "vote": 25},
|
"blank vote": {"percent": 25.0, "vote": 25},
|
||||||
"total vote": 100,
|
"total vote": 100,
|
||||||
},
|
},
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user