diff options
Diffstat (limited to 'test/web/activity_pub')
| -rw-r--r-- | test/web/activity_pub/activity_pub_test.exs | 3 | ||||
| -rw-r--r-- | test/web/activity_pub/mrf/activity_expiration_policy_test.exs | 7 | ||||
| -rw-r--r-- | test/web/activity_pub/mrf/ensure_re_prepended_test.exs | 10 | ||||
| -rw-r--r-- | test/web/activity_pub/mrf/object_age_policy_test.exs | 42 | ||||
| -rw-r--r-- | test/web/activity_pub/mrf/simple_policy_test.exs | 60 | ||||
| -rw-r--r-- | test/web/activity_pub/pipeline_test.exs | 45 | ||||
| -rw-r--r-- | test/web/activity_pub/side_effects_test.exs | 8 | ||||
| -rw-r--r-- | test/web/activity_pub/transmogrifier/chat_message_test.exs | 18 | ||||
| -rw-r--r-- | test/web/activity_pub/transmogrifier_test.exs | 12 | ||||
| -rw-r--r-- | test/web/activity_pub/utils_test.exs | 3 | 
10 files changed, 202 insertions, 6 deletions
diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index f3951462f..d6eab7337 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -1179,7 +1179,8 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do          "id" => activity_ap_id,          "content" => content,          "published" => activity_with_object.object.data["published"], -        "actor" => AccountView.render("show.json", %{user: target_account}) +        "actor" => +          AccountView.render("show.json", %{user: target_account, skip_visibility_check: true})        }        assert %Activity{ diff --git a/test/web/activity_pub/mrf/activity_expiration_policy_test.exs b/test/web/activity_pub/mrf/activity_expiration_policy_test.exs index 8babf49e7..f25cf8b12 100644 --- a/test/web/activity_pub/mrf/activity_expiration_policy_test.exs +++ b/test/web/activity_pub/mrf/activity_expiration_policy_test.exs @@ -7,11 +7,13 @@ defmodule Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicyTest do    alias Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicy    @id Pleroma.Web.Endpoint.url() <> "/activities/cofe" +  @local_actor Pleroma.Web.Endpoint.url() <> "/users/cofe"    test "adds `expires_at` property" do      assert {:ok, %{"type" => "Create", "expires_at" => expires_at}} =               ActivityExpirationPolicy.filter(%{                 "id" => @id, +               "actor" => @local_actor,                 "type" => "Create",                 "object" => %{"type" => "Note"}               }) @@ -25,6 +27,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicyTest do      assert {:ok, %{"type" => "Create", "expires_at" => ^expires_at}} =               ActivityExpirationPolicy.filter(%{                 "id" => @id, +               "actor" => @local_actor,                 "type" => "Create",                 "expires_at" => expires_at,                 "object" => %{"type" => "Note"} @@ -37,6 +40,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicyTest do      assert {:ok, %{"type" => "Create", "expires_at" => expires_at}} =               ActivityExpirationPolicy.filter(%{                 "id" => @id, +               "actor" => @local_actor,                 "type" => "Create",                 "expires_at" => too_distant_future,                 "object" => %{"type" => "Note"} @@ -49,6 +53,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicyTest do      assert {:ok, activity} =               ActivityExpirationPolicy.filter(%{                 "id" => "https://example.com/123", +               "actor" => "https://example.com/users/cofe",                 "type" => "Create",                 "object" => %{"type" => "Note"}               }) @@ -60,6 +65,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicyTest do      assert {:ok, activity} =               ActivityExpirationPolicy.filter(%{                 "id" => "https://example.com/123", +               "actor" => "https://example.com/users/cofe",                 "type" => "Follow"               }) @@ -68,6 +74,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.ActivityExpirationPolicyTest do      assert {:ok, activity} =               ActivityExpirationPolicy.filter(%{                 "id" => "https://example.com/123", +               "actor" => "https://example.com/users/cofe",                 "type" => "Create",                 "object" => %{"type" => "Cofe"}               }) diff --git a/test/web/activity_pub/mrf/ensure_re_prepended_test.exs b/test/web/activity_pub/mrf/ensure_re_prepended_test.exs index 38ddec5bb..9a283f27d 100644 --- a/test/web/activity_pub/mrf/ensure_re_prepended_test.exs +++ b/test/web/activity_pub/mrf/ensure_re_prepended_test.exs @@ -78,5 +78,15 @@ defmodule Pleroma.Web.ActivityPub.MRF.EnsureRePrependedTest do        assert {:ok, res} = EnsureRePrepended.filter(message)        assert res == message      end + +    test "it skips if the object is only a reference" do +      message = %{ +        "type" => "Create", +        "object" => "somereference" +      } + +      assert {:ok, res} = EnsureRePrepended.filter(message) +      assert res == message +    end    end  end diff --git a/test/web/activity_pub/mrf/object_age_policy_test.exs b/test/web/activity_pub/mrf/object_age_policy_test.exs index b0fb753bd..cf6acc9a2 100644 --- a/test/web/activity_pub/mrf/object_age_policy_test.exs +++ b/test/web/activity_pub/mrf/object_age_policy_test.exs @@ -38,6 +38,17 @@ defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicyTest do    end    describe "with reject action" do +    test "works with objects with empty to or cc fields" do +      Config.put([:mrf_object_age, :actions], [:reject]) + +      data = +        get_old_message() +        |> Map.put("cc", nil) +        |> Map.put("to", nil) + +      assert match?({:reject, _}, ObjectAgePolicy.filter(data)) +    end +      test "it rejects an old post" do        Config.put([:mrf_object_age, :actions], [:reject]) @@ -56,6 +67,21 @@ defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicyTest do    end    describe "with delist action" do +    test "works with objects with empty to or cc fields" do +      Config.put([:mrf_object_age, :actions], [:delist]) + +      data = +        get_old_message() +        |> Map.put("cc", nil) +        |> Map.put("to", nil) + +      {:ok, _u} = User.get_or_fetch_by_ap_id(data["actor"]) + +      {:ok, data} = ObjectAgePolicy.filter(data) + +      assert Visibility.get_visibility(%{data: data}) == "unlisted" +    end +      test "it delists an old post" do        Config.put([:mrf_object_age, :actions], [:delist]) @@ -80,6 +106,22 @@ defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicyTest do    end    describe "with strip_followers action" do +    test "works with objects with empty to or cc fields" do +      Config.put([:mrf_object_age, :actions], [:strip_followers]) + +      data = +        get_old_message() +        |> Map.put("cc", nil) +        |> Map.put("to", nil) + +      {:ok, user} = User.get_or_fetch_by_ap_id(data["actor"]) + +      {:ok, data} = ObjectAgePolicy.filter(data) + +      refute user.follower_address in data["to"] +      refute user.follower_address in data["cc"] +    end +      test "it strips followers collections from an old post" do        Config.put([:mrf_object_age, :actions], [:strip_followers]) diff --git a/test/web/activity_pub/mrf/simple_policy_test.exs b/test/web/activity_pub/mrf/simple_policy_test.exs index e842d8d8d..d7dde62c4 100644 --- a/test/web/activity_pub/mrf/simple_policy_test.exs +++ b/test/web/activity_pub/mrf/simple_policy_test.exs @@ -7,6 +7,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do    import Pleroma.Factory    alias Pleroma.Config    alias Pleroma.Web.ActivityPub.MRF.SimplePolicy +  alias Pleroma.Web.CommonAPI    setup do:            clear_config(:mrf_simple, @@ -15,6 +16,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do              federated_timeline_removal: [],              report_removal: [],              reject: [], +            followers_only: [],              accept: [],              avatar_removal: [],              banner_removal: [], @@ -261,6 +263,64 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do      end    end +  describe "when :followers_only" do +    test "is empty" do +      Config.put([:mrf_simple, :followers_only], []) +      {_, 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 = insert(:user) +      following_user = insert(:user) +      non_following_user = insert(:user) + +      {:ok, _, _, _} = CommonAPI.follow(following_user, actor) + +      activity = %{ +        "actor" => actor.ap_id, +        "to" => [ +          "https://www.w3.org/ns/activitystreams#Public", +          following_user.ap_id, +          non_following_user.ap_id +        ], +        "cc" => [actor.follower_address, "http://foo.bar/qux"] +      } + +      dm_activity = %{ +        "actor" => actor.ap_id, +        "to" => [ +          following_user.ap_id, +          non_following_user.ap_id +        ], +        "cc" => [] +      } + +      actor_domain = +        activity +        |> Map.fetch!("actor") +        |> URI.parse() +        |> Map.fetch!(:host) + +      Config.put([:mrf_simple, :followers_only], [actor_domain]) + +      assert {:ok, new_activity} = SimplePolicy.filter(activity) +      assert actor.follower_address in new_activity["cc"] +      assert following_user.ap_id in new_activity["to"] +      refute "https://www.w3.org/ns/activitystreams#Public" in new_activity["to"] +      refute "https://www.w3.org/ns/activitystreams#Public" in new_activity["cc"] +      refute non_following_user.ap_id in new_activity["to"] +      refute non_following_user.ap_id in new_activity["cc"] + +      assert {:ok, new_dm_activity} = SimplePolicy.filter(dm_activity) +      assert new_dm_activity["to"] == [following_user.ap_id] +      assert new_dm_activity["cc"] == [] +    end +  end +    describe "when :accept" do      test "is empty" do        Config.put([:mrf_simple, :accept], []) diff --git a/test/web/activity_pub/pipeline_test.exs b/test/web/activity_pub/pipeline_test.exs index 8deb64501..f2a231eaf 100644 --- a/test/web/activity_pub/pipeline_test.exs +++ b/test/web/activity_pub/pipeline_test.exs @@ -14,6 +14,51 @@ defmodule Pleroma.Web.ActivityPub.PipelineTest do        :ok      end +    test "when given an `object_data` in meta, Federation will receive a the original activity with the `object` field set to this embedded object" do +      activity = insert(:note_activity) +      object = %{"id" => "1", "type" => "Love"} +      meta = [local: true, object_data: object] + +      activity_with_object = %{activity | data: Map.put(activity.data, "object", object)} + +      with_mocks([ +        {Pleroma.Web.ActivityPub.ObjectValidator, [], [validate: fn o, m -> {:ok, o, m} end]}, +        { +          Pleroma.Web.ActivityPub.MRF, +          [], +          [filter: fn o -> {:ok, o} end] +        }, +        { +          Pleroma.Web.ActivityPub.ActivityPub, +          [], +          [persist: fn o, m -> {:ok, o, m} end] +        }, +        { +          Pleroma.Web.ActivityPub.SideEffects, +          [], +          [ +            handle: fn o, m -> {:ok, o, m} end, +            handle_after_transaction: fn m -> m end +          ] +        }, +        { +          Pleroma.Web.Federator, +          [], +          [publish: fn _o -> :ok end] +        } +      ]) do +        assert {:ok, ^activity, ^meta} = +                 Pleroma.Web.ActivityPub.Pipeline.common_pipeline(activity, meta) + +        assert_called(Pleroma.Web.ActivityPub.ObjectValidator.validate(activity, meta)) +        assert_called(Pleroma.Web.ActivityPub.MRF.filter(activity)) +        assert_called(Pleroma.Web.ActivityPub.ActivityPub.persist(activity, meta)) +        assert_called(Pleroma.Web.ActivityPub.SideEffects.handle(activity, meta)) +        refute called(Pleroma.Web.Federator.publish(activity)) +        assert_called(Pleroma.Web.Federator.publish(activity_with_object)) +      end +    end +      test "it goes through validation, filtering, persisting, side effects and federation for local activities" do        activity = insert(:note_activity)        meta = [local: true] diff --git a/test/web/activity_pub/side_effects_test.exs b/test/web/activity_pub/side_effects_test.exs index 2649b060a..4a08eb7ee 100644 --- a/test/web/activity_pub/side_effects_test.exs +++ b/test/web/activity_pub/side_effects_test.exs @@ -312,8 +312,12 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do        }      end -    test "deletes the original block", %{block_undo: block_undo, block: block} do -      {:ok, _block_undo, _} = SideEffects.handle(block_undo) +    test "deletes the original block", %{ +      block_undo: block_undo, +      block: block +    } do +      {:ok, _block_undo, _meta} = SideEffects.handle(block_undo) +        refute Activity.get_by_id(block.id)      end diff --git a/test/web/activity_pub/transmogrifier/chat_message_test.exs b/test/web/activity_pub/transmogrifier/chat_message_test.exs index d6736dc3e..31274c067 100644 --- a/test/web/activity_pub/transmogrifier/chat_message_test.exs +++ b/test/web/activity_pub/transmogrifier/chat_message_test.exs @@ -124,6 +124,24 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.ChatMessageTest do        {:ok, %Activity{} = _activity} = Transmogrifier.handle_incoming(data)      end +    test "it doesn't work for deactivated users" do +      data = +        File.read!("test/fixtures/create-chat-message.json") +        |> Poison.decode!() + +      _author = +        insert(:user, +          ap_id: data["actor"], +          local: false, +          last_refreshed_at: DateTime.utc_now(), +          deactivated: true +        ) + +      _recipient = insert(:user, ap_id: List.first(data["to"]), local: true) + +      assert {:error, _} = Transmogrifier.handle_incoming(data) +    end +      test "it inserts it and creates a chat" do        data =          File.read!("test/fixtures/create-chat-message.json") diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index 248b410c6..828964a36 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -160,7 +160,15 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do        assert capture_log(fn ->                 {:ok, _returned_activity} = Transmogrifier.handle_incoming(data) -             end) =~ "[error] Couldn't fetch \"https://404.site/whatever\", error: nil" +             end) =~ "[warn] Couldn't fetch \"https://404.site/whatever\", error: nil" +    end + +    test "it does not work for deactivated users" do +      data = File.read!("test/fixtures/mastodon-post-activity.json") |> Poison.decode!() + +      insert(:user, ap_id: data["actor"], deactivated: true) + +      assert {:error, _} = Transmogrifier.handle_incoming(data)      end      test "it works for incoming notices" do @@ -710,7 +718,7 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do          "id" => activity.data["id"],          "content" => "test post",          "published" => object.data["published"], -        "actor" => AccountView.render("show.json", %{user: user}) +        "actor" => AccountView.render("show.json", %{user: user, skip_visibility_check: true})        }        message = %{ diff --git a/test/web/activity_pub/utils_test.exs b/test/web/activity_pub/utils_test.exs index 361dc5a41..d50213545 100644 --- a/test/web/activity_pub/utils_test.exs +++ b/test/web/activity_pub/utils_test.exs @@ -482,7 +482,8 @@ defmodule Pleroma.Web.ActivityPub.UtilsTest do          "id" => activity_ap_id,          "content" => content,          "published" => activity.object.data["published"], -        "actor" => AccountView.render("show.json", %{user: target_account}) +        "actor" => +          AccountView.render("show.json", %{user: target_account, skip_visibility_check: true})        }        assert %{  | 
