test_auth_views.py 3.1 KB

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