old_contents: from django.contrib.auth.models import User
  from django.core import mail
  from django.test import TestCase
  from django.test.utils import override_settings
  from hc.api.models import Check
  from django.conf import settings
  
  
  class LoginTestCase(TestCase):
  
      def test_it_sends_link(self):
          check = Check()
          check.save()
  
          session = self.client.session
          session["welcome_code"] = str(check.code)
          session.save()
  
          form = {"email": "alice@example.org"}
  
          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)
  
          # And check should be associated with the new user
          check_again = Check.objects.get(code=check.code)
          assert check_again.user
  
      def test_it_pops_bad_link_from_session(self):
          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": "alice@example.org"}
  
          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)
  
      @override_settings(REGISTRATION_OPEN=False)
      def test_it_obeys_registration_open(self):
          form = {"email": "dan@example.org"}
  
          r = self.client.post("/accounts/login/", form)
          assert r.status_code == 200
          self.assertContains(r, "Incorrect email")
  
new_contents: from django.contrib.auth.models import User
  from django.core import mail
  from django.test import TestCase
  from django.test.utils import override_settings
  from hc.accounts.models import Profile
  from hc.api.models import Check
  from django.conf import settings
  
  
  class LoginTestCase(TestCase):
  
      def test_it_sends_link(self):
          check = Check()
          check.save()
  
          session = self.client.session
          session["welcome_code"] = str(check.code)
          session.save()
  
          form = {"email": "alice@example.org"}
  
          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)
  
          # And check should be associated with the new user
          check_again = Check.objects.get(code=check.code)
          assert check_again.user
  
      def test_it_pops_bad_link_from_session(self):
          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": "alice@example.org"}
  
          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)
  
      @override_settings(REGISTRATION_OPEN=False)
      def test_it_obeys_registration_open(self):
          form = {"email": "dan@example.org"}
  
          r = self.client.post("/accounts/login/", form)
          assert r.status_code == 200
          self.assertContains(r, "Incorrect email")
  
      def test_it_ignores_ces(self):
          alice = User(username="alice", email="alice@example.org")
          alice.save()
  
          form = {"email": "ALICE@EXAMPLE.ORG"}
  
          r = self.client.post("/accounts/login/", form)
          assert r.status_code == 302
  
          # There should be exactly one user:
          self.assertEqual(User.objects.count(), 1)
  
          profile = Profile.objects.for_user(alice)
          self.assertIn("login", profile.token)
  
subject: Add test for case insensitive email addresses.