Rejecting media files on an instance or account now purge existing media
This commit is contained in:
parent
cb3dacedbe
commit
377f237fdb
5 changed files with 102 additions and 32 deletions
|
|
@ -223,11 +223,46 @@ def test_handle_purge_actors(factories, mocker):
|
|||
d.refresh_from_db()
|
||||
|
||||
|
||||
def test_handle_purge_actors_restrict_media(factories, mocker):
|
||||
to_purge = factories["federation.Actor"]()
|
||||
keeped = [
|
||||
factories["music.Upload"](),
|
||||
factories["federation.Activity"](),
|
||||
factories["federation.InboxItem"](),
|
||||
factories["federation.Follow"](),
|
||||
factories["federation.LibraryFollow"](),
|
||||
factories["federation.Activity"](actor=to_purge),
|
||||
factories["federation.InboxItem"](actor=to_purge),
|
||||
factories["federation.Follow"](actor=to_purge),
|
||||
]
|
||||
|
||||
library = factories["music.Library"](actor=to_purge)
|
||||
deleted = [
|
||||
library,
|
||||
factories["music.Upload"](library=library),
|
||||
factories["federation.LibraryFollow"](actor=to_purge),
|
||||
]
|
||||
|
||||
tasks.handle_purge_actors([to_purge.pk], only=["media"])
|
||||
|
||||
for k in keeped:
|
||||
# this should not be deleted
|
||||
k.refresh_from_db()
|
||||
|
||||
for d in deleted:
|
||||
with pytest.raises(d.__class__.DoesNotExist):
|
||||
d.refresh_from_db()
|
||||
|
||||
|
||||
def test_purge_actors(factories, mocker):
|
||||
handle_purge_actors = mocker.spy(tasks, "handle_purge_actors")
|
||||
factories["federation.Actor"]()
|
||||
to_delete = factories["federation.Actor"]()
|
||||
to_delete_domain = factories["federation.Actor"]()
|
||||
tasks.purge_actors(ids=[to_delete.pk], domains=[to_delete_domain.domain.name])
|
||||
tasks.purge_actors(
|
||||
ids=[to_delete.pk], domains=[to_delete_domain.domain.name], only=["hello"]
|
||||
)
|
||||
|
||||
handle_purge_actors.assert_called_once_with(ids=[to_delete.pk, to_delete_domain.pk])
|
||||
handle_purge_actors.assert_called_once_with(
|
||||
ids=[to_delete.pk, to_delete_domain.pk], only=["hello"]
|
||||
)
|
||||
|
|
|
|||
|
|
@ -175,65 +175,85 @@ def test_manage_domain_action_purge(factories, mocker):
|
|||
)
|
||||
|
||||
|
||||
def test_instance_policy_serializer_purges_target_domain(factories, mocker):
|
||||
policy = factories["moderation.InstancePolicy"](for_domain=True, block_all=False)
|
||||
@pytest.mark.parametrize(
|
||||
"param,expected_only", [("block_all", []), ("reject_media", ["media"])]
|
||||
)
|
||||
def test_instance_policy_serializer_purges_target_domain(
|
||||
factories, mocker, param, expected_only
|
||||
):
|
||||
params = {param: False}
|
||||
if param != "block_all":
|
||||
params["block_all"] = False
|
||||
policy = factories["moderation.InstancePolicy"](for_domain=True, **params)
|
||||
on_commit = mocker.patch("funkwhale_api.common.utils.on_commit")
|
||||
|
||||
serializer = serializers.ManageInstancePolicySerializer(
|
||||
policy, data={"block_all": True}, partial=True
|
||||
policy, data={param: True}, partial=True
|
||||
)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
serializer.save()
|
||||
|
||||
policy.refresh_from_db()
|
||||
|
||||
assert policy.block_all is True
|
||||
assert getattr(policy, param) is True
|
||||
on_commit.assert_called_once_with(
|
||||
federation_tasks.purge_actors.delay, domains=[policy.target_domain_id]
|
||||
federation_tasks.purge_actors.delay,
|
||||
domains=[policy.target_domain_id],
|
||||
only=expected_only,
|
||||
)
|
||||
|
||||
on_commit.reset_mock()
|
||||
|
||||
# setting to false should have no effect
|
||||
serializer = serializers.ManageInstancePolicySerializer(
|
||||
policy, data={"block_all": False}, partial=True
|
||||
policy, data={param: False}, partial=True
|
||||
)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
serializer.save()
|
||||
|
||||
policy.refresh_from_db()
|
||||
|
||||
assert policy.block_all is False
|
||||
assert getattr(policy, param) is False
|
||||
assert on_commit.call_count == 0
|
||||
|
||||
|
||||
def test_instance_policy_serializer_purges_target_actor(factories, mocker):
|
||||
policy = factories["moderation.InstancePolicy"](for_actor=True, block_all=False)
|
||||
@pytest.mark.parametrize(
|
||||
"param,expected_only", [("block_all", []), ("reject_media", ["media"])]
|
||||
)
|
||||
def test_instance_policy_serializer_purges_target_actor(
|
||||
factories, mocker, param, expected_only
|
||||
):
|
||||
params = {param: False}
|
||||
if param != "block_all":
|
||||
params["block_all"] = False
|
||||
policy = factories["moderation.InstancePolicy"](for_actor=True, **params)
|
||||
on_commit = mocker.patch("funkwhale_api.common.utils.on_commit")
|
||||
|
||||
serializer = serializers.ManageInstancePolicySerializer(
|
||||
policy, data={"block_all": True}, partial=True
|
||||
policy, data={param: True}, partial=True
|
||||
)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
serializer.save()
|
||||
|
||||
policy.refresh_from_db()
|
||||
|
||||
assert policy.block_all is True
|
||||
assert getattr(policy, param) is True
|
||||
on_commit.assert_called_once_with(
|
||||
federation_tasks.purge_actors.delay, ids=[policy.target_actor_id]
|
||||
federation_tasks.purge_actors.delay,
|
||||
ids=[policy.target_actor_id],
|
||||
only=expected_only,
|
||||
)
|
||||
|
||||
on_commit.reset_mock()
|
||||
|
||||
# setting to false should have no effect
|
||||
serializer = serializers.ManageInstancePolicySerializer(
|
||||
policy, data={"block_all": False}, partial=True
|
||||
policy, data={param: False}, partial=True
|
||||
)
|
||||
serializer.is_valid(raise_exception=True)
|
||||
serializer.save()
|
||||
|
||||
policy.refresh_from_db()
|
||||
|
||||
assert policy.block_all is False
|
||||
assert getattr(policy, param) is False
|
||||
assert on_commit.call_count == 0
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue