Browse Source

Add tests for MRF.SimplePolicy

tags/v1.1.4
Aaron Tinio 5 years ago
parent
commit
443cd68a4c
1 changed files with 192 additions and 0 deletions
  1. +192
    -0
      test/web/activity_pub/mrf/simple_policy_test.exs

+ 192
- 0
test/web/activity_pub/mrf/simple_policy_test.exs View File

@@ -0,0 +1,192 @@
# 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.SimplePolicyTest do
use Pleroma.DataCase
import Pleroma.Factory
alias Pleroma.Config
alias Pleroma.Web.ActivityPub.MRF.SimplePolicy

setup do
orig = Config.get!(:mrf_simple)

Config.put(:mrf_simple,
media_removal: [],
media_nsfw: [],
federated_timeline_removal: [],
reject: [],
accept: []
)

on_exit(fn ->
Config.put(:mrf_simple, orig)
end)
end

describe "when :media_removal" do
test "is empty" do
Config.put([:mrf_simple, :media_removal], [])
media_message = build_media_message()
local_message = build_local_message()

assert SimplePolicy.filter(media_message) == {:ok, media_message}
assert SimplePolicy.filter(local_message) == {:ok, local_message}
end

test "has a matching host" do
Config.put([:mrf_simple, :media_removal], ["remote.instance"])
media_message = build_media_message()
local_message = build_local_message()

assert SimplePolicy.filter(media_message) ==
{:ok,
media_message
|> Map.put("object", Map.delete(media_message["object"], "attachment"))}

assert SimplePolicy.filter(local_message) == {:ok, local_message}
end
end

describe "when :media_nsfw" do
test "is empty" do
Config.put([:mrf_simple, :media_nsfw], [])
media_message = build_media_message()
local_message = build_local_message()

assert SimplePolicy.filter(media_message) == {:ok, media_message}
assert SimplePolicy.filter(local_message) == {:ok, local_message}
end

test "has a matching host" do
Config.put([:mrf_simple, :media_nsfw], ["remote.instance"])
media_message = build_media_message()
local_message = build_local_message()

assert SimplePolicy.filter(media_message) ==
{:ok,
media_message
|> put_in(["object", "tag"], ["foo", "nsfw"])
|> put_in(["object", "sensitive"], true)}

assert SimplePolicy.filter(local_message) == {:ok, local_message}
end
end

defp build_media_message do
%{
"actor" => "https://remote.instance/users/bob",
"type" => "Create",
"object" => %{
"attachment" => [%{}],
"tag" => ["foo"],
"sensitive" => false
}
}
end

describe "when :federated_timeline_removal" do
test "is empty" do
Config.put([:mrf_simple, :federated_timeline_removal], [])
{_, ftl_message} = build_ftl_actor_and_message()
local_message = build_local_message()

assert SimplePolicy.filter(ftl_message) == {:ok, ftl_message}
assert SimplePolicy.filter(local_message) == {:ok, local_message}
end

test "has a matching host" do
{actor, ftl_message} = build_ftl_actor_and_message()

ftl_message_actor_host =
ftl_message
|> Map.fetch!("actor")
|> URI.parse()
|> Map.fetch!(:host)

Config.put([:mrf_simple, :federated_timeline_removal], [ftl_message_actor_host])
local_message = build_local_message()

assert {:ok, ftl_message} = SimplePolicy.filter(ftl_message)
assert actor.follower_address in ftl_message["to"]
refute actor.follower_address in ftl_message["cc"]
refute "https://www.w3.org/ns/activitystreams#Public" in ftl_message["to"]
assert "https://www.w3.org/ns/activitystreams#Public" in ftl_message["cc"]

assert SimplePolicy.filter(local_message) == {:ok, local_message}
end
end

defp build_ftl_actor_and_message do
actor = insert(:user)

{actor,
%{
"actor" => actor.ap_id,
"to" => ["https://www.w3.org/ns/activitystreams#Public", "http://foo.bar/baz"],
"cc" => [actor.follower_address, "http://foo.bar/qux"]
}}
end

describe "when :reject" do
test "is empty" do
Config.put([:mrf_simple, :reject], [])

remote_message = build_remote_message()

assert SimplePolicy.filter(remote_message) == {:ok, remote_message}
end

test "has a matching host" do
Config.put([:mrf_simple, :reject], ["remote.instance"])

remote_message = build_remote_message()

assert SimplePolicy.filter(remote_message) == {:reject, nil}
end
end

describe "when :accept" do
test "is empty" do
Config.put([:mrf_simple, :accept], [])

local_message = build_local_message()
remote_message = build_remote_message()

assert SimplePolicy.filter(local_message) == {:ok, local_message}
assert SimplePolicy.filter(remote_message) == {:ok, remote_message}
end

test "is not empty but it doesn't have a matching host" do
Config.put([:mrf_simple, :accept], ["non.matching.remote"])

local_message = build_local_message()
remote_message = build_remote_message()

assert SimplePolicy.filter(local_message) == {:ok, local_message}
assert SimplePolicy.filter(remote_message) == {:reject, nil}
end

test "has a matching host" do
Config.put([:mrf_simple, :accept], ["remote.instance"])

local_message = build_local_message()
remote_message = build_remote_message()

assert SimplePolicy.filter(local_message) == {:ok, local_message}
assert SimplePolicy.filter(remote_message) == {:ok, remote_message}
end
end

defp build_local_message do
%{
"actor" => "#{Pleroma.Web.base_url()}/users/alice",
"to" => [],
"cc" => []
}
end

defp build_remote_message do
%{"actor" => "https://remote.instance/users/bob"}
end
end

Loading…
Cancel
Save