umap/umap/tests/test_team_views.py
Yohan Boniface 13735a5739 chore: use our own Team model
We suppose we'll quickly want more than a name, like a description
or a logo_url, and maybe a access_status or permissions…
2024-08-30 15:53:18 +02:00

131 lines
4.4 KiB
Python

import pytest
from django.urls import reverse
from umap.models import Team
pytestmark = pytest.mark.django_db
def test_can_see_team_maps(client, map, team):
map.team = team
map.save()
url = reverse("team_maps", args=(team.pk,))
response = client.get(url)
assert response.status_code == 200
assert map.name in response.content.decode()
def test_user_can_see_their_teams(client, team, user):
user.teams.add(team)
user.save()
url = reverse("user_teams")
client.login(username=user.username, password="123123")
response = client.get(url)
assert response.status_code == 200
assert team.name in response.content.decode()
def test_can_create_a_team(client, user):
assert not Team.objects.count()
url = reverse("team_new")
client.login(username=user.username, password="123123")
response = client.post(url, {"name": "my new team", "members": [user.pk]})
assert response.status_code == 302
assert response["Location"] == "/en/me/teams"
assert Team.objects.count() == 1
team = Team.objects.first()
assert team.name == "my new team"
assert team in user.teams.all()
def test_can_edit_a_team_name(client, user, team):
user.teams.add(team)
user.save()
assert Team.objects.count() == 1
url = reverse("team_update", args=(team.pk,))
client.login(username=user.username, password="123123")
response = client.post(url, {"name": "my new team", "members": [user.pk]})
assert response.status_code == 302
assert response["Location"] == "/en/me/teams"
assert Team.objects.count() == 1
modified = Team.objects.first()
assert modified.name == "my new team"
assert modified in user.teams.all()
def test_can_add_user_to_team(client, user, user2, team):
user.teams.add(team)
user.save()
assert Team.objects.count() == 1
url = reverse("team_update", args=(team.pk,))
client.login(username=user.username, password="123123")
response = client.post(url, {"name": team.name, "members": [user.pk, user2.pk]})
assert response.status_code == 302
assert response["Location"] == "/en/me/teams"
assert Team.objects.count() == 1
modified = Team.objects.first()
assert user in modified.users.all()
assert user2 in modified.users.all()
def test_can_remove_user_from_team(client, user, user2, team):
user.teams.add(team)
user.save()
user2.teams.add(team)
user2.save()
assert Team.objects.count() == 1
url = reverse("team_update", args=(team.pk,))
client.login(username=user.username, password="123123")
response = client.post(url, {"name": team.name, "members": [user.pk]})
assert response.status_code == 302
assert response["Location"] == "/en/me/teams"
assert Team.objects.count() == 1
modified = Team.objects.first()
assert user in modified.users.all()
assert user2 not in modified.users.all()
def test_cannot_edit_a_team_if_not_member(client, user, user2, team):
user.teams.add(team)
user.save()
assert Team.objects.count() == 1
url = reverse("team_update", args=(team.pk,))
client.login(username=user2.username, password="456456")
response = client.post(url, {"name": "my new team", "members": [user.pk]})
assert response.status_code == 403
def test_can_delete_a_team(client, user, team):
user.teams.add(team)
user.save()
assert Team.objects.count() == 1
url = reverse("team_delete", args=(team.pk,))
client.login(username=user.username, password="123123")
response = client.post(url)
assert response.status_code == 302
assert response["Location"] == "/en/me/teams"
assert Team.objects.count() == 0
def test_cannot_delete_a_team_if_not_member(client, user, user2, team):
user.teams.add(team)
user.save()
assert Team.objects.count() == 1
url = reverse("team_delete", args=(team.pk,))
client.login(username=user2.username, password="456456")
response = client.post(url)
assert response.status_code == 403
assert Team.objects.count() == 1
def test_cannot_delete_a_team_if_more_than_one_member(client, user, user2, team):
user.teams.add(team)
user.save()
user2.teams.add(team)
user2.save()
assert Team.objects.count() == 1
url = reverse("team_delete", args=(team.pk,))
client.login(username=user.username, password="123123")
response = client.post(url)
assert response.status_code == 400
assert Team.objects.count() == 1