test_auth_views.py 3.2 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394959697
  1. from django.test import TestCase
  2. from django.urls import reverse
  3. from ...conf.test import override_dynamic_settings
  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"), data={"redirect_to": "/redirect/"}
  20. )
  21. self.assertEqual(response.status_code, 302)
  22. self.assertEqual(response["location"], "/redirect/?ref=login")
  23. # invalid redirect (redirects to other site)
  24. response = self.client.post(
  25. reverse("misago:login"),
  26. data={"redirect_to": "http://somewhereelse.com/page.html"},
  27. )
  28. self.assertEqual(response.status_code, 302)
  29. self.assertEqual(response["location"], "/")
  30. # invalid redirect (link name)
  31. response = self.client.post(
  32. reverse("misago:login"), data={"redirect_to": "misago:users"}
  33. )
  34. self.assertEqual(response.status_code, 302)
  35. self.assertEqual(response["location"], "/")
  36. # invalid redirect (non url)
  37. response = self.client.post(
  38. reverse("misago:login"), data={"redirect_to": "canada goose not url!"}
  39. )
  40. self.assertEqual(response.status_code, 302)
  41. self.assertEqual(response["location"], "/")
  42. # invalid redirect (unicode)
  43. response = self.client.post(
  44. reverse("misago:login"), data={"redirect_to": "łelcome!"}
  45. )
  46. self.assertEqual(response.status_code, 302)
  47. self.assertEqual(response["location"], "/")
  48. def test_logout_view(self):
  49. """logout view logs user out on post"""
  50. response = self.client.post(
  51. "/api/auth/", data={"username": "nope", "password": "not-checked"}
  52. )
  53. self.assertContains(
  54. response, "Login or password is incorrect.", status_code=400
  55. )
  56. response = self.client.get("/api/auth/")
  57. self.assertEqual(response.status_code, 200)
  58. user_json = response.json()
  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("/api/auth/")
  63. self.assertEqual(response.status_code, 200)
  64. user_json = response.json()
  65. self.assertIsNone(user_json["id"])
  66. @override_dynamic_settings(
  67. enable_oauth2_client=True,
  68. oauth2_provider="Lorem",
  69. )
  70. def test_login_view_returns_403_if_oauth_is_enabled(db, client):
  71. response = client.get(reverse("misago:login"))
  72. assert response.status_code == 403