| 12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667 |
- import unittest
-
- from django.contrib.auth import authenticate
- from django.core import mail
- from django.test import TestCase
-
- from oscar.core.compat import get_user_model
-
- User = get_user_model()
-
-
- class TestEmailAuthBackend(TestCase):
- def test_authenticates_multiple_users(self):
- password = "lookmanohands"
- users = [
- User.objects.create_user(email, email, password=password)
- for email in ["user1@example.com", "user2@example.com"]
- ]
- for created_user in users:
- user = authenticate(username=created_user.email, password=password)
- self.assertEqual(user, created_user)
-
- def test_authenticates_different_email_spelling(self):
- email = password = "person@example.com"
- created_user = User.objects.create_user("user1", email, password=password)
-
- for email_variation in [
- "Person@example.com",
- "Person@EXAMPLE.COM",
- "person@Example.com",
- ]:
- user = authenticate(username=email_variation, password=password)
- self.assertEqual(user, created_user)
-
-
- # Skip these tests for now as they only make sense when there isn't a unique
- # index on the user class. The test suite currently uses a custom model that
- # *does* have a unique index on email. When I figure out how to swap the user
- # model per test, we can re-enable this testcase.
- @unittest.skip
- class TestEmailAuthBackendWhenUsersShareAnEmail(TestCase):
- def test_authenticates_when_passwords_are_different(self):
- # Create two users with the same email address
- email = "person@example.com"
- for username in ["user1", "user2"]:
- User.objects.create_user(username, email, password=username)
-
- user = authenticate(username=email, password="user1")
- self.assertTrue(user is not None)
-
- def test_rejects_when_passwords_match(self):
- # Create two users with the same email address
- email = "person@example.com"
- for username in ["user1", "user2"]:
- User.objects.create_user(username, email, password="password")
-
- user = authenticate(username=email, password="password")
- self.assertTrue(user is None)
-
- def test_mails_admins_when_passwords_match(self):
- # Create two users with the same email address
- email = "person@example.com"
- for username in ["user1", "user2"]:
- User.objects.create_user(username, email, password="password")
-
- authenticate(username=email, password="password")
- self.assertEqual(1, len(mail.outbox))
|