test_auth_views.py 3.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103
  1. # -*- coding: utf-8 -*-
  2. from django.test import TestCase
  3. from django.urls import reverse
  4. class AuthViewsTests(TestCase):
  5. def test_auth_views_return_302(self):
  6. """auth views should always return redirect"""
  7. response = self.client.get(reverse('misago:login'))
  8. self.assertEqual(response.status_code, 302)
  9. response = self.client.post(reverse('misago:login'))
  10. self.assertEqual(response.status_code, 302)
  11. response = self.client.get(reverse('misago:logout'))
  12. self.assertEqual(response.status_code, 302)
  13. response = self.client.post(reverse('misago:logout'))
  14. self.assertEqual(response.status_code, 302)
  15. def test_login_view_redirect_to(self):
  16. """login view respects redirect_to POST"""
  17. # valid redirect
  18. response = self.client.post(
  19. reverse('misago:login'),
  20. data={
  21. 'redirect_to': '/redirect/',
  22. },
  23. )
  24. self.assertEqual(response.status_code, 302)
  25. self.assertEqual(response['location'], '/redirect/?ref=login')
  26. # invalid redirect (redirects to other site)
  27. response = self.client.post(
  28. reverse('misago:login'),
  29. data={
  30. 'redirect_to': 'http://somewhereelse.com/page.html',
  31. },
  32. )
  33. self.assertEqual(response.status_code, 302)
  34. self.assertEqual(response['location'], '/')
  35. # invalid redirect (link name)
  36. response = self.client.post(
  37. reverse('misago:login'),
  38. data={
  39. 'redirect_to': 'misago:users',
  40. },
  41. )
  42. self.assertEqual(response.status_code, 302)
  43. self.assertEqual(response['location'], '/')
  44. # invalid redirect (non url)
  45. response = self.client.post(
  46. reverse('misago:login'),
  47. data={
  48. 'redirect_to': 'canada goose not url!',
  49. },
  50. )
  51. self.assertEqual(response.status_code, 302)
  52. self.assertEqual(response['location'], '/')
  53. # invalid redirect (unicode)
  54. response = self.client.post(
  55. reverse('misago:login'),
  56. data={
  57. 'redirect_to': u'łelcome!',
  58. },
  59. )
  60. self.assertEqual(response.status_code, 302)
  61. self.assertEqual(response['location'], '/')
  62. def test_logout_view(self):
  63. """logout view logs user out on post"""
  64. response = self.client.post(
  65. '/api/auth/',
  66. data={
  67. 'username': 'nope',
  68. 'password': 'nope',
  69. },
  70. )
  71. self.assertContains(response, "Login or password is incorrect.", status_code=400)
  72. response = self.client.get('/api/auth/')
  73. self.assertEqual(response.status_code, 200)
  74. user_json = response.json()
  75. self.assertIsNone(user_json['id'])
  76. response = self.client.post(reverse('misago:logout'))
  77. self.assertEqual(response.status_code, 302)
  78. response = self.client.get('/api/auth/')
  79. self.assertEqual(response.status_code, 200)
  80. user_json = response.json()
  81. self.assertIsNone(user_json['id'])