1
0
mirror of https://gitlab.com/animath/si/plateforme-corres2math.git synced 2025-04-28 13:32:40 +00:00

Compare commits

...

5 Commits

Author SHA1 Message Date
Yohann D'ANELLO
aed9f457c3 Test custom CAS user authentication 2020-11-03 15:25:47 +01:00
Yohann D'ANELLO
6afa1ea40b Test to change mailing list subscription when an email address got updated 2020-11-03 15:16:08 +01:00
Yohann D'ANELLO
e98540a2a8 Test search participation objects 2020-11-03 15:12:33 +01:00
Yohann D'ANELLO
7353ecfd5f Admins don't have any participation 2020-11-03 14:46:00 +01:00
Yohann D'ANELLO
0a3fffe21e Test leave team 2020-11-03 14:43:51 +01:00
4 changed files with 95 additions and 4 deletions

View File

@ -1,6 +1,7 @@
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from django.contrib.sites.models import Site
from django.core.management import call_command
from django.test import TestCase
from django.urls import reverse
from registration.models import StudentRegistration
@ -376,6 +377,45 @@ class TestStudentParticipation(TestCase):
self.assertRedirects(response, reverse("participation:team_detail", args=(self.team.pk,)), 302, 200)
self.assertTrue(Team.objects.filter(trigram="BBB", participation__problem=3).exists())
def test_leave_team(self):
"""
A user is in a team, and leaves it.
"""
# User is not in a team
response = self.client.post(reverse("participation:team_leave"))
self.assertEqual(response.status_code, 403)
self.user.registration.team = self.team
self.user.registration.save()
# Team is pending validation
self.team.participation.valid = False
self.team.participation.save()
response = self.client.post(reverse("participation:team_leave"))
self.assertEqual(response.status_code, 403)
# Team is valid
self.team.participation.valid = True
self.team.participation.save()
response = self.client.post(reverse("participation:team_leave"))
self.assertEqual(response.status_code, 403)
# Unauthenticated users are redirected to login page
self.client.logout()
response = self.client.get(reverse("participation:team_leave"))
self.assertRedirects(response, reverse("login") + "?next=" + reverse("participation:team_leave"), 302, 200)
self.client.force_login(self.user)
self.team.participation.valid = None
self.team.participation.save()
response = self.client.post(reverse("participation:team_leave"))
self.assertRedirects(response, reverse("index"), 302, 200)
self.user.registration.refresh_from_db()
self.assertIsNone(self.user.registration.team)
self.assertFalse(Team.objects.filter(pk=self.team.pk).exists())
def test_no_myparticipation_redirect_nomyparticipation(self):
"""
Ensure a permission denied when we search my team participation when we are in no team.
@ -469,7 +509,7 @@ class TestStudentParticipation(TestCase):
self.assertEqual(resp.status_code, 403)
class TestAdminForbidden(TestCase):
class TestAdmin(TestCase):
def setUp(self) -> None:
self.user = User.objects.create_superuser(
username="admin@example.com",
@ -478,6 +518,25 @@ class TestAdminForbidden(TestCase):
)
self.client.force_login(self.user)
def test_research(self):
"""
Try to search some things.
"""
team = Team.objects.create(
name="Best team ever",
trigram="BTE",
)
call_command("rebuild_index", "--noinput", "--verbosity", 0)
response = self.client.get(reverse("haystack_search") + "?q=" + team.name)
self.assertEqual(response.status_code, 200)
self.assertTrue(response.context["object_list"])
response = self.client.get(reverse("haystack_search") + "?q=" + team.trigram)
self.assertEqual(response.status_code, 200)
self.assertTrue(response.context["object_list"])
def test_create_team_forbidden(self):
"""
Ensure that an admin can't create a team.
@ -500,9 +559,23 @@ class TestAdminForbidden(TestCase):
))
self.assertTrue(response.status_code, 403)
def test_leave_team_forbidden(self):
"""
Ensure that an admin can't leave a team.
"""
response = self.client.get(reverse("participation:team_leave"))
self.assertTrue(response.status_code, 403)
def test_my_team_forbidden(self):
"""
Ensure that an admin can't access to "My team".
"""
response = self.client.get(reverse("participation:my_team_detail"))
self.assertEqual(response.status_code, 403)
def test_my_participation_forbidden(self):
"""
Ensure that an admin can't access to "My participation".
"""
response = self.client.get(reverse("participation:my_participation_detail"))
self.assertEqual(response.status_code, 403)

View File

@ -316,7 +316,7 @@ class TeamLeaveView(LoginRequiredMixin, TemplateView):
def dispatch(self, request, *args, **kwargs):
if not request.user.is_authenticated:
return self.handle_no_permission()
if not request.user.registration.team:
if not request.user.registration.participates or not request.user.registration.team:
raise PermissionDenied(_("You are not in a team."))
if request.user.registration.team.participation.valid is not None:
raise PermissionDenied(_("The team is already validated or the validation is pending."))

View File

@ -9,6 +9,7 @@ from ..tables import RegistrationTable
def search_table(results):
model_class = results[0].object.__class__
table_class = Table
if issubclass(model_class, Registration):
table_class = RegistrationTable
elif issubclass(model_class, Team):
@ -17,8 +18,6 @@ def search_table(results):
table_class = ParticipationTable
elif issubclass(model_class, Video):
table_class = VideoTable
else:
table_class = Table
return table_class([result.object for result in results], prefix=model_class._meta.model_name)

View File

@ -1,6 +1,7 @@
import os
from corres2math.tokens import email_validation_token
from django.conf import settings
from django.contrib.auth.models import User
from django.contrib.contenttypes.models import ContentType
from django.contrib.sites.models import Site
@ -10,6 +11,7 @@ from django.urls import reverse
from django.utils.encoding import force_bytes
from django.utils.http import urlsafe_base64_encode
from .auth import CustomAuthUser
from .models import AdminRegistration, CoachRegistration, Registration, StudentRegistration
@ -179,6 +181,14 @@ class TestRegistration(TestCase):
"""
Update the user information, for each type of user.
"""
# To test the modification of mailing lists
from participation.models import Team
self.student.registration.team = Team.objects.create(
name="toto",
trigram="TOT",
)
self.student.registration.save()
for user, data in [(self.user, dict(role="Bot")),
(self.student, dict(student_class=11, school="Sky")),
(self.coach, dict(professional_activity="God"))]:
@ -317,6 +327,15 @@ class TestRegistration(TestCase):
self.assertEqual(response.status_code, 200)
self.assertTrue(response.context["object_list"])
def test_init_cas(self):
"""
Load custom CAS authentication
"""
self.assertEqual(settings.CAS_AUTH_CLASS, "registration.auth.CustomAuthUser")
attr = CustomAuthUser(self.user.username).attributs()
self.assertEqual(attr["matrix_username"], self.user.registration.matrix_username)
self.assertEqual(attr["display_name"], str(self.user.registration))
def test_not_implemented_error(self):
# Only for coverage
self.assertRaises(NotImplementedError, lambda: Registration().type)