diff options
Diffstat (limited to 'test/web/activity_pub')
3 files changed, 86 insertions, 72 deletions
| diff --git a/test/web/activity_pub/transmogrifier/follow_handling_test.exs b/test/web/activity_pub/transmogrifier/follow_handling_test.exs index 17e764ca1..757d90941 100644 --- a/test/web/activity_pub/transmogrifier/follow_handling_test.exs +++ b/test/web/activity_pub/transmogrifier/follow_handling_test.exs @@ -185,5 +185,24 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier.FollowHandlingTest do        assert data["id"] == "https://hubzilla.example.org/channel/kaniini#follows/2"        assert User.following?(User.get_cached_by_ap_id(data["actor"]), user)      end + +    test "it works for incoming follows to locked account" do +      pending_follower = insert(:user, ap_id: "http://mastodon.example.org/users/admin") +      user = insert(:user, locked: true) + +      data = +        File.read!("test/fixtures/mastodon-follow-activity.json") +        |> Poison.decode!() +        |> Map.put("object", user.ap_id) + +      {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + +      assert data["type"] == "Follow" +      assert data["object"] == user.ap_id +      assert data["state"] == "pending" +      assert data["actor"] == "http://mastodon.example.org/users/admin" + +      assert [^pending_follower] = User.get_follow_requests(user) +    end    end  end diff --git a/test/web/activity_pub/transmogrifier/reject_handling_test.exs b/test/web/activity_pub/transmogrifier/reject_handling_test.exs new file mode 100644 index 000000000..5e5248641 --- /dev/null +++ b/test/web/activity_pub/transmogrifier/reject_handling_test.exs @@ -0,0 +1,67 @@ +# Pleroma: A lightweight social networking server +# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/> +# SPDX-License-Identifier: AGPL-3.0-only + +defmodule Pleroma.Web.ActivityPub.Transmogrifier.RejectHandlingTest do +  use Pleroma.DataCase + +  alias Pleroma.Activity +  alias Pleroma.User +  alias Pleroma.Web.ActivityPub.Transmogrifier +  alias Pleroma.Web.CommonAPI + +  import Pleroma.Factory + +  test "it fails for incoming rejects which cannot be correlated" do +    follower = insert(:user) +    followed = insert(:user, locked: true) + +    accept_data = +      File.read!("test/fixtures/mastodon-reject-activity.json") +      |> Poison.decode!() +      |> Map.put("actor", followed.ap_id) + +    accept_data = +      Map.put(accept_data, "object", Map.put(accept_data["object"], "actor", follower.ap_id)) + +    :error = Transmogrifier.handle_incoming(accept_data) + +    follower = User.get_cached_by_id(follower.id) + +    refute User.following?(follower, followed) == true +  end + +  test "it works for incoming rejects which are referenced by IRI only" do +    follower = insert(:user) +    followed = insert(:user, locked: true) + +    {:ok, follower} = User.follow(follower, followed) +    {:ok, _, _, follow_activity} = CommonAPI.follow(follower, followed) + +    assert User.following?(follower, followed) == true + +    reject_data = +      File.read!("test/fixtures/mastodon-reject-activity.json") +      |> Poison.decode!() +      |> Map.put("actor", followed.ap_id) +      |> Map.put("object", follow_activity.data["id"]) + +    {:ok, %Activity{data: _}} = Transmogrifier.handle_incoming(reject_data) + +    follower = User.get_cached_by_id(follower.id) + +    assert User.following?(follower, followed) == false +  end + +  test "it rejects activities without a valid ID" do +    user = insert(:user) + +    data = +      File.read!("test/fixtures/mastodon-follow-activity.json") +      |> Poison.decode!() +      |> Map.put("object", user.ap_id) +      |> Map.put("id", "") + +    :error = Transmogrifier.handle_incoming(data) +  end +end diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index 13da864d1..0dd4e6e47 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -384,78 +384,6 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do        refute User.following?(User.get_cached_by_ap_id(data["actor"]), user)      end -    test "it works for incoming follows to locked account" do -      pending_follower = insert(:user, ap_id: "http://mastodon.example.org/users/admin") -      user = insert(:user, locked: true) - -      data = -        File.read!("test/fixtures/mastodon-follow-activity.json") -        |> Poison.decode!() -        |> Map.put("object", user.ap_id) - -      {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) - -      assert data["type"] == "Follow" -      assert data["object"] == user.ap_id -      assert data["state"] == "pending" -      assert data["actor"] == "http://mastodon.example.org/users/admin" - -      assert [^pending_follower] = User.get_follow_requests(user) -    end - -    test "it fails for incoming rejects which cannot be correlated" do -      follower = insert(:user) -      followed = insert(:user, locked: true) - -      accept_data = -        File.read!("test/fixtures/mastodon-reject-activity.json") -        |> Poison.decode!() -        |> Map.put("actor", followed.ap_id) - -      accept_data = -        Map.put(accept_data, "object", Map.put(accept_data["object"], "actor", follower.ap_id)) - -      :error = Transmogrifier.handle_incoming(accept_data) - -      follower = User.get_cached_by_id(follower.id) - -      refute User.following?(follower, followed) == true -    end - -    test "it works for incoming rejects which are referenced by IRI only" do -      follower = insert(:user) -      followed = insert(:user, locked: true) - -      {:ok, follower} = User.follow(follower, followed) -      {:ok, _, _, follow_activity} = CommonAPI.follow(follower, followed) - -      assert User.following?(follower, followed) == true - -      reject_data = -        File.read!("test/fixtures/mastodon-reject-activity.json") -        |> Poison.decode!() -        |> Map.put("actor", followed.ap_id) -        |> Map.put("object", follow_activity.data["id"]) - -      {:ok, %Activity{data: _}} = Transmogrifier.handle_incoming(reject_data) - -      follower = User.get_cached_by_id(follower.id) - -      assert User.following?(follower, followed) == false -    end - -    test "it rejects activities without a valid ID" do -      user = insert(:user) - -      data = -        File.read!("test/fixtures/mastodon-follow-activity.json") -        |> Poison.decode!() -        |> Map.put("object", user.ap_id) -        |> Map.put("id", "") - -      :error = Transmogrifier.handle_incoming(data) -    end -      test "skip converting the content when it is nil" do        object_id = "https://peertube.social/videos/watch/278d2b7c-0f38-4aaa-afe6-9ecc0c4a34fe" | 
