156 lines
6.6 KiB
Python
156 lines
6.6 KiB
Python
from corres2math.tokens import email_validation_token
|
|
from django.contrib.auth.models import User
|
|
from django.test import TestCase
|
|
from django.urls import reverse
|
|
from django.utils.encoding import force_bytes
|
|
from django.utils.http import urlsafe_base64_encode
|
|
|
|
from .models import CoachRegistration, Registration, StudentRegistration
|
|
|
|
|
|
class TestIndexPage(TestCase):
|
|
def test_index(self) -> None:
|
|
response = self.client.get(reverse("index"))
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
|
|
class TestRegistration(TestCase):
|
|
def setUp(self) -> None:
|
|
self.user = User.objects.create_superuser(
|
|
username="admin",
|
|
password="admin",
|
|
email="admin@example.com",
|
|
)
|
|
self.client.force_login(self.user)
|
|
|
|
self.student = User.objects.create(email="student@example.com")
|
|
StudentRegistration.objects.create(user=self.student, student_class=11, school="Earth")
|
|
self.coach = User.objects.create(email="coach@example.com")
|
|
CoachRegistration.objects.create(user=self.coach, professional_activity="Teacher")
|
|
|
|
def test_registration(self):
|
|
response = self.client.get(reverse("registration:signup"))
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
# Incomplete form
|
|
response = self.client.post(reverse("registration:signup"), data=dict(
|
|
last_name="Toto",
|
|
first_name="Toto",
|
|
email="toto@example.com",
|
|
password1="azertyuiopazertyuiop",
|
|
password2="azertyuiopazertyuiop",
|
|
role="participant",
|
|
))
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
response = self.client.post(reverse("registration:signup"), data=dict(
|
|
last_name="Toto",
|
|
first_name="Toto",
|
|
email="toto@example.com",
|
|
password1="azertyuiopazertyuiop",
|
|
password2="azertyuiopazertyuiop",
|
|
role="participant",
|
|
student_class=12,
|
|
school="God",
|
|
give_contact_to_animath=False,
|
|
))
|
|
self.assertRedirects(response, reverse("registration:email_validation_sent"), 302, 200)
|
|
self.assertTrue(User.objects.filter(email="toto@example.com").exists())
|
|
|
|
response = self.client.get(reverse("registration:email_validation_sent"))
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
response = self.client.post(reverse("registration:signup"), data=dict(
|
|
last_name="Toto",
|
|
first_name="Coach",
|
|
email="coachtoto@example.com",
|
|
password1="azertyuiopazertyuiop",
|
|
password2="azertyuiopazertyuiop",
|
|
role="coach",
|
|
professional_activity="God",
|
|
give_contact_to_animath=True,
|
|
))
|
|
self.assertRedirects(response, reverse("registration:email_validation_sent"), 302, 200)
|
|
self.assertTrue(User.objects.filter(email="coachtoto@example.com").exists())
|
|
|
|
user = User.objects.get(email="coachtoto@example.com")
|
|
token = email_validation_token.make_token(user)
|
|
uid = urlsafe_base64_encode(force_bytes(user.pk))
|
|
response = self.client.get(reverse("registration:email_validation", kwargs=dict(uidb64=uid, token=token)))
|
|
self.assertEqual(response.status_code, 200)
|
|
user.registration.refresh_from_db()
|
|
self.assertTrue(user.registration.email_confirmed)
|
|
|
|
# Token has expired
|
|
response = self.client.get(reverse("registration:email_validation", kwargs=dict(uidb64=uid, token=token)))
|
|
self.assertEqual(response.status_code, 400)
|
|
|
|
# Uid does not exist
|
|
response = self.client.get(reverse("registration:email_validation", kwargs=dict(uidb64=0, token="toto")))
|
|
self.assertEqual(response.status_code, 400)
|
|
|
|
response = self.client.get(reverse("registration:email_validation_resend", args=(user.pk,)))
|
|
self.assertRedirects(response, reverse("registration:email_validation_sent"), 302, 200)
|
|
|
|
def test_login(self):
|
|
response = self.client.get(reverse("login"))
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
self.client.logout()
|
|
|
|
response = self.client.post(reverse("login"), data=dict(
|
|
username="admin",
|
|
password="toto",
|
|
))
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
response = self.client.post(reverse("login"), data=dict(
|
|
username="admin@example.com",
|
|
password="admin",
|
|
))
|
|
self.assertRedirects(response, reverse("index"), 302, 200)
|
|
|
|
def test_user_detail(self):
|
|
response = self.client.get(reverse("registration:my_account_detail"))
|
|
self.assertRedirects(response, reverse("registration:user_detail", args=(self.user.pk,)))
|
|
|
|
response = self.client.get(reverse("registration:user_detail", args=(self.user.pk,)))
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
def test_update_user(self):
|
|
for user, data in [(self.user, dict(role="Bot")),
|
|
(self.student, dict(student_class=11, school="Sky")),
|
|
(self.coach, dict(professional_activity="God"))]:
|
|
response = self.client.get(reverse("registration:update_user", args=(user.pk,)))
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
response = self.client.post(reverse("registration:update_user", args=(user.pk,)), data=dict(
|
|
first_name="Changed",
|
|
last_name="Name",
|
|
email="new_" + user.email,
|
|
give_contact_to_animath=True,
|
|
))
|
|
self.assertEqual(response.status_code, 200)
|
|
|
|
data.update(
|
|
first_name="Changed",
|
|
last_name="Name",
|
|
email="new_" + user.email,
|
|
give_contact_to_animath=True,
|
|
)
|
|
response = self.client.post(reverse("registration:update_user", args=(user.pk,)), data=data)
|
|
self.assertRedirects(response, reverse("registration:user_detail", args=(user.pk,)), 302, 200)
|
|
user.refresh_from_db()
|
|
self.assertEqual(user.email, user.username)
|
|
self.assertFalse(user.registration.email_confirmed)
|
|
self.assertEqual(user.first_name, "Changed")
|
|
|
|
def test_string_render(self):
|
|
# TODO These string field tests will be removed when used in a template
|
|
str(self.user.registration)
|
|
self.assertRaises(NotImplementedError, lambda: Registration().type)
|
|
self.assertRaises(NotImplementedError, lambda: Registration().form_class)
|
|
str(StudentRegistration().type)
|
|
str(CoachRegistration().type)
|
|
str(self.user.registration.type) # AdminRegistration
|