test_auth_views.py 2.1 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061
  1. import json
  2. from django.test import TestCase
  3. from django.urls import reverse
  4. from django.utils.encoding import smart_str
  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'], '/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'], '/')
  30. def test_logout_view(self):
  31. """logout view logs user out on post"""
  32. response = self.client.post(
  33. '/api/auth/', data={'username': 'nope', 'password': 'nope'})
  34. self.assertContains(response, "Login or password is incorrect.", status_code=400)
  35. response = self.client.get('/api/auth/')
  36. self.assertEqual(response.status_code, 200)
  37. user_json = json.loads(smart_str(response.content))
  38. self.assertIsNone(user_json['id'])
  39. response = self.client.post(reverse('misago:logout'))
  40. self.assertEqual(response.status_code, 302)
  41. response = self.client.get('/api/auth/')
  42. self.assertEqual(response.status_code, 200)
  43. user_json = json.loads(smart_str(response.content))
  44. self.assertIsNone(user_json['id'])