diff --git a/accounts/tests.py b/accounts/tests.py index 9ac7688..79564b2 100644 --- a/accounts/tests.py +++ b/accounts/tests.py @@ -15,8 +15,13 @@ # You should have received a copy of the GNU Affero General Public License # along with this program. If not, see . import time +import os from io import StringIO +from urllib.parse import urlparse, urlunparse +import requests + +from django.core import mail from django.contrib.auth import get_user_model from django.core.management import call_command from django.urls import reverse @@ -128,6 +133,11 @@ class LoginTest(TestCase): class RegistrationTest(TestCase): + def setUp(self): + self.username = "register_user" + self.password = "2i3j4;1qlk2asdf" + self.email = "register_user@example.com" + def test_register_template_works(self): """ Tests if register template renders @@ -143,23 +153,28 @@ class RegistrationTest(TestCase): # passwords don't match msg = { - "username": "register_user", - "password": "2i3j4;1qlk2asdf", - "email": "register_user@example.com", - "confirm_password": "foo@example.com", + "username": self.username, + "password": self.password, + "email": self.email, + "confirm_password": self.email, } resp = c.post(reverse("accounts.register"), msg) self.assertEqual(resp.status_code, 400) # register user - msg["confirm_password"] = msg["password"] + msg["confirm_password"] = self.password resp = c.post(reverse("accounts.register"), msg) self.assertEqual(resp.status_code, 302) - user = get_user_model().objects.get(username=msg["username"]) + user = get_user_model().objects.get(username=self.username) self.assertEqual(user.is_active, False) challenge = AccountConfirmChallenge.objects.get(owned_by=user) + # verify is email is sent + self.assertEqual(len(mail.outbox), 1) + self.assertEqual(challenge.verification_link() in mail.outbox[0].body, True) + self.assertEqual(mail.outbox[0].to, [self.email]) + pending_url = challenge.pending_url() self.assertEqual(resp.headers["location"], pending_url) resend_url = reverse("accounts.verify.resend", args=(challenge.public_ref,)) @@ -167,20 +182,25 @@ class RegistrationTest(TestCase): # visit pending URL resp = c.get(pending_url) self.assertEqual(resp.status_code, 200) - self.assertEqual(str.encode(msg["email"]) in resp.content, True) + self.assertEqual(str.encode(self.email) in resp.content, True) self.assertEqual(str.encode(resend_url) in resp.content, True) resp = c.post(resend_url) self.assertEqual(resp.status_code, 302) self.assertEqual(resp.headers["location"], pending_url) + # check resend + self.assertEqual(len(mail.outbox), 2) + resp = c.get(challenge.verification_link()) self.assertEqual(resp.status_code, 200) self.assertEqual( str.encode(challenge.verification_link()) in resp.content, True ) + # check verification link in email resp = c.post(challenge.verification_link()) + self.assertEqual(resp.status_code, 302) self.assertEqual(resp.headers["location"], reverse("accounts.login")) user.refresh_from_db()