Resolve "Screening for signups"
This commit is contained in:
parent
e6df21b96c
commit
e313fcd033
49 changed files with 1759 additions and 49 deletions
52
api/tests/moderation/test_preferences.py
Normal file
52
api/tests/moderation/test_preferences.py
Normal file
|
|
@ -0,0 +1,52 @@
|
|||
import pytest
|
||||
|
||||
from django.urls import reverse
|
||||
|
||||
from funkwhale_api.common import preferences as common_preferences
|
||||
from funkwhale_api.common import utils as common_utils
|
||||
|
||||
|
||||
@pytest.mark.parametrize("value", [{"fields": {}}, {"fields": list(range(15))}])
|
||||
def test_get_serialized_preference_error(value, preferences):
|
||||
pref_id = "moderation__signup_form_customization"
|
||||
|
||||
with pytest.raises(common_preferences.JSONSerializer.exception):
|
||||
preferences[pref_id] = value
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"value",
|
||||
[
|
||||
{"fields": []},
|
||||
{"help_text": {"text": "hello", "content_type": "text/markdown"}},
|
||||
{"fields": [{"label": "Message", "required": True, "input_type": "long_text"}]},
|
||||
],
|
||||
)
|
||||
def test_get_serialized_preference(value, preferences):
|
||||
pref_id = "moderation__signup_form_customization"
|
||||
|
||||
preferences[pref_id] = value
|
||||
if "help_text" in value:
|
||||
value["help_text"]["html"] = common_utils.render_html(
|
||||
value["help_text"]["text"],
|
||||
content_type=value["help_text"]["content_type"],
|
||||
permissive=True,
|
||||
)
|
||||
assert preferences[pref_id] == value
|
||||
|
||||
|
||||
def test_update_via_api(superuser_api_client, preferences):
|
||||
pref_id = "moderation__signup_form_customization"
|
||||
url = reverse("api:v1:instance:admin-settings-bulk")
|
||||
new_value = {
|
||||
"help_text": {"text": "hello", "content_type": "text/markdown"},
|
||||
"fields": [{"required": True, "label": "hello", "input_type": "short_text"}],
|
||||
}
|
||||
response = superuser_api_client.post(url, {pref_id: new_value}, format="json")
|
||||
assert response.status_code == 200
|
||||
new_value["help_text"]["html"] = common_utils.render_html(
|
||||
new_value["help_text"]["text"],
|
||||
content_type=new_value["help_text"]["content_type"],
|
||||
permissive=True,
|
||||
)
|
||||
assert preferences[pref_id] == new_value
|
||||
|
|
@ -46,3 +46,77 @@ def test_report_created_signal_sends_email_to_mods(factories, mailoutbox, settin
|
|||
assert detail_url in m.body
|
||||
assert unresolved_reports_url in m.body
|
||||
assert list(m.to) == [mod.email]
|
||||
|
||||
|
||||
def test_signup_request_pending_sends_email_to_mods(factories, mailoutbox, settings):
|
||||
mod1 = factories["users.User"](permission_moderation=True)
|
||||
mod2 = factories["users.User"](permission_moderation=True)
|
||||
|
||||
signup_request = factories["moderation.UserRequest"](signup=True)
|
||||
|
||||
tasks.user_request_handle(user_request_id=signup_request.pk, new_status="pending")
|
||||
|
||||
detail_url = federation_utils.full_url(
|
||||
"/manage/moderation/requests/{}".format(signup_request.uuid)
|
||||
)
|
||||
unresolved_requests_url = federation_utils.full_url(
|
||||
"/manage/moderation/requests?q=status:pending"
|
||||
)
|
||||
assert len(mailoutbox) == 2
|
||||
for i, mod in enumerate([mod1, mod2]):
|
||||
m = mailoutbox[i]
|
||||
assert m.subject == "[{} moderation] New sign-up request from {}".format(
|
||||
settings.FUNKWHALE_HOSTNAME, signup_request.submitter.preferred_username,
|
||||
)
|
||||
assert detail_url in m.body
|
||||
assert unresolved_requests_url in m.body
|
||||
assert list(m.to) == [mod.email]
|
||||
|
||||
|
||||
def test_approved_request_sends_email_to_submitter_and_set_active(
|
||||
factories, mailoutbox, settings
|
||||
):
|
||||
user = factories["users.User"](is_active=False)
|
||||
actor = user.create_actor()
|
||||
signup_request = factories["moderation.UserRequest"](
|
||||
signup=True, submitter=actor, status="approved"
|
||||
)
|
||||
|
||||
tasks.user_request_handle(user_request_id=signup_request.pk, new_status="approved")
|
||||
|
||||
user.refresh_from_db()
|
||||
|
||||
assert user.is_active is True
|
||||
assert len(mailoutbox) == 1
|
||||
m = mailoutbox[-1]
|
||||
login_url = federation_utils.full_url("/login")
|
||||
assert m.subject == "Welcome to {}, {}!".format(
|
||||
settings.FUNKWHALE_HOSTNAME, signup_request.submitter.preferred_username,
|
||||
)
|
||||
assert login_url in m.body
|
||||
assert list(m.to) == [user.email]
|
||||
|
||||
|
||||
def test_refused_request_sends_email_to_submitter(
|
||||
factories, mailoutbox, settings, preferences
|
||||
):
|
||||
preferences["instance__contact_email"] = "test@pod.example"
|
||||
user = factories["users.User"](is_active=False)
|
||||
actor = user.create_actor()
|
||||
signup_request = factories["moderation.UserRequest"](
|
||||
signup=True, submitter=actor, status="refused"
|
||||
)
|
||||
|
||||
tasks.user_request_handle(user_request_id=signup_request.pk, new_status="refused")
|
||||
|
||||
user.refresh_from_db()
|
||||
|
||||
assert user.is_active is False
|
||||
|
||||
assert len(mailoutbox) == 1
|
||||
m = mailoutbox[-1]
|
||||
assert m.subject == "Your account request at {} was refused".format(
|
||||
settings.FUNKWHALE_HOSTNAME,
|
||||
)
|
||||
assert "test@pod.example" in m.body
|
||||
assert list(m.to) == [user.email]
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue