diff options
Diffstat (limited to 'test/web/activity_pub/mrf')
| -rw-r--r-- | test/web/activity_pub/mrf/keyword_policy_test.exs | 111 | 
1 files changed, 111 insertions, 0 deletions
diff --git a/test/web/activity_pub/mrf/keyword_policy_test.exs b/test/web/activity_pub/mrf/keyword_policy_test.exs new file mode 100644 index 000000000..67a5858d7 --- /dev/null +++ b/test/web/activity_pub/mrf/keyword_policy_test.exs @@ -0,0 +1,111 @@ +# 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.KeywordPolicyTest do +  use Pleroma.DataCase + +  alias Pleroma.Web.ActivityPub.MRF.KeywordPolicy + +  setup do +    Pleroma.Config.put([:mrf_keyword], %{reject: [], federated_timeline_removal: [], replace: []}) +  end + +  describe "rejecting based on keywords" do +    test "rejects if string matches" do +      Pleroma.Config.put([:mrf_keyword, :reject], ["pun"]) + +      message = %{ +        "type" => "Create", +        "object" => %{"content" => "just a daily reminder that compLAINer is a good pun"} +      } + +      assert {:reject, nil} == KeywordPolicy.filter(message) +    end + +    test "rejects if regex matches" do +      Pleroma.Config.put([:mrf_keyword, :reject], [~r/comp[lL][aA][iI][nN]er/]) + +      assert true == +               Enum.all?(["complainer", "compLainer", "compLAiNer", "compLAINer"], fn content -> +                 message = %{ +                   "type" => "Create", +                   "object" => %{ +                     "content" => "just a daily reminder that #{content} is a good pun" +                   } +                 } + +                 {:reject, nil} == KeywordPolicy.filter(message) +               end) +    end +  end + +  describe "delisting from ftl based on keywords" do +    test "delists if string matches" do +      Pleroma.Config.put([:mrf_keyword, :federated_timeline_removal], ["pun"]) + +      message = %{ +        "to" => ["https://www.w3.org/ns/activitystreams#Public"], +        "type" => "Create", +        "object" => %{"content" => "just a daily reminder that compLAINer is a good pun"} +      } + +      {:ok, result} = KeywordPolicy.filter(message) +      assert ["https://www.w3.org/ns/activitystreams#Public"] == result["cc"] +      refute ["https://www.w3.org/ns/activitystreams#Public"] == result["to"] +    end + +    test "delists if regex matches" do +      Pleroma.Config.put([:mrf_keyword, :federated_timeline_removal], [~r/comp[lL][aA][iI][nN]er/]) + +      assert true == +               Enum.all?(["complainer", "compLainer", "compLAiNer", "compLAINer"], fn content -> +                 message = %{ +                   "type" => "Create", +                   "to" => ["https://www.w3.org/ns/activitystreams#Public"], +                   "object" => %{ +                     "content" => "just a daily reminder that #{content} is a good pun" +                   } +                 } + +                 {:ok, result} = KeywordPolicy.filter(message) + +                 ["https://www.w3.org/ns/activitystreams#Public"] == result["cc"] and +                   not (["https://www.w3.org/ns/activitystreams#Public"] == result["to"]) +               end) +    end +  end + +  describe "replacing keywords" do +    test "replaces keyword if string matches" do +      Pleroma.Config.put([:mrf_keyword, :replace], [{"opensource", "free software"}]) + +      message = %{ +        "type" => "Create", +        "to" => ["https://www.w3.org/ns/activitystreams#Public"], +        "object" => %{"content" => "ZFS is opensource"} +      } + +      {:ok, %{"object" => %{"content" => result}}} = KeywordPolicy.filter(message) +      assert result == "ZFS is free software" +    end + +    test "replaces keyword if regex matches" do +      Pleroma.Config.put([:mrf_keyword, :replace], [ +        {~r/open(-|\s)?source\s?(software)?/, "free software"} +      ]) + +      assert true == +               Enum.all?(["opensource", "open-source", "open source"], fn content -> +                 message = %{ +                   "type" => "Create", +                   "to" => ["https://www.w3.org/ns/activitystreams#Public"], +                   "object" => %{"content" => "ZFS is #{content}"} +                 } + +                 {:ok, %{"object" => %{"content" => result}}} = KeywordPolicy.filter(message) +                 result == "ZFS is free software" +               end) +    end +  end +end  | 
