diff options
Diffstat (limited to 'test/web/activity_pub/transmogrifier')
| -rw-r--r-- | test/web/activity_pub/transmogrifier/accept_handling_test.exs | 113 | 
1 files changed, 113 insertions, 0 deletions
diff --git a/test/web/activity_pub/transmogrifier/accept_handling_test.exs b/test/web/activity_pub/transmogrifier/accept_handling_test.exs new file mode 100644 index 000000000..3c4e134ff --- /dev/null +++ b/test/web/activity_pub/transmogrifier/accept_handling_test.exs @@ -0,0 +1,113 @@ +# 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.AcceptHandlingTest do +  use Pleroma.DataCase + +  alias Pleroma.User +  alias Pleroma.Web.ActivityPub.Transmogrifier +  alias Pleroma.Web.CommonAPI + +  import Pleroma.Factory + +  test "it works for incoming accepts which were pre-accepted" do +    follower = insert(:user) +    followed = insert(:user) + +    {:ok, follower} = User.follow(follower, followed) +    assert User.following?(follower, followed) == true + +    {:ok, _, _, follow_activity} = CommonAPI.follow(follower, followed) + +    accept_data = +      File.read!("test/fixtures/mastodon-accept-activity.json") +      |> Poison.decode!() +      |> Map.put("actor", followed.ap_id) + +    object = +      accept_data["object"] +      |> Map.put("actor", follower.ap_id) +      |> Map.put("id", follow_activity.data["id"]) + +    accept_data = Map.put(accept_data, "object", object) + +    {:ok, activity} = Transmogrifier.handle_incoming(accept_data) +    refute activity.local + +    assert activity.data["object"] == follow_activity.data["id"] + +    assert activity.data["id"] == accept_data["id"] + +    follower = User.get_cached_by_id(follower.id) + +    assert User.following?(follower, followed) == true +  end + +  test "it works for incoming accepts which were orphaned" do +    follower = insert(:user) +    followed = insert(:user, locked: true) + +    {:ok, _, _, follow_activity} = CommonAPI.follow(follower, followed) + +    accept_data = +      File.read!("test/fixtures/mastodon-accept-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)) + +    {:ok, activity} = Transmogrifier.handle_incoming(accept_data) +    assert activity.data["object"] == follow_activity.data["id"] + +    follower = User.get_cached_by_id(follower.id) + +    assert User.following?(follower, followed) == true +  end + +  test "it works for incoming accepts which are referenced by IRI only" do +    follower = insert(:user) +    followed = insert(:user, locked: true) + +    {:ok, _, _, follow_activity} = CommonAPI.follow(follower, followed) + +    accept_data = +      File.read!("test/fixtures/mastodon-accept-activity.json") +      |> Poison.decode!() +      |> Map.put("actor", followed.ap_id) +      |> Map.put("object", follow_activity.data["id"]) + +    {:ok, activity} = Transmogrifier.handle_incoming(accept_data) +    assert activity.data["object"] == follow_activity.data["id"] + +    follower = User.get_cached_by_id(follower.id) + +    assert User.following?(follower, followed) == true + +    follower = User.get_by_id(follower.id) +    assert follower.following_count == 1 + +    followed = User.get_by_id(followed.id) +    assert followed.follower_count == 1 +  end + +  test "it fails for incoming accepts which cannot be correlated" do +    follower = insert(:user) +    followed = insert(:user, locked: true) + +    accept_data = +      File.read!("test/fixtures/mastodon-accept-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 +end  | 
