diff --git a/accounts/tests.py b/accounts/tests.py index 5f83a1e..a1d432d 100644 --- a/accounts/tests.py +++ b/accounts/tests.py @@ -19,6 +19,8 @@ from django.urls import reverse from django.test import TestCase, Client, override_settings from django.contrib.auth import authenticate +from .models import AccountConfirmChallenge + class LoginTest(TestCase): """ @@ -56,7 +58,7 @@ class LoginTest(TestCase): } resp = c.post(reverse("accounts.login"), payload) self.assertEqual(resp.status_code, 302) - self.assertEqual(resp.headers["location"], reverse("accounts.protected")) + self.assertEqual(resp.headers["location"], reverse("accounts.home")) # email login works paylaod = { @@ -65,7 +67,7 @@ class LoginTest(TestCase): } resp = c.post(reverse("accounts.login"), payload) self.assertEqual(resp.status_code, 302) - self.assertEqual(resp.headers["location"], reverse("accounts.protected")) + self.assertEqual(resp.headers["location"], reverse("accounts.home")) # authentication failure when wrong credentials are provided payload = { @@ -76,3 +78,65 @@ class LoginTest(TestCase): resp = self.client.post(reverse("accounts.login"), paylaod) self.assertEqual(resp.status_code, 401) self.assertEqual(b"Login Failed" in resp.content, True) + + +class RegistrationTest(TestCase): + def test_register_template_works(self): + """ + Tests if register template renders + """ + resp = self.client.get(reverse("accounts.register")) + self.assertEqual(b"Free Forge Ecosystem" in resp.content, True) + + def test_register_works(self): + """ + Tests if register works + """ + c = Client() + + # passwords don't match + msg = { + "username": "register_user", + "password": "password", + "email": "register_user@example.com", + "confirm_password": "foo@example.com", + } + # resp = c.post(reverse("accounts.register"), msg) + # self.assertEqual(resp.status_code, 400) + + # register user + msg["confirm_password"] = msg["password"] + resp = c.post(reverse("accounts.register"), msg) + self.assertEqual(resp.status_code, 302) + + user = get_user_model().objects.get(username=msg["username"]) + self.assertEqual(user.is_active, False) + challenge = AccountConfirmChallenge.objects.get(owned_by=user) + + pending_url = challenge.pending_url() + self.assertEqual(resp.headers["location"], pending_url) + + resp = c.post(reverse("accounts.verify.resend", args=(challenge.public_ref,))) + self.assertEqual(resp.status_code, 302) + self.assertEqual(resp.headers["location"], pending_url) + + resp = c.post(challenge.verification_link()) + self.assertEqual(resp.status_code, 302) + self.assertEqual(resp.headers["location"], reverse("accounts.login")) + user.refresh_from_db() + self.assertEqual(user.is_active, True) + + old_email = msg["email"] + + # duplicate username + msg["email"] = "new_register_user_email@example.com" + resp = c.post(reverse("accounts.register"), msg) + self.assertEqual(resp.status_code, 400) + self.assertEqual(b"Username is already registered" in resp.content, True) + + # duplicate email + msg["username"] = "new_register_user_email" + msg["email"] = old_email + resp = c.post(reverse("accounts.register"), msg) + self.assertEqual(resp.status_code, 400) + self.assertEqual(b"Email is already registered" in resp.content, True)