test_auth_views.py 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687
  1. import json
  2. from django.contrib.auth import get_user_model
  3. from django.core.urlresolvers import reverse
  4. from django.test import TestCase
  5. class AuthViewsTests(TestCase):
  6. def test_auth_views_return_302(self):
  7. """auth views should always return redirect"""
  8. response = self.client.get(reverse('misago:login'))
  9. self.assertEqual(response.status_code, 302)
  10. response = self.client.post(reverse('misago:login'))
  11. self.assertEqual(response.status_code, 302)
  12. response = self.client.get(reverse('misago:logout'))
  13. self.assertEqual(response.status_code, 302)
  14. response = self.client.post(reverse('misago:logout'))
  15. self.assertEqual(response.status_code, 302)
  16. def test_login_view_redirect_to(self):
  17. """login view respects redirect_to POST"""
  18. # valid redirect
  19. response = self.client.post(reverse('misago:login'), data={
  20. 'redirect_to': '/redirect/'
  21. })
  22. self.assertEqual(response.status_code, 302)
  23. self.assertEqual(response['location'], 'http://testserver/redirect/')
  24. # invalid redirect (redirects to other site)
  25. response = self.client.post(reverse('misago:login'), data={
  26. 'redirect_to': 'http://somewhereelse.com/page.html'
  27. })
  28. self.assertEqual(response.status_code, 302)
  29. self.assertEqual(response['location'], 'http://testserver/')
  30. # in-dev ember-cli redirect
  31. conf_overrides = {
  32. 'DEBUG': True,
  33. 'MISAGO_EMBER_CLI_ORIGIN': 'http://localhost:4200'
  34. }
  35. with self.settings(**conf_overrides):
  36. # valid request, has Origin header
  37. response = self.client.post(reverse('misago:login'), data={
  38. 'redirect_to': 'http://localhost:4200/page.html'
  39. }, HTTP_ORIGIN='http://localhost:4200')
  40. self.assertEqual(response.status_code, 302)
  41. self.assertEqual(response['location'],
  42. 'http://localhost:4200/page.html')
  43. # invalid request, different Origin header
  44. response = self.client.post(reverse('misago:login'), data={
  45. 'redirect_to': 'http://localhost:4200/page.html'
  46. }, HTTP_ORIGIN='http://somewhere.com/')
  47. self.assertEqual(response.status_code, 302)
  48. self.assertEqual(response['location'], 'http://testserver/')
  49. def test_logout_view(self):
  50. """logout view logs user out on post"""
  51. response = self.client.post(
  52. reverse('misago:api:login'),
  53. data={'username': 'nope', 'password': 'nope'})
  54. self.assertEqual(response.status_code, 400)
  55. self.assertIn("Login or password is incorrect.", response.content)
  56. response = self.client.get(reverse('misago:api:auth_user'))
  57. self.assertEqual(response.status_code, 200)
  58. user_json = json.loads(response.content)
  59. self.assertIsNone(user_json['id'])
  60. response = self.client.post(reverse('misago:logout'))
  61. self.assertEqual(response.status_code, 302)
  62. response = self.client.get(reverse('misago:api:auth_user'))
  63. self.assertEqual(response.status_code, 200)
  64. user_json = json.loads(response.content)
  65. self.assertIsNone(user_json['id'])