mirror of
https://github.com/ae-utbm/sith.git
synced 2026-04-22 03:03:13 +00:00
create default club roles on club creation
This commit is contained in:
@@ -1,11 +1,14 @@
|
||||
from datetime import timedelta
|
||||
|
||||
import pytest
|
||||
from django.conf import settings
|
||||
from django.db import ProgrammingError
|
||||
from django.test import Client
|
||||
from django.urls import reverse
|
||||
from django.utils.timezone import localdate
|
||||
from model_bakery import baker
|
||||
from model_bakery.recipe import Recipe
|
||||
from pytest_django.asserts import assertRedirects
|
||||
|
||||
from club.models import Club, ClubRole, Membership
|
||||
from core.baker_recipes import subscriber_user
|
||||
@@ -47,3 +50,78 @@ def test_club_list(client: Client, nb_additional_clubs: int, is_fragment):
|
||||
headers = {"HX-Request": True} if is_fragment else {}
|
||||
res = client.get(reverse("club:club_list"), headers=headers)
|
||||
assert res.status_code == 200
|
||||
|
||||
|
||||
def assert_club_created(club_name: str):
|
||||
club = Club.objects.last()
|
||||
assert club.name == club_name
|
||||
assert club.board_group.name == f"{club_name} - Bureau"
|
||||
assert club.members_group.name == f"{club_name} - Membres"
|
||||
# default roles should be added on club creation,
|
||||
# whether the creation happens on the admin site or on the user site
|
||||
assert list(club.roles.values("name", "is_presidency", "is_board")) == [
|
||||
{"name": "Président⸱e", "is_presidency": True, "is_board": True},
|
||||
{"name": "Trésorier⸱e", "is_presidency": False, "is_board": True},
|
||||
{"name": "Membre actif⸱ve", "is_presidency": False, "is_board": False},
|
||||
{"name": "Curieux⸱euse", "is_presidency": False, "is_board": False},
|
||||
]
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_create_view(admin_client: Client):
|
||||
"""Test that the club creation view works well"""
|
||||
res = admin_client.get(reverse("club:club_new"))
|
||||
assert res.status_code == 200
|
||||
res = admin_client.post(
|
||||
reverse("club:club_new"),
|
||||
data={"name": "foo", "parent": settings.SITH_MAIN_CLUB_ID},
|
||||
)
|
||||
club = Club.objects.last()
|
||||
assertRedirects(res, club.get_absolute_url())
|
||||
assert_club_created("foo")
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
def test_default_roles_for_club_with_roles_fails():
|
||||
"""Test that an Error is raised if trying to create
|
||||
default roles for a club that already has roles.
|
||||
"""
|
||||
club = baker.make(Club)
|
||||
baker.make(ClubRole, club=club)
|
||||
with pytest.raises(ProgrammingError):
|
||||
club.create_default_roles()
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
class TestAdminInterface:
|
||||
def test_create(self, admin_client: Client):
|
||||
"""Test the creation of a club via the admin interface."""
|
||||
res = admin_client.post(
|
||||
reverse("admin:club_club_add"),
|
||||
data={
|
||||
"name": "foo",
|
||||
"parent": settings.SITH_MAIN_CLUB_ID,
|
||||
"address": "Rome",
|
||||
},
|
||||
)
|
||||
assertRedirects(res, reverse("admin:club_club_changelist"))
|
||||
assert_club_created("foo")
|
||||
|
||||
def test_change(self, admin_client: Client):
|
||||
"""Test the edition of a club via the admin interface."""
|
||||
club = baker.make(Club)
|
||||
res = admin_client.post(
|
||||
reverse("admin:club_club_change", kwargs={"object_id": club.id}),
|
||||
data={
|
||||
"name": "foo",
|
||||
"page": club.page_id,
|
||||
"home": club.home_id,
|
||||
"address": club.address,
|
||||
},
|
||||
)
|
||||
assertRedirects(res, reverse("admin:club_club_changelist"))
|
||||
club.refresh_from_db()
|
||||
assert club.name == "foo"
|
||||
# Club roles shouldn't be modified when editing the club on the admin interface
|
||||
# This club had no roles beforehand, therefore it shouldn't have roles now.
|
||||
assert not club.roles.exists()
|
||||
|
||||
Reference in New Issue
Block a user