Resolve "Screening for signups"

This commit is contained in:
Eliot Berriot 2020-03-18 11:57:33 +01:00
commit e313fcd033
49 changed files with 1759 additions and 49 deletions

View 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

View file

@ -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]