diff options
Diffstat (limited to 'test/web/activity_pub')
| -rw-r--r-- | test/web/activity_pub/activity_pub_test.exs | 1 | ||||
| -rw-r--r-- | test/web/activity_pub/mrf/object_age_policy_test.exs | 52 | ||||
| -rw-r--r-- | test/web/activity_pub/mrf/simple_policy_test.exs | 70 | ||||
| -rw-r--r-- | test/web/activity_pub/publisher_test.exs | 52 | ||||
| -rw-r--r-- | test/web/activity_pub/side_effects_test.exs | 12 | ||||
| -rw-r--r-- | test/web/activity_pub/transmogrifier_test.exs | 22 | ||||
| -rw-r--r-- | test/web/activity_pub/views/user_view_test.exs | 4 | 
7 files changed, 143 insertions, 70 deletions
diff --git a/test/web/activity_pub/activity_pub_test.exs b/test/web/activity_pub/activity_pub_test.exs index 17e7b97de..6410df49b 100644 --- a/test/web/activity_pub/activity_pub_test.exs +++ b/test/web/activity_pub/activity_pub_test.exs @@ -180,7 +180,6 @@ defmodule Pleroma.Web.ActivityPub.ActivityPubTest do        {:ok, user} = ActivityPub.make_user_from_ap_id(user_id)        assert user.ap_id == user_id        assert user.nickname == "admin@mastodon.example.org" -      assert user.source_data        assert user.ap_enabled        assert user.follower_address == "http://mastodon.example.org/users/admin/followers"      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 7ee195eeb..b0fb753bd 100644 --- a/test/web/activity_pub/mrf/object_age_policy_test.exs +++ b/test/web/activity_pub/mrf/object_age_policy_test.exs @@ -20,26 +20,38 @@ defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicyTest do      :ok    end +  defp get_old_message do +    File.read!("test/fixtures/mastodon-post-activity.json") +    |> Poison.decode!() +  end + +  defp get_new_message do +    old_message = get_old_message() + +    new_object = +      old_message +      |> Map.get("object") +      |> Map.put("published", DateTime.utc_now() |> DateTime.to_iso8601()) + +    old_message +    |> Map.put("object", new_object) +  end +    describe "with reject action" do      test "it rejects an old post" do        Config.put([:mrf_object_age, :actions], [:reject]) -      data = -        File.read!("test/fixtures/mastodon-post-activity.json") -        |> Poison.decode!() +      data = get_old_message() -      {:reject, _} = ObjectAgePolicy.filter(data) +      assert match?({:reject, _}, ObjectAgePolicy.filter(data))      end      test "it allows a new post" do        Config.put([:mrf_object_age, :actions], [:reject]) -      data = -        File.read!("test/fixtures/mastodon-post-activity.json") -        |> Poison.decode!() -        |> Map.put("published", DateTime.utc_now() |> DateTime.to_iso8601()) +      data = get_new_message() -      {:ok, _} = ObjectAgePolicy.filter(data) +      assert match?({:ok, _}, ObjectAgePolicy.filter(data))      end    end @@ -47,9 +59,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicyTest do      test "it delists an old post" do        Config.put([:mrf_object_age, :actions], [:delist]) -      data = -        File.read!("test/fixtures/mastodon-post-activity.json") -        |> Poison.decode!() +      data = get_old_message()        {:ok, _u} = User.get_or_fetch_by_ap_id(data["actor"]) @@ -61,14 +71,11 @@ defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicyTest do      test "it allows a new post" do        Config.put([:mrf_object_age, :actions], [:delist]) -      data = -        File.read!("test/fixtures/mastodon-post-activity.json") -        |> Poison.decode!() -        |> Map.put("published", DateTime.utc_now() |> DateTime.to_iso8601()) +      data = get_new_message()        {:ok, _user} = User.get_or_fetch_by_ap_id(data["actor"]) -      {:ok, ^data} = ObjectAgePolicy.filter(data) +      assert match?({:ok, ^data}, ObjectAgePolicy.filter(data))      end    end @@ -76,9 +83,7 @@ defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicyTest do      test "it strips followers collections from an old post" do        Config.put([:mrf_object_age, :actions], [:strip_followers]) -      data = -        File.read!("test/fixtures/mastodon-post-activity.json") -        |> Poison.decode!() +      data = get_old_message()        {:ok, user} = User.get_or_fetch_by_ap_id(data["actor"]) @@ -91,14 +96,11 @@ defmodule Pleroma.Web.ActivityPub.MRF.ObjectAgePolicyTest do      test "it allows a new post" do        Config.put([:mrf_object_age, :actions], [:strip_followers]) -      data = -        File.read!("test/fixtures/mastodon-post-activity.json") -        |> Poison.decode!() -        |> Map.put("published", DateTime.utc_now() |> DateTime.to_iso8601()) +      data = get_new_message()        {:ok, _u} = User.get_or_fetch_by_ap_id(data["actor"]) -      {:ok, ^data} = ObjectAgePolicy.filter(data) +      assert match?({:ok, ^data}, ObjectAgePolicy.filter(data))      end    end  end diff --git a/test/web/activity_pub/mrf/simple_policy_test.exs b/test/web/activity_pub/mrf/simple_policy_test.exs index 91c24c2d9..b7b9bc6a2 100644 --- a/test/web/activity_pub/mrf/simple_policy_test.exs +++ b/test/web/activity_pub/mrf/simple_policy_test.exs @@ -17,7 +17,8 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do              reject: [],              accept: [],              avatar_removal: [], -            banner_removal: [] +            banner_removal: [], +            reject_deletes: []            )    describe "when :media_removal" do @@ -382,6 +383,66 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do      end    end +  describe "when :reject_deletes is empty" do +    setup do: Config.put([:mrf_simple, :reject_deletes], []) + +    test "it accepts deletions even from rejected servers" do +      Config.put([:mrf_simple, :reject], ["remote.instance"]) + +      deletion_message = build_remote_deletion_message() + +      assert SimplePolicy.filter(deletion_message) == {:ok, deletion_message} +    end + +    test "it accepts deletions even from non-whitelisted servers" do +      Config.put([:mrf_simple, :accept], ["non.matching.remote"]) + +      deletion_message = build_remote_deletion_message() + +      assert SimplePolicy.filter(deletion_message) == {:ok, deletion_message} +    end +  end + +  describe "when :reject_deletes is not empty but it doesn't have a matching host" do +    setup do: Config.put([:mrf_simple, :reject_deletes], ["non.matching.remote"]) + +    test "it accepts deletions even from rejected servers" do +      Config.put([:mrf_simple, :reject], ["remote.instance"]) + +      deletion_message = build_remote_deletion_message() + +      assert SimplePolicy.filter(deletion_message) == {:ok, deletion_message} +    end + +    test "it accepts deletions even from non-whitelisted servers" do +      Config.put([:mrf_simple, :accept], ["non.matching.remote"]) + +      deletion_message = build_remote_deletion_message() + +      assert SimplePolicy.filter(deletion_message) == {:ok, deletion_message} +    end +  end + +  describe "when :reject_deletes has a matching host" do +    setup do: Config.put([:mrf_simple, :reject_deletes], ["remote.instance"]) + +    test "it rejects the deletion" do +      deletion_message = build_remote_deletion_message() + +      assert SimplePolicy.filter(deletion_message) == {:reject, nil} +    end +  end + +  describe "when :reject_deletes match with wildcard domain" do +    setup do: Config.put([:mrf_simple, :reject_deletes], ["*.remote.instance"]) + +    test "it rejects the deletion" do +      deletion_message = build_remote_deletion_message() + +      assert SimplePolicy.filter(deletion_message) == {:reject, nil} +    end +  end +    defp build_local_message do      %{        "actor" => "#{Pleroma.Web.base_url()}/users/alice", @@ -408,4 +469,11 @@ defmodule Pleroma.Web.ActivityPub.MRF.SimplePolicyTest do        "type" => "Person"      }    end + +  defp build_remote_deletion_message do +    %{ +      "type" => "Delete", +      "actor" => "https://remote.instance/users/bob" +    } +  end  end diff --git a/test/web/activity_pub/publisher_test.exs b/test/web/activity_pub/publisher_test.exs index 801da03c1..c2bc38d52 100644 --- a/test/web/activity_pub/publisher_test.exs +++ b/test/web/activity_pub/publisher_test.exs @@ -48,10 +48,7 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do    describe "determine_inbox/2" do      test "it returns sharedInbox for messages involving as:Public in to" do -      user = -        insert(:user, %{ -          source_data: %{"endpoints" => %{"sharedInbox" => "http://example.com/inbox"}} -        }) +      user = insert(:user, %{shared_inbox: "http://example.com/inbox"})        activity = %Activity{          data: %{"to" => [@as_public], "cc" => [user.follower_address]} @@ -61,10 +58,7 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do      end      test "it returns sharedInbox for messages involving as:Public in cc" do -      user = -        insert(:user, %{ -          source_data: %{"endpoints" => %{"sharedInbox" => "http://example.com/inbox"}} -        }) +      user = insert(:user, %{shared_inbox: "http://example.com/inbox"})        activity = %Activity{          data: %{"cc" => [@as_public], "to" => [user.follower_address]} @@ -74,11 +68,7 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do      end      test "it returns sharedInbox for messages involving multiple recipients in to" do -      user = -        insert(:user, %{ -          source_data: %{"endpoints" => %{"sharedInbox" => "http://example.com/inbox"}} -        }) - +      user = insert(:user, %{shared_inbox: "http://example.com/inbox"})        user_two = insert(:user)        user_three = insert(:user) @@ -90,11 +80,7 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do      end      test "it returns sharedInbox for messages involving multiple recipients in cc" do -      user = -        insert(:user, %{ -          source_data: %{"endpoints" => %{"sharedInbox" => "http://example.com/inbox"}} -        }) - +      user = insert(:user, %{shared_inbox: "http://example.com/inbox"})        user_two = insert(:user)        user_three = insert(:user) @@ -107,12 +93,10 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do      test "it returns sharedInbox for messages involving multiple recipients in total" do        user = -        insert(:user, -          source_data: %{ -            "inbox" => "http://example.com/personal-inbox", -            "endpoints" => %{"sharedInbox" => "http://example.com/inbox"} -          } -        ) +        insert(:user, %{ +          shared_inbox: "http://example.com/inbox", +          inbox: "http://example.com/personal-inbox" +        })        user_two = insert(:user) @@ -125,12 +109,10 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do      test "it returns inbox for messages involving single recipients in total" do        user = -        insert(:user, -          source_data: %{ -            "inbox" => "http://example.com/personal-inbox", -            "endpoints" => %{"sharedInbox" => "http://example.com/inbox"} -          } -        ) +        insert(:user, %{ +          shared_inbox: "http://example.com/inbox", +          inbox: "http://example.com/personal-inbox" +        })        activity = %Activity{          data: %{"to" => [user.ap_id], "cc" => []} @@ -258,11 +240,11 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do                     [:passthrough],                     [] do        follower = -        insert(:user, +        insert(:user, %{            local: false, -          source_data: %{"inbox" => "https://domain.com/users/nick1/inbox"}, +          inbox: "https://domain.com/users/nick1/inbox",            ap_enabled: true -        ) +        })        actor = insert(:user, follower_address: follower.ap_id)        user = insert(:user) @@ -295,14 +277,14 @@ defmodule Pleroma.Web.ActivityPub.PublisherTest do        fetcher =          insert(:user,            local: false, -          source_data: %{"inbox" => "https://domain.com/users/nick1/inbox"}, +          inbox: "https://domain.com/users/nick1/inbox",            ap_enabled: true          )        another_fetcher =          insert(:user,            local: false, -          source_data: %{"inbox" => "https://domain2.com/users/nick1/inbox"}, +          inbox: "https://domain2.com/users/nick1/inbox",            ap_enabled: true          ) diff --git a/test/web/activity_pub/side_effects_test.exs b/test/web/activity_pub/side_effects_test.exs index b67bd14b3..0b6b55156 100644 --- a/test/web/activity_pub/side_effects_test.exs +++ b/test/web/activity_pub/side_effects_test.exs @@ -5,7 +5,9 @@  defmodule Pleroma.Web.ActivityPub.SideEffectsTest do    use Pleroma.DataCase +  alias Pleroma.Notification    alias Pleroma.Object +  alias Pleroma.Repo    alias Pleroma.Web.ActivityPub.ActivityPub    alias Pleroma.Web.ActivityPub.Builder    alias Pleroma.Web.ActivityPub.SideEffects @@ -15,13 +17,14 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do    describe "like objects" do      setup do +      poster = insert(:user)        user = insert(:user) -      {:ok, post} = CommonAPI.post(user, %{"status" => "hey"}) +      {:ok, post} = CommonAPI.post(poster, %{"status" => "hey"})        {:ok, like_data, _meta} = Builder.like(user, post.object)        {:ok, like, _meta} = ActivityPub.persist(like_data, local: true) -      %{like: like, user: user} +      %{like: like, user: user, poster: poster}      end      test "add the like to the original object", %{like: like, user: user} do @@ -30,5 +33,10 @@ defmodule Pleroma.Web.ActivityPub.SideEffectsTest do        assert object.data["like_count"] == 1        assert user.ap_id in object.data["likes"]      end + +    test "creates a notification", %{like: like, poster: poster} do +      {:ok, like, _} = SideEffects.handle(like) +      assert Repo.get_by(Notification, user_id: poster.id, activity_id: like.id) +    end    end  end diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index 2332029e5..6057e360a 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -746,7 +746,7 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do        user = User.get_cached_by_ap_id(activity.actor) -      assert User.fields(user) == [ +      assert user.fields == [                 %{"name" => "foo", "value" => "bar"},                 %{"name" => "foo1", "value" => "bar1"}               ] @@ -767,7 +767,7 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do        user = User.get_cached_by_ap_id(user.ap_id) -      assert User.fields(user) == [ +      assert user.fields == [                 %{"name" => "foo", "value" => "updated"},                 %{"name" => "foo1", "value" => "updated"}               ] @@ -785,7 +785,7 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do        user = User.get_cached_by_ap_id(user.ap_id) -      assert User.fields(user) == [ +      assert user.fields == [                 %{"name" => "foo", "value" => "updated"},                 %{"name" => "foo1", "value" => "updated"}               ] @@ -796,7 +796,7 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do        user = User.get_cached_by_ap_id(user.ap_id) -      assert User.fields(user) == [] +      assert user.fields == []      end      test "it works for incoming update activities which lock the account" do @@ -2162,4 +2162,18 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do                 Transmogrifier.set_replies(object.data)["replies"]      end    end + +  test "take_emoji_tags/1" do +    user = insert(:user, %{emoji: %{"firefox" => "https://example.org/firefox.png"}}) + +    assert Transmogrifier.take_emoji_tags(user) == [ +             %{ +               "icon" => %{"type" => "Image", "url" => "https://example.org/firefox.png"}, +               "id" => "https://example.org/firefox.png", +               "name" => ":firefox:", +               "type" => "Emoji", +               "updated" => "1970-01-01T00:00:00Z" +             } +           ] +  end  end diff --git a/test/web/activity_pub/views/user_view_test.exs b/test/web/activity_pub/views/user_view_test.exs index ecb2dc386..8d00893a5 100644 --- a/test/web/activity_pub/views/user_view_test.exs +++ b/test/web/activity_pub/views/user_view_test.exs @@ -29,7 +29,7 @@ defmodule Pleroma.Web.ActivityPub.UserViewTest do      {:ok, user} =        insert(:user) -      |> User.upgrade_changeset(%{fields: fields}) +      |> User.update_changeset(%{fields: fields})        |> User.update_and_set_cache()      assert %{ @@ -38,7 +38,7 @@ defmodule Pleroma.Web.ActivityPub.UserViewTest do    end    test "Renders with emoji tags" do -    user = insert(:user, emoji: [%{"bib" => "/test"}]) +    user = insert(:user, emoji: %{"bib" => "/test"})      assert %{               "tag" => [  | 
