plateforme-corres2math/apps/participation/tests.py

232 lines
8.6 KiB
Python
Raw Normal View History

from django.contrib.auth.models import User
from django.test import TestCase
from django.urls import reverse
from registration.models import StudentRegistration
from .models import Team
class TestStudentParticipation(TestCase):
def setUp(self) -> None:
self.user = User.objects.create(
first_name="Toto",
last_name="Toto",
email="toto@example.com",
password="toto",
)
StudentRegistration.objects.create(
user=self.user,
student_class=12,
school="Earth",
give_contact_to_animath=True,
email_confirmed=True,
)
self.team = Team.objects.create(
name="Super team",
trigram="AAA",
access_code="azerty",
grant_animath_access_videos=True,
)
self.client.force_login(self.user)
# TODO Remove these lines
str(self.team)
str(self.team.participation)
def test_create_team(self):
2020-10-30 18:46:46 +00:00
"""
Try to create a team.
"""
response = self.client.get(reverse("participation:create_team"))
self.assertEqual(response.status_code, 200)
response = self.client.post(reverse("participation:create_team"), data=dict(
name="Test team",
trigram="123",
grant_animath_access_videos=False,
))
self.assertEqual(response.status_code, 200)
response = self.client.post(reverse("participation:create_team"), data=dict(
name="Test team",
trigram="TES",
grant_animath_access_videos=False,
))
self.assertTrue(Team.objects.filter(trigram="TES").exists())
team = Team.objects.get(trigram="TES")
self.assertRedirects(response, reverse("participation:team_detail", args=(team.pk,)), 302, 200)
# Already in a team
response = self.client.post(reverse("participation:create_team"), data=dict(
name="Test team 2",
trigram="TET",
grant_animath_access_videos=False,
))
def test_join_team(self):
2020-10-30 18:46:46 +00:00
"""
Try to join an existing team.
"""
response = self.client.get(reverse("participation:join_team"))
self.assertEqual(response.status_code, 200)
team = Team.objects.create(name="Test", trigram="TES")
response = self.client.post(reverse("participation:join_team"), data=dict(
access_code="éééééé",
))
self.assertEqual(response.status_code, 200)
response = self.client.post(reverse("participation:join_team"), data=dict(
access_code=team.access_code,
))
self.assertRedirects(response, reverse("participation:team_detail", args=(team.pk,)), 302, 200)
self.assertTrue(Team.objects.filter(trigram="TES").exists())
# Already joined
response = self.client.post(reverse("participation:join_team"), data=dict(
access_code=team.access_code,
))
2020-09-27 14:40:14 +00:00
self.assertEqual(response.status_code, 403)
def test_no_myteam_redirect_noteam(self):
2020-10-30 18:46:46 +00:00
"""
Test redirection.
"""
response = self.client.get(reverse("participation:my_team_detail"))
self.assertTrue(response.status_code, 200)
def test_team_detail(self):
2020-10-30 18:46:46 +00:00
"""
Try to display the information of a team.
"""
self.user.registration.team = self.team
self.user.registration.save()
response = self.client.get(reverse("participation:my_team_detail"))
self.assertRedirects(response, reverse("participation:team_detail", args=(self.team.pk,)), 302, 200)
response = self.client.get(reverse("participation:team_detail", args=(self.team.pk,)))
self.assertEqual(response.status_code, 200)
def test_update_team(self):
2020-10-30 18:46:46 +00:00
"""
Try to update team information.
"""
self.user.registration.team = self.team
self.user.registration.save()
response = self.client.get(reverse("participation:update_team", args=(self.team.pk,)))
self.assertEqual(response.status_code, 200)
# Form is invalid
response = self.client.post(reverse("participation:update_team", args=(self.team.pk,)), data=dict(
name="Updated team name",
trigram="BBB",
grant_animath_access_videos=True,
problem=42,
))
self.assertEqual(response.status_code, 200)
response = self.client.post(reverse("participation:update_team", args=(self.team.pk,)), data=dict(
name="Updated team name",
trigram="BBB",
grant_animath_access_videos=True,
problem=3,
))
self.assertRedirects(response, reverse("participation:team_detail", args=(self.team.pk,)), 302, 200)
self.assertTrue(Team.objects.filter(trigram="BBB", participation__problem=3).exists())
2020-09-27 15:06:05 +00:00
def test_no_myparticipation_redirect_nomyparticipation(self):
2020-10-30 18:46:46 +00:00
"""
Ensure a permission denied when we search my team participation when we are in no team.
"""
2020-09-27 15:06:05 +00:00
response = self.client.get(reverse("participation:my_participation_detail"))
2020-10-30 18:46:46 +00:00
self.assertEqual(response.status_code, 403)
2020-09-27 15:06:05 +00:00
2020-09-27 14:52:52 +00:00
def test_participation_detail(self):
2020-10-30 18:46:46 +00:00
"""
Try to display the detail of a team participation.
"""
2020-09-27 14:52:52 +00:00
self.user.registration.team = self.team
self.user.registration.save()
2020-10-11 14:37:09 +00:00
response = self.client.get(reverse("participation:my_participation_detail"))
self.assertRedirects(response,
reverse("participation:participation_detail", args=(self.team.participation.pk,)),
302, 403)
self.team.participation.valid = True
self.team.participation.save()
2020-09-27 15:06:05 +00:00
response = self.client.get(reverse("participation:my_participation_detail"))
self.assertRedirects(response,
reverse("participation:participation_detail", args=(self.team.participation.pk,)),
302, 200)
2020-09-27 14:52:52 +00:00
response = self.client.get(reverse("participation:participation_detail", args=(self.team.participation.pk,)))
self.assertEqual(response.status_code, 200)
def test_upload_video(self):
2020-10-30 18:46:46 +00:00
"""
Try to send a solution video link.
"""
2020-09-27 14:52:52 +00:00
self.user.registration.team = self.team
self.user.registration.save()
2020-10-11 14:37:09 +00:00
self.team.participation.valid = True
self.team.participation.save()
2020-09-27 14:52:52 +00:00
response = self.client.get(reverse("participation:upload_video", args=(self.team.participation.solution.pk,)))
self.assertEqual(response.status_code, 200)
response = self.client.post(reverse("participation:upload_video", args=(self.team.participation.solution.pk,)),
data=dict(link="https://youtube.com/watch?v=73nsrixx7eI"))
self.assertRedirects(response,
reverse("participation:participation_detail", args=(self.team.participation.id,)),
302, 200)
self.team.participation.refresh_from_db()
self.assertEqual(self.team.participation.solution.platform, "youtube")
self.assertEqual(self.team.participation.solution.youtube_code, "73nsrixx7eI")
response = self.client.get(reverse("participation:participation_detail", args=(self.team.participation.pk,)))
self.assertEqual(response.status_code, 200)
class TestAdminForbidden(TestCase):
def setUp(self) -> None:
self.user = User.objects.create_superuser(
username="admin@example.com",
email="admin@example.com",
password="admin",
)
self.client.force_login(self.user)
def test_create_team_forbidden(self):
2020-10-30 18:46:46 +00:00
"""
Ensure that an admin can't create a team.
"""
response = self.client.post(reverse("participation:create_team"), data=dict(
name="Test team",
trigram="TES",
grant_animath_access_videos=False,
))
2020-10-30 18:46:46 +00:00
self.assertEqual(response.status_code, 403)
def test_join_team_forbidden(self):
2020-10-30 18:46:46 +00:00
"""
Ensure that an admin can't join a team.
"""
team = Team.objects.create(name="Test", trigram="TES")
response = self.client.post(reverse("participation:join_team"), data=dict(
access_code=team.access_code,
))
2020-10-30 18:46:46 +00:00
self.assertTrue(response.status_code, 403)
def test_my_team_forbidden(self):
2020-10-30 18:46:46 +00:00
"""
Ensure that an admin can't access to "My team".
"""
response = self.client.get(reverse("participation:my_team_detail"))
2020-10-30 18:46:46 +00:00
self.assertEqual(response.status_code, 403)