mirror of
https://github.com/boostorg/website-v2.git
synced 2026-02-27 17:42:08 +00:00
109 lines
3.8 KiB
Python
109 lines
3.8 KiB
Python
import pytest
|
|
|
|
from ..forms import PreferencesForm
|
|
from ..models import Preferences
|
|
from news.models import NEWS_MODELS
|
|
|
|
|
|
def test_preferences_form_fields_no_user():
|
|
form = PreferencesForm()
|
|
assert sorted(form.fields.keys()) == [
|
|
"allow_notification_others_news_posted",
|
|
"allow_notification_own_news_approved",
|
|
]
|
|
all_news = sorted(m.news_type for m in NEWS_MODELS)
|
|
assert form.initial == {
|
|
"allow_notification_others_news_posted": all_news,
|
|
"allow_notification_own_news_approved": all_news,
|
|
}
|
|
|
|
|
|
def test_preferences_form_fields_regular_user(user):
|
|
instance = user.preferences
|
|
form = PreferencesForm(instance=user.preferences)
|
|
assert sorted(form.fields.keys()) == [
|
|
"allow_notification_others_news_posted",
|
|
"allow_notification_own_news_approved",
|
|
]
|
|
assert form.initial == {i: getattr(instance, i) for i in form.fields}
|
|
|
|
|
|
def test_preferences_form_fields_moderator_user(moderator_user):
|
|
instance = moderator_user.preferences
|
|
form = PreferencesForm(instance=moderator_user.preferences)
|
|
assert sorted(form.fields.keys()) == [
|
|
"allow_notification_others_news_needs_moderation",
|
|
"allow_notification_others_news_posted",
|
|
"allow_notification_own_news_approved",
|
|
]
|
|
assert form.initial == {i: getattr(instance, i) for i in form.fields}
|
|
|
|
|
|
@pytest.mark.parametrize("form_field", PreferencesForm.Meta.fields)
|
|
@pytest.mark.parametrize("model_class", NEWS_MODELS)
|
|
def test_preferences_form_model_modifies_instance_empty_list_no_moderator(
|
|
user, form_field, model_class
|
|
):
|
|
original = Preferences.ALL_NEWS_TYPES
|
|
setattr(user.preferences, form_field, original)
|
|
expected = []
|
|
form = PreferencesForm(instance=user.preferences, data={form_field: expected})
|
|
assert form.is_valid(), form.errors
|
|
|
|
result = form.save()
|
|
|
|
# Since the user is not moderator, the value for
|
|
# allow_notification_others_news_needs_moderation should not change.
|
|
if form_field == "allow_notification_others_news_needs_moderation":
|
|
expected = original
|
|
assert getattr(result, form_field) == expected
|
|
user.refresh_from_db()
|
|
assert getattr(user.preferences, form_field) == expected
|
|
|
|
# Now, set a single item.
|
|
expected = [model_class.news_type]
|
|
form = PreferencesForm(instance=user.preferences, data={form_field: expected})
|
|
assert form.is_valid(), form.errors
|
|
|
|
result = form.save()
|
|
|
|
# Since the user is not moderator, the value for
|
|
# allow_notification_others_news_needs_moderation should not change.
|
|
if form_field == "allow_notification_others_news_needs_moderation":
|
|
expected = original
|
|
assert getattr(result, form_field) == expected
|
|
user.refresh_from_db()
|
|
assert getattr(user.preferences, form_field) == expected
|
|
|
|
|
|
@pytest.mark.parametrize("form_field", PreferencesForm.Meta.fields)
|
|
@pytest.mark.parametrize("model_class", NEWS_MODELS)
|
|
def test_preferences_form_model_modifies_instance_empty_list_user_moderator(
|
|
moderator_user, form_field, model_class
|
|
):
|
|
setattr(moderator_user.preferences, form_field, Preferences.ALL_NEWS_TYPES)
|
|
expected = []
|
|
form = PreferencesForm(
|
|
instance=moderator_user.preferences, data={form_field: expected}
|
|
)
|
|
assert form.is_valid(), form.errors
|
|
|
|
result = form.save()
|
|
|
|
assert getattr(result, form_field) == expected
|
|
moderator_user.refresh_from_db()
|
|
assert getattr(moderator_user.preferences, form_field) == expected
|
|
|
|
# Now, set a single item.
|
|
expected = [model_class.news_type]
|
|
form = PreferencesForm(
|
|
instance=moderator_user.preferences, data={form_field: expected}
|
|
)
|
|
assert form.is_valid(), form.errors
|
|
|
|
result = form.save()
|
|
|
|
assert getattr(result, form_field) == expected
|
|
moderator_user.refresh_from_db()
|
|
assert getattr(moderator_user.preferences, form_field) == expected
|