testregistration.py 5.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112
  1. from django.core.urlresolvers import reverse
  2. from rest_framework import status
  3. from rest_framework.test import APITestCase
  4. from .utils import utils
  5. from desecapi import models
  6. from datetime import timedelta
  7. from django.utils import timezone
  8. from django.core import mail
  9. from desecapi.emails import send_account_lock_email
  10. from desecapi import settings
  11. class RegistrationTest(APITestCase):
  12. def test_registration_successful(self):
  13. url = reverse('register')
  14. data = {'email': utils.generateUsername(), 'password': utils.generateRandomString(size=12)}
  15. response = self.client.post(url, data, REMOTE_ADDR="1.3.3.7")
  16. self.assertEqual(response.status_code, status.HTTP_201_CREATED)
  17. user = models.User.objects.get(email=data['email'])
  18. self.assertEqual(user.email, data['email'])
  19. self.assertEqual(user.registration_remote_ip, "1.3.3.7")
  20. def test_multiple_registration_captcha_required_same_ip_short_time(self):
  21. outboxlen = len(mail.outbox)
  22. url = reverse('register')
  23. data = {'email': utils.generateUsername(), 'password': utils.generateRandomString(size=12)}
  24. response = self.client.post(url, data, REMOTE_ADDR="1.3.3.7")
  25. self.assertEqual(response.status_code, status.HTTP_201_CREATED)
  26. user = models.User.objects.get(email=data['email'])
  27. self.assertEqual(user.email, data['email'])
  28. self.assertEqual(user.registration_remote_ip, "1.3.3.7")
  29. self.assertEqual(user.captcha_required, False)
  30. self.assertEqual(len(mail.outbox), outboxlen)
  31. url = reverse('register')
  32. data = {'email': utils.generateUsername(), 'password': utils.generateRandomString(size=12)}
  33. response = self.client.post(url, data, REMOTE_ADDR="1.3.3.7")
  34. self.assertEqual(response.status_code, status.HTTP_201_CREATED)
  35. user = models.User.objects.get(email=data['email'])
  36. self.assertEqual(user.email, data['email'])
  37. self.assertEqual(user.registration_remote_ip, "1.3.3.7")
  38. self.assertEqual(user.captcha_required, True)
  39. self.assertEqual(len(mail.outbox), outboxlen + 1)
  40. url = reverse('register')
  41. data = {'email': utils.generateUsername(), 'password': utils.generateRandomString(size=12)}
  42. response = self.client.post(url, data, REMOTE_ADDR="1.3.3.7")
  43. self.assertEqual(response.status_code, status.HTTP_201_CREATED)
  44. user = models.User.objects.get(email=data['email'])
  45. self.assertEqual(user.email, data['email'])
  46. self.assertEqual(user.registration_remote_ip, "1.3.3.7")
  47. self.assertEqual(user.captcha_required, True)
  48. self.assertEqual(len(mail.outbox), outboxlen + 2)
  49. def test_multiple_registration_no_captcha_required_different_ip(self):
  50. url = reverse('register')
  51. data = {'email': utils.generateUsername(), 'password': utils.generateRandomString(size=12)}
  52. response = self.client.post(url, data, REMOTE_ADDR="1.3.3.8")
  53. self.assertEqual(response.status_code, status.HTTP_201_CREATED)
  54. user = models.User.objects.get(email=data['email'])
  55. self.assertEqual(user.email, data['email'])
  56. self.assertEqual(user.registration_remote_ip, "1.3.3.8")
  57. self.assertEqual(user.captcha_required, False)
  58. url = reverse('register')
  59. data = {'email': utils.generateUsername(), 'password': utils.generateRandomString(size=12)}
  60. response = self.client.post(url, data, REMOTE_ADDR="1.3.3.9")
  61. self.assertEqual(response.status_code, status.HTTP_201_CREATED)
  62. user = models.User.objects.get(email=data['email'])
  63. self.assertEqual(user.email, data['email'])
  64. self.assertEqual(user.registration_remote_ip, "1.3.3.9")
  65. self.assertEqual(user.captcha_required, False)
  66. def test_multiple_registration_no_captcha_required_same_ip_long_time(self):
  67. url = reverse('register')
  68. data = {'email': utils.generateUsername(), 'password': utils.generateRandomString(size=12)}
  69. response = self.client.post(url, data, REMOTE_ADDR="1.3.3.10")
  70. self.assertEqual(response.status_code, status.HTTP_201_CREATED)
  71. user = models.User.objects.get(email=data['email'])
  72. self.assertEqual(user.email, data['email'])
  73. self.assertEqual(user.registration_remote_ip, "1.3.3.10")
  74. self.assertEqual(user.captcha_required, False)
  75. #fake registration time
  76. user.created = timezone.now() - timedelta(hours=settings.ABUSE_LOCK_ACCOUNT_BY_REGISTRATION_IP_PERIOD_HRS+1)
  77. user.save()
  78. url = reverse('register')
  79. data = {'email': utils.generateUsername(), 'password': utils.generateRandomString(size=12)}
  80. response = self.client.post(url, data, REMOTE_ADDR="1.3.3.10")
  81. self.assertEqual(response.status_code, status.HTTP_201_CREATED)
  82. user = models.User.objects.get(email=data['email'])
  83. self.assertEqual(user.email, data['email'])
  84. self.assertEqual(user.registration_remote_ip, "1.3.3.10")
  85. self.assertEqual(user.captcha_required, False)
  86. def test_send_captcha_email_manually(self):
  87. outboxlen = len(mail.outbox)
  88. url = reverse('register')
  89. data = {'email': utils.generateUsername(), 'password': utils.generateRandomString(size=12)}
  90. response = self.client.post(url, data, REMOTE_ADDR="1.3.3.10")
  91. self.assertEqual(response.status_code, status.HTTP_201_CREATED)
  92. user = models.User.objects.get(email=data['email'])
  93. send_account_lock_email(None, user)
  94. self.assertEqual(len(mail.outbox), outboxlen+1)