test_change_settings_view.py 1.9 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374
  1. import pytest
  2. from django import forms
  3. from ....cache.test import assert_invalidates_cache
  4. from ... import SETTINGS_CACHE
  5. from ..forms import ChangeSettingsForm
  6. from ..views import ChangeSettingsView
  7. @pytest.fixture(autouse=True)
  8. def messages_mock(mocker):
  9. return mocker.patch("misago.conf.admin.views.messages")
  10. class Form(ChangeSettingsForm):
  11. settings = ["forum_name"]
  12. forum_name = forms.CharField(max_length=255)
  13. class View(ChangeSettingsView):
  14. form = Form
  15. def render(self, request, context):
  16. return True
  17. def test_view_loads_form_settings_from_db(setting):
  18. view = View()
  19. assert view.get_settings(["forum_name"]) == {setting.setting: setting}
  20. def test_view_raises_value_error_if_requested_setting_is_not_found(setting):
  21. view = View()
  22. with pytest.raises(ValueError):
  23. assert view.get_settings(["forum_name", "nonexisting_setting"])
  24. def test_initial_form_data_is_build_from_settings_dict(setting):
  25. view = View()
  26. settings_dict = {setting.setting: setting}
  27. assert view.get_initial_form_data(settings_dict) == {setting.setting: setting.value}
  28. def test_view_handles_get_request(rf, setting):
  29. view = View.as_view()
  30. view(rf.get("/"))
  31. def test_view_handles_post_request(rf, setting):
  32. view = View.as_view()
  33. view(rf.post("/", {setting.setting: "New Value"}))
  34. def test_view_changes_setting_on_correct_post_request(rf, setting):
  35. view = View.as_view()
  36. view(rf.post("/", {setting.setting: "New Value"}))
  37. setting.refresh_from_db()
  38. assert setting.value == "New Value"
  39. def test_view_handles_invalid_post_request(rf, setting):
  40. view = View.as_view()
  41. view(rf.post("/", {"invalid_setting": ""}))
  42. setting.refresh_from_db()
  43. assert setting.value == "Misago"
  44. def test_view_invalidates_settings_cache_on_correct_post_request(rf, setting):
  45. with assert_invalidates_cache(SETTINGS_CACHE):
  46. view = View.as_view()
  47. view(rf.post("/", {setting.setting: "New Value"}))