plateforme-corres2math/apps/participation/tests.py

199 lines
7.8 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):
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):
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):
response = self.client.get(reverse("participation:my_team_detail"))
self.assertTrue(response.status_code, 200)
def test_team_detail(self):
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):
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):
response = self.client.get(reverse("participation:my_participation_detail"))
self.assertTrue(response.status_code, 200)
2020-09-27 14:52:52 +00:00
def test_participation_detail(self):
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):
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):
response = self.client.post(reverse("participation:create_team"), data=dict(
name="Test team",
trigram="TES",
grant_animath_access_videos=False,
))
self.assertTrue(response.status_code, 200)
def test_join_team_forbidden(self):
team = Team.objects.create(name="Test", trigram="TES")
response = self.client.post(reverse("participation:join_team"), data=dict(
access_code=team.access_code,
))
self.assertTrue(response.status_code, 200)
def test_my_team_forbidden(self):
response = self.client.get(reverse("participation:my_team_detail"))
self.assertTrue(response.status_code, 200)