From 1345ba183c35774e90db8682d927caddc8d863fe Mon Sep 17 00:00:00 2001
From: Eliot Berriot <contact@eliotberriot.com>
Date: Thu, 2 May 2019 13:57:42 +0200
Subject: [PATCH] Fixed follow autoapproval not working with "instance"
 visibility level

---
 api/funkwhale_api/federation/tasks.py |  3 ++-
 api/tests/federation/test_tasks.py    | 11 ++++++++---
 2 files changed, 10 insertions(+), 4 deletions(-)

diff --git a/api/funkwhale_api/federation/tasks.py b/api/funkwhale_api/federation/tasks.py
index 7a1c7d92..f6471ef2 100644
--- a/api/funkwhale_api/federation/tasks.py
+++ b/api/funkwhale_api/federation/tasks.py
@@ -103,7 +103,8 @@ def dispatch_outbox(activity):
     inbox_items = activity.inbox_items.filter(is_read=False).select_related()
 
     if inbox_items.exists():
-        dispatch_inbox.delay(activity_id=activity.pk, call_handlers=False)
+        call_handlers = activity.type in ["Follow"]
+        dispatch_inbox.delay(activity_id=activity.pk, call_handlers=call_handlers)
 
     if not preferences.get("federation__enabled"):
         # federation is disabled, we only deliver to local recipients
diff --git a/api/tests/federation/test_tasks.py b/api/tests/federation/test_tasks.py
index 98b4eff8..7c29d469 100644
--- a/api/tests/federation/test_tasks.py
+++ b/api/tests/federation/test_tasks.py
@@ -87,16 +87,21 @@ def test_handle_in(factories, mocker, now, queryset_equal_list):
     )
 
 
-def test_dispatch_outbox(factories, mocker):
+@pytest.mark.parametrize(
+    "type, call_handlers", [("Noop", False), ("Update", False), ("Follow", True)]
+)
+def test_dispatch_outbox(factories, mocker, type, call_handlers):
     mocked_inbox = mocker.patch("funkwhale_api.federation.tasks.dispatch_inbox.delay")
     mocked_deliver_to_remote = mocker.patch(
         "funkwhale_api.federation.tasks.deliver_to_remote.delay"
     )
-    activity = factories["federation.Activity"](actor__local=True)
+    activity = factories["federation.Activity"](actor__local=True, type=type)
     factories["federation.InboxItem"](activity=activity)
     delivery = factories["federation.Delivery"](activity=activity)
     tasks.dispatch_outbox(activity_id=activity.pk)
-    mocked_inbox.assert_called_once_with(activity_id=activity.pk, call_handlers=False)
+    mocked_inbox.assert_called_once_with(
+        activity_id=activity.pk, call_handlers=call_handlers
+    )
     mocked_deliver_to_remote.assert_called_once_with(delivery_id=delivery.pk)
 
 
-- 
GitLab