From d943c90249e0a598e57a0dbdf41d387b53916092 Mon Sep 17 00:00:00 2001
From: Karen Konou <konoukaren@gmail.com>
Date: Fri, 15 Feb 2019 12:47:50 +0100
Subject: [PATCH] Add tests, change default config values, fix a bug

---
 config/config.exs                             |  4 +-
 .../web/activity_pub/mrf/hellthread_policy.ex | 12 +++--
 .../mrf/hellthread_policy_test.exs            | 50 +++++++++++++++++++
 3 files changed, 59 insertions(+), 7 deletions(-)
 create mode 100644 test/web/activity_pub/mrf/hellthread_policy_test.exs

diff --git a/config/config.exs b/config/config.exs
index 5db0ea9aa..e2a239a76 100644
--- a/config/config.exs
+++ b/config/config.exs
@@ -228,8 +228,8 @@ config :pleroma, :mrf_rejectnonpublic,
   allow_direct: false
 
 config :pleroma, :mrf_hellthread,
-  delist_threshold: 5,
-  reject_threshold: 10
+  delist_threshold: 10,
+  reject_threshold: 20
 
 config :pleroma, :mrf_simple,
   media_removal: [],
diff --git a/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex b/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex
index 1f09b4e66..95211c596 100644
--- a/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex
+++ b/lib/pleroma/web/activity_pub/mrf/hellthread_policy.ex
@@ -47,14 +47,16 @@ defmodule Pleroma.Web.ActivityPub.MRF.HellthreadPolicy do
     follower_collection = User.get_cached_by_ap_id(message["actor"]).follower_address
 
     if Enum.member?(recipients, "https://www.w3.org/ns/activitystreams#Public") do
-      recipients
-      |> List.delete("https://www.w3.org/ns/activitystreams#Public")
-      |> List.delete(follower_collection)
+      recipients =
+        recipients
+        |> List.delete("https://www.w3.org/ns/activitystreams#Public")
+        |> List.delete(follower_collection)
 
       {:public, length(recipients)}
     else
-      recipients
-      |> List.delete(follower_collection)
+      recipients =
+        recipients
+        |> List.delete(follower_collection)
 
       {:not_public, length(recipients)}
     end
diff --git a/test/web/activity_pub/mrf/hellthread_policy_test.exs b/test/web/activity_pub/mrf/hellthread_policy_test.exs
new file mode 100644
index 000000000..b5bdd35cc
--- /dev/null
+++ b/test/web/activity_pub/mrf/hellthread_policy_test.exs
@@ -0,0 +1,50 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2019 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.ActivityPub.MRF.HellthreadPolicyTest do
+  use Pleroma.DataCase
+  import Pleroma.Factory
+
+  import Pleroma.Web.ActivityPub.MRF.HellthreadPolicy
+
+  describe "hellthread filter tests" do
+    setup do
+      user = insert(:user)
+
+      message = %{
+        "actor" => user.ap_id,
+        "cc" => [user.follower_address],
+        "type" => "Create",
+        "to" => [
+          "https://www.w3.org/ns/activitystreams#Public",
+          "https://instace.tld/users/user1",
+          "https://instace.tld/users/user2",
+          "https://instace.tld/users/user3"
+        ]
+      }
+
+      [user: user, message: message]
+    end
+
+    test "reject test", %{message: message} do
+      Pleroma.Config.put([:mrf_hellthread], %{delist_threshold: 0, reject_threshold: 2})
+
+      {:reject, nil} = filter(message)
+    end
+
+    test "delist test", %{user: user, message: message} do
+      Pleroma.Config.put([:mrf_hellthread], %{delist_threshold: 2, reject_threshold: 0})
+
+      {:ok, message} = filter(message)
+      assert user.follower_address in message["to"]
+      assert "https://www.w3.org/ns/activitystreams#Public" in message["cc"]
+    end
+
+    test "threshold test", %{message: message} do
+      Pleroma.Config.put([:mrf_hellthread], %{delist_threshold: 0, reject_threshold: 3})
+
+      {:ok, _} = filter(message)
+    end
+  end
+end
-- 
GitLab