Browse Source

_associate_demo_check was crashing for returning users after cleaning up old checks.

pull/109/head
Pēteris Caune 8 years ago
parent
commit
d9171adb1d
2 changed files with 38 additions and 8 deletions
  1. +24
    -1
      hc/accounts/tests/test_login.py
  2. +14
    -7
      hc/accounts/views.py

+ 24
- 1
hc/accounts/tests/test_login.py View File

@ -4,6 +4,7 @@ from django.test import TestCase
from hc.api.models import Check
from django.conf import settings
class LoginTestCase(TestCase):
def test_it_sends_link(self):
@ -24,7 +25,8 @@ class LoginTestCase(TestCase):
# And email sent
self.assertEqual(len(mail.outbox), 1)
self.assertEqual(mail.outbox[0].subject, 'Log in to {0}'.format(getattr(settings, "SITE_NAME")))
subject = "Log in to %s" % settings.SITE_NAME
self.assertEqual(mail.outbox[0].subject, subject)
# And check should be associated with the new user
check_again = Check.objects.get(code=check.code)
@ -34,3 +36,24 @@ class LoginTestCase(TestCase):
self.client.session["bad_link"] = True
self.client.get("/accounts/login/")
assert "bad_link" not in self.client.session
def test_it_handles_missing_welcome_check(self):
# This check does not exist in database,
# but login should still work.
session = self.client.session
session["welcome_code"] = "00000000-0000-0000-0000-000000000000"
session.save()
form = {"email": "[email protected]"}
r = self.client.post("/accounts/login/", form)
assert r.status_code == 302
# An user should have been created
self.assertEqual(User.objects.count(), 1)
# And email sent
self.assertEqual(len(mail.outbox), 1)
subject = "Log in to %s" % settings.SITE_NAME
self.assertEqual(mail.outbox[0].subject, subject)

+ 14
- 7
hc/accounts/views.py View File

@ -39,17 +39,24 @@ def _make_user(email):
def _associate_demo_check(request, user):
if "welcome_code" in request.session:
if "welcome_code" not in request.session:
return
try:
check = Check.objects.get(code=request.session["welcome_code"])
except Check.DoesNotExist:
return
# Only associate demo check if it doesn't have an owner already.
if check.user:
return
# Only associate demo check if it doesn't have an owner already.
if check.user is None:
check.user = user
check.save()
check.user = user
check.save()
check.assign_all_channels()
check.assign_all_channels()
del request.session["welcome_code"]
del request.session["welcome_code"]
def login(request):


Loading…
Cancel
Save