/auth/tests/forms.py

https://github.com/nexascale/nexathan · Python · 270 lines · 196 code · 52 blank · 22 comment · 0 complexity · 327d51560834b64f32ab3b122af9cfa7 MD5 · raw file

  1. from nexathan.auth.models import User
  2. from nexathan.auth.forms import UserCreationForm, AuthenticationForm, PasswordChangeForm, SetPasswordForm, UserChangeForm, PasswordResetForm
  3. from django.test import TestCase
  4. class UserCreationFormTest(TestCase):
  5. fixtures = ['authtestdata.json']
  6. def test_user_already_exists(self):
  7. data = {
  8. 'username': 'testclient',
  9. 'password1': 'test123',
  10. 'password2': 'test123',
  11. }
  12. form = UserCreationForm(data)
  13. self.assertFalse(form.is_valid())
  14. self.assertEqual(form["username"].errors,
  15. [u'A user with that username already exists.'])
  16. def test_invalid_data(self):
  17. data = {
  18. 'username': 'jsmith!',
  19. 'password1': 'test123',
  20. 'password2': 'test123',
  21. }
  22. form = UserCreationForm(data)
  23. self.assertFalse(form.is_valid())
  24. self.assertEqual(form["username"].errors,
  25. [u'This value may contain only letters, numbers and @/./+/-/_ characters.'])
  26. def test_password_verification(self):
  27. # The verification password is incorrect.
  28. data = {
  29. 'username': 'jsmith',
  30. 'password1': 'test123',
  31. 'password2': 'test',
  32. }
  33. form = UserCreationForm(data)
  34. self.assertFalse(form.is_valid())
  35. self.assertEqual(form["password2"].errors,
  36. [u"The two password fields didn't match."])
  37. def test_both_passwords(self):
  38. # One (or both) passwords weren't given
  39. data = {'username': 'jsmith'}
  40. form = UserCreationForm(data)
  41. self.assertFalse(form.is_valid())
  42. self.assertEqual(form['password1'].errors,
  43. [u'This field is required.'])
  44. self.assertEqual(form['password2'].errors,
  45. [u'This field is required.'])
  46. data['password2'] = 'test123'
  47. form = UserCreationForm(data)
  48. self.assertFalse(form.is_valid())
  49. self.assertEqual(form['password1'].errors,
  50. [u'This field is required.'])
  51. def test_success(self):
  52. # The success case.
  53. data = {
  54. 'username': 'jsmith@example.com',
  55. 'password1': 'test123',
  56. 'password2': 'test123',
  57. }
  58. form = UserCreationForm(data)
  59. self.assertTrue(form.is_valid())
  60. u = form.save()
  61. self.assertEqual(repr(u), '<User: jsmith@example.com>')
  62. class AuthenticationFormTest(TestCase):
  63. fixtures = ['authtestdata.json']
  64. def test_invalid_username(self):
  65. # The user submits an invalid username.
  66. data = {
  67. 'username': 'jsmith_does_not_exist',
  68. 'password': 'test123',
  69. }
  70. form = AuthenticationForm(None, data)
  71. self.assertFalse(form.is_valid())
  72. self.assertEqual(form.non_field_errors(),
  73. [u'Please enter a correct username and password. Note that both fields are case-sensitive.'])
  74. def test_inactive_user(self):
  75. # The user is inactive.
  76. data = {
  77. 'username': 'inactive',
  78. 'password': 'password',
  79. }
  80. form = AuthenticationForm(None, data)
  81. self.assertFalse(form.is_valid())
  82. self.assertEqual(form.non_field_errors(),
  83. [u'This account is inactive.'])
  84. def test_success(self):
  85. # The success case
  86. data = {
  87. 'username': 'testclient',
  88. 'password': 'password',
  89. }
  90. form = AuthenticationForm(None, data)
  91. self.assertTrue(form.is_valid())
  92. self.assertEqual(form.non_field_errors(), [])
  93. class SetPasswordFormTest(TestCase):
  94. fixtures = ['authtestdata.json']
  95. def test_password_verification(self):
  96. # The two new passwords do not match.
  97. user = User.objects.get(username='testclient')
  98. data = {
  99. 'new_password1': 'abc123',
  100. 'new_password2': 'abc',
  101. }
  102. form = SetPasswordForm(user, data)
  103. self.assertFalse(form.is_valid())
  104. self.assertEqual(form["new_password2"].errors,
  105. [u"The two password fields didn't match."])
  106. def test_success(self):
  107. user = User.objects.get(username='testclient')
  108. data = {
  109. 'new_password1': 'abc123',
  110. 'new_password2': 'abc123',
  111. }
  112. form = SetPasswordForm(user, data)
  113. self.assertTrue(form.is_valid())
  114. class PasswordChangeFormTest(TestCase):
  115. fixtures = ['authtestdata.json']
  116. def test_incorrect_password(self):
  117. user = User.objects.get(username='testclient')
  118. data = {
  119. 'old_password': 'test',
  120. 'new_password1': 'abc123',
  121. 'new_password2': 'abc123',
  122. }
  123. form = PasswordChangeForm(user, data)
  124. self.assertFalse(form.is_valid())
  125. self.assertEqual(form["old_password"].errors,
  126. [u'Your old password was entered incorrectly. Please enter it again.'])
  127. def test_password_verification(self):
  128. # The two new passwords do not match.
  129. user = User.objects.get(username='testclient')
  130. data = {
  131. 'old_password': 'password',
  132. 'new_password1': 'abc123',
  133. 'new_password2': 'abc',
  134. }
  135. form = PasswordChangeForm(user, data)
  136. self.assertFalse(form.is_valid())
  137. self.assertEqual(form["new_password2"].errors,
  138. [u"The two password fields didn't match."])
  139. def test_success(self):
  140. # The success case.
  141. user = User.objects.get(username='testclient')
  142. data = {
  143. 'old_password': 'password',
  144. 'new_password1': 'abc123',
  145. 'new_password2': 'abc123',
  146. }
  147. form = PasswordChangeForm(user, data)
  148. self.assertTrue(form.is_valid())
  149. def test_field_order(self):
  150. # Regression test - check the order of fields:
  151. user = User.objects.get(username='testclient')
  152. self.assertEqual(PasswordChangeForm(user, {}).fields.keys(),
  153. ['old_password', 'new_password1', 'new_password2'])
  154. class UserChangeFormTest(TestCase):
  155. fixtures = ['authtestdata.json']
  156. def test_username_validity(self):
  157. user = User.objects.get(username='testclient')
  158. data = {'username': 'not valid'}
  159. form = UserChangeForm(data, instance=user)
  160. self.assertFalse(form.is_valid())
  161. self.assertEqual(form['username'].errors,
  162. [u'This value may contain only letters, numbers and @/./+/-/_ characters.'])
  163. def test_bug_14242(self):
  164. # A regression test, introduce by adding an optimization for the
  165. # UserChangeForm.
  166. class MyUserForm(UserChangeForm):
  167. def __init__(self, *args, **kwargs):
  168. super(MyUserForm, self).__init__(*args, **kwargs)
  169. self.fields['groups'].help_text = 'These groups give users different permissions'
  170. class Meta(UserChangeForm.Meta):
  171. fields = ('groups',)
  172. # Just check we can create it
  173. form = MyUserForm({})
  174. class PasswordResetFormTest(TestCase):
  175. fixtures = ['authtestdata.json']
  176. def create_dummy_user(self):
  177. """creates a user and returns a tuple
  178. (user_object, username, email)
  179. """
  180. username = 'jsmith'
  181. email = 'jsmith@example.com'
  182. user = User.objects.create_user(username, email, 'test123')
  183. return (user, username, email)
  184. def test_invalid_email(self):
  185. data = {'email':'not valid'}
  186. form = PasswordResetForm(data)
  187. self.assertFalse(form.is_valid())
  188. self.assertEqual(form['email'].errors,
  189. [u'Enter a valid e-mail address.'])
  190. def test_nonexistant_email(self):
  191. # Test nonexistant email address
  192. data = {'email':'foo@bar.com'}
  193. form = PasswordResetForm(data)
  194. self.assertFalse(form.is_valid())
  195. self.assertEqual(form.errors,
  196. {'email': [u"That e-mail address doesn't have an associated user account. Are you sure you've registered?"]})
  197. def test_cleaned_data(self):
  198. # Regression test
  199. (user, username, email) = self.create_dummy_user()
  200. data = {'email': email}
  201. form = PasswordResetForm(data)
  202. self.assertTrue(form.is_valid())
  203. self.assertEqual(form.cleaned_data['email'], email)
  204. def test_bug_5605(self):
  205. # bug #5605, preserve the case of the user name (before the @ in the
  206. # email address) when creating a user.
  207. user = User.objects.create_user('forms_test2', 'tesT@EXAMple.com', 'test')
  208. self.assertEqual(user.email, 'tesT@example.com')
  209. user = User.objects.create_user('forms_test3', 'tesT', 'test')
  210. self.assertEqual(user.email, 'tesT')
  211. def test_inactive_user(self):
  212. #tests that inactive user cannot
  213. #receive password reset email
  214. (user, username, email) = self.create_dummy_user()
  215. user.is_active = False
  216. user.save()
  217. form = PasswordResetForm({'email': email})
  218. self.assertFalse(form.is_valid())