test_change_settings_views.py 3.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105
  1. import pytest
  2. from django import forms
  3. from django.urls import reverse
  4. from ....cache.test import assert_invalidates_cache
  5. from ... import SETTINGS_CACHE
  6. from ..forms import ChangeSettingsForm
  7. from ..views import ChangeSettingsView
  8. @pytest.fixture(autouse=True)
  9. def messages_mock(mocker):
  10. return mocker.patch("misago.conf.admin.views.messages")
  11. class Form(ChangeSettingsForm):
  12. settings = ["forum_name"]
  13. forum_name = forms.CharField(max_length=255)
  14. class View(ChangeSettingsView):
  15. form_class = Form
  16. def render(self, request, context):
  17. return True
  18. def test_view_loads_form_settings_from_db(setting):
  19. view = View()
  20. assert view.get_settings(["forum_name"]) == {setting.setting: setting}
  21. def test_view_raises_value_error_if_requested_setting_is_not_found(setting):
  22. view = View()
  23. with pytest.raises(ValueError):
  24. assert view.get_settings(["forum_name", "nonexisting_setting"])
  25. def test_initial_form_data_is_build_from_settings_dict(setting):
  26. view = View()
  27. settings_dict = {setting.setting: setting}
  28. assert view.get_initial_form_data(settings_dict) == {setting.setting: setting.value}
  29. def test_view_handles_get_request(rf, setting):
  30. view = View.as_view()
  31. view(rf.get("/"))
  32. def test_view_handles_post_request(rf, setting):
  33. view = View.as_view()
  34. view(rf.post("/", {setting.setting: "New Value"}))
  35. def test_view_changes_setting_on_correct_post_request(rf, setting):
  36. view = View.as_view()
  37. view(rf.post("/", {setting.setting: "New Value"}))
  38. setting.refresh_from_db()
  39. assert setting.value == "New Value"
  40. def test_view_handles_invalid_post_request(rf, setting):
  41. view = View.as_view()
  42. view(rf.post("/", {"invalid_setting": ""}))
  43. setting.refresh_from_db()
  44. assert setting.value == "Misago"
  45. def test_view_invalidates_settings_cache_on_correct_post_request(rf, setting):
  46. with assert_invalidates_cache(SETTINGS_CACHE):
  47. view = View.as_view()
  48. view(rf.post("/", {setting.setting: "New Value"}))
  49. def test_analytics_settings_form_renders(admin_client):
  50. response = admin_client.get(reverse("misago:admin:settings:analytics:index"))
  51. assert response.status_code == 200
  52. def test_captcha_settings_form_renders(admin_client):
  53. response = admin_client.get(reverse("misago:admin:settings:captcha:index"))
  54. assert response.status_code == 200
  55. def test_general_settings_form_renders(admin_client):
  56. response = admin_client.get(reverse("misago:admin:settings:general:index"))
  57. assert response.status_code == 200
  58. def test_sso_settings_form_renders(admin_client):
  59. response = admin_client.get(reverse("misago:admin:settings:sso:index"))
  60. assert response.status_code == 200
  61. def test_threads_settings_form_renders(admin_client):
  62. response = admin_client.get(reverse("misago:admin:settings:threads:index"))
  63. assert response.status_code == 200
  64. def test_users_settings_form_renders(admin_client):
  65. response = admin_client.get(reverse("misago:admin:settings:users:index"))
  66. assert response.status_code == 200