You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

auth_tests.py 2.5KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667
  1. import unittest
  2. from django.test import TestCase
  3. from django.contrib.auth import authenticate
  4. from django.core import mail
  5. from oscar.core.compat import get_user_model
  6. User = get_user_model()
  7. class TestEmailAuthBackend(TestCase):
  8. def test_authenticates_multiple_users(self):
  9. password = 'lookmanohands'
  10. users = [
  11. User.objects.create_user(email, email, password=password)
  12. for email in ['user1@example.com', 'user2@example.com']]
  13. for created_user in users:
  14. user = authenticate(username=created_user.email, password=password)
  15. self.assertEqual(user, created_user)
  16. def test_authenticates_different_email_spelling(self):
  17. email = password = 'person@example.com'
  18. created_user = User.objects.create_user(
  19. 'user1', email, password=password)
  20. for email_variation in [
  21. 'Person@example.com', 'Person@EXAMPLE.COM', 'person@Example.com'
  22. ]:
  23. user = authenticate(username=email_variation, password=password)
  24. self.assertEqual(user, created_user)
  25. # Skip these tests for now as they only make sense when there isn't a unique
  26. # index on the user class. The test suite currently uses a custom model that
  27. # *does* have a unique index on email. When I figure out how to swap the user
  28. # model per test, we can re-enable this testcase.
  29. @unittest.skip
  30. class TestEmailAuthBackendWhenUsersShareAnEmail(TestCase):
  31. def test_authenticates_when_passwords_are_different(self):
  32. # Create two users with the same email address
  33. email = 'person@example.com'
  34. for username in ['user1', 'user2']:
  35. User.objects.create_user(username, email, password=username)
  36. user = authenticate(username=email, password='user1')
  37. self.assertTrue(user is not None)
  38. def test_rejects_when_passwords_match(self):
  39. # Create two users with the same email address
  40. email = 'person@example.com'
  41. for username in ['user1', 'user2']:
  42. User.objects.create_user(username, email, password='password')
  43. user = authenticate(username=email, password='password')
  44. self.assertTrue(user is None)
  45. def test_mails_admins_when_passwords_match(self):
  46. # Create two users with the same email address
  47. email = 'person@example.com'
  48. for username in ['user1', 'user2']:
  49. User.objects.create_user(username, email, password='password')
  50. authenticate(username=email, password='password')
  51. self.assertEqual(1, len(mail.outbox))