test_auth_views.py 2.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  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"), data={"redirect_to": "/redirect/"}
  19. )
  20. self.assertEqual(response.status_code, 302)
  21. self.assertEqual(response["location"], "/redirect/?ref=login")
  22. # invalid redirect (redirects to other site)
  23. response = self.client.post(
  24. reverse("misago:login"),
  25. data={"redirect_to": "http://somewhereelse.com/page.html"},
  26. )
  27. self.assertEqual(response.status_code, 302)
  28. self.assertEqual(response["location"], "/")
  29. # invalid redirect (link name)
  30. response = self.client.post(
  31. reverse("misago:login"), data={"redirect_to": "misago:users"}
  32. )
  33. self.assertEqual(response.status_code, 302)
  34. self.assertEqual(response["location"], "/")
  35. # invalid redirect (non url)
  36. response = self.client.post(
  37. reverse("misago:login"), data={"redirect_to": "canada goose not url!"}
  38. )
  39. self.assertEqual(response.status_code, 302)
  40. self.assertEqual(response["location"], "/")
  41. # invalid redirect (unicode)
  42. response = self.client.post(
  43. reverse("misago:login"), data={"redirect_to": "łelcome!"}
  44. )
  45. self.assertEqual(response.status_code, 302)
  46. self.assertEqual(response["location"], "/")
  47. def test_logout_view(self):
  48. """logout view logs user out on post"""
  49. response = self.client.post(
  50. "/api/auth/", data={"username": "nope", "password": "not-checked"}
  51. )
  52. self.assertContains(
  53. response, "Login or password is incorrect.", status_code=400
  54. )
  55. response = self.client.get("/api/auth/")
  56. self.assertEqual(response.status_code, 200)
  57. user_json = response.json()
  58. self.assertIsNone(user_json["id"])
  59. response = self.client.post(reverse("misago:logout"))
  60. self.assertEqual(response.status_code, 302)
  61. response = self.client.get("/api/auth/")
  62. self.assertEqual(response.status_code, 200)
  63. user_json = response.json()
  64. self.assertIsNone(user_json["id"])