from django.contrib.auth import get_user_model from django.shortcuts import reverse from django.test import TransactionTestCase User = get_user_model() class TestRegister(TransactionTestCase): def setUp(self) -> None: self.password = "theonering" self.email = "sauron@mordor.middleearth" self.first_name = "Sauron" self.last_name = "The Lord of the Rings" def test_get_register_page(self): response = self.client.get(reverse("web:register")) assert response.status_code == 200 def test_create_user_account(self): response = self.client.post( reverse("web:register"), { "email": self.email, "password1": self.password, "password2": self.password, "first_name": self.first_name, "last_name": self.last_name, }, ) user = User.objects.filter( username=self.email, email=self.email, first_name=self.first_name, last_name=self.last_name, ).first() assert user is not None assert response.status_code == 302 assert response.url == reverse("web:login") def test_create_user_account_distinct_password(self): response = self.client.post( reverse("web:register"), { "email": self.email, "password1": self.password, "password2": "otherpassword", "first_name": self.first_name, "last_name": self.last_name, }, ) assert not User.objects.filter( username=self.email, email=self.email, first_name=self.first_name, last_name=self.last_name, ).exists() assert response.status_code == 400 def test_create_user_account_no_first_name(self): response = self.client.post( reverse("web:register"), { "email": self.email, "password1": self.password, "password2": "otherpassword", "first_name": "", "last_name": self.last_name, }, ) assert not User.objects.filter( username=self.email, email=self.email, first_name="", last_name=self.last_name, ).exists() assert response.status_code == 400 def test_create_user_account_no_last_name(self): response = self.client.post( reverse("web:register"), { "email": self.email, "password1": self.password, "password2": self.password, "first_name": self.first_name, "last_name": "", }, ) assert not User.objects.filter( username=self.email, email=self.email, first_name=self.first_name, last_name="", ).exists() assert response.status_code == 400 def test_create_user_account_already_existing(self): assert User.objects.all().count() == 0 User.objects.create_user( email=self.email, username=self.email, ) response = self.client.post( reverse("web:register"), { "email": self.email, "password1": self.password, "password2": self.password, "first_name": self.first_name, "last_name": self.last_name, }, ) assert not User.objects.filter( username=self.email, email=self.email, first_name=self.first_name, last_name="", ).exists() assert response.status_code == 400