diff options
| author | lain <lain@soykaf.club> | 2020-05-05 13:25:34 +0200 | 
|---|---|---|
| committer | lain <lain@soykaf.club> | 2020-05-05 13:25:34 +0200 | 
| commit | 8b2457bdbf8791923701b0b015f6ddf2e7c89bf7 (patch) | |
| tree | 5f0299afd7c123a6a1ba2112296f1e126caab2d8 /test/web | |
| parent | c297667f16db40654bb16608c01dc4a2dc7c0e4b (diff) | |
| download | pleroma-8b2457bdbf8791923701b0b015f6ddf2e7c89bf7.tar.gz pleroma-8b2457bdbf8791923701b0b015f6ddf2e7c89bf7.zip  | |
Transmogrifier tests: Extract Undo handling
Diffstat (limited to 'test/web')
| -rw-r--r-- | test/web/activity_pub/transmogrifier/undo_handling_test.exs | 185 | ||||
| -rw-r--r-- | test/web/activity_pub/transmogrifier_test.exs | 161 | 
2 files changed, 185 insertions, 161 deletions
diff --git a/test/web/activity_pub/transmogrifier/undo_handling_test.exs b/test/web/activity_pub/transmogrifier/undo_handling_test.exs new file mode 100644 index 000000000..a9ebfdb18 --- /dev/null +++ b/test/web/activity_pub/transmogrifier/undo_handling_test.exs @@ -0,0 +1,185 @@ +# 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.UndoHandlingTest do +  use Pleroma.DataCase + +  alias Pleroma.Activity +  alias Pleroma.User +  alias Pleroma.Web.ActivityPub.Transmogrifier +  alias Pleroma.Web.CommonAPI + +  import Pleroma.Factory + +  test "it works for incoming emoji reaction undos" do +    user = insert(:user) + +    {:ok, activity} = CommonAPI.post(user, %{"status" => "hello"}) +    {:ok, reaction_activity, _object} = CommonAPI.react_with_emoji(activity.id, user, "👌") + +    data = +      File.read!("test/fixtures/mastodon-undo-like.json") +      |> Poison.decode!() +      |> Map.put("object", reaction_activity.data["id"]) +      |> Map.put("actor", user.ap_id) + +    {:ok, activity} = Transmogrifier.handle_incoming(data) + +    assert activity.actor == user.ap_id +    assert activity.data["id"] == data["id"] +    assert activity.data["type"] == "Undo" +  end + +  test "it returns an error for incoming unlikes wihout a like activity" do +    user = insert(:user) +    {:ok, activity} = CommonAPI.post(user, %{"status" => "leave a like pls"}) + +    data = +      File.read!("test/fixtures/mastodon-undo-like.json") +      |> Poison.decode!() +      |> Map.put("object", activity.data["object"]) + +    assert Transmogrifier.handle_incoming(data) == :error +  end + +  test "it works for incoming unlikes with an existing like activity" do +    user = insert(:user) +    {:ok, activity} = CommonAPI.post(user, %{"status" => "leave a like pls"}) + +    like_data = +      File.read!("test/fixtures/mastodon-like.json") +      |> Poison.decode!() +      |> Map.put("object", activity.data["object"]) + +    _liker = insert(:user, ap_id: like_data["actor"], local: false) + +    {:ok, %Activity{data: like_data, local: false}} = Transmogrifier.handle_incoming(like_data) + +    data = +      File.read!("test/fixtures/mastodon-undo-like.json") +      |> Poison.decode!() +      |> Map.put("object", like_data) +      |> Map.put("actor", like_data["actor"]) + +    {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + +    assert data["actor"] == "http://mastodon.example.org/users/admin" +    assert data["type"] == "Undo" +    assert data["id"] == "http://mastodon.example.org/users/admin#likes/2/undo" +    assert data["object"]["id"] == "http://mastodon.example.org/users/admin#likes/2" +  end + +  test "it works for incoming unlikes with an existing like activity and a compact object" do +    user = insert(:user) +    {:ok, activity} = CommonAPI.post(user, %{"status" => "leave a like pls"}) + +    like_data = +      File.read!("test/fixtures/mastodon-like.json") +      |> Poison.decode!() +      |> Map.put("object", activity.data["object"]) + +    _liker = insert(:user, ap_id: like_data["actor"], local: false) + +    {:ok, %Activity{data: like_data, local: false}} = Transmogrifier.handle_incoming(like_data) + +    data = +      File.read!("test/fixtures/mastodon-undo-like.json") +      |> Poison.decode!() +      |> Map.put("object", like_data["id"]) +      |> Map.put("actor", like_data["actor"]) + +    {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + +    assert data["actor"] == "http://mastodon.example.org/users/admin" +    assert data["type"] == "Undo" +    assert data["id"] == "http://mastodon.example.org/users/admin#likes/2/undo" +    assert data["object"]["id"] == "http://mastodon.example.org/users/admin#likes/2" +  end + +  test "it works for incoming unannounces with an existing notice" do +    user = insert(:user) +    {:ok, activity} = CommonAPI.post(user, %{"status" => "hey"}) + +    announce_data = +      File.read!("test/fixtures/mastodon-announce.json") +      |> Poison.decode!() +      |> Map.put("object", activity.data["object"]) + +    _announcer = insert(:user, ap_id: announce_data["actor"], local: false) + +    {:ok, %Activity{data: announce_data, local: false}} = +      Transmogrifier.handle_incoming(announce_data) + +    data = +      File.read!("test/fixtures/mastodon-undo-announce.json") +      |> Poison.decode!() +      |> Map.put("object", announce_data) +      |> Map.put("actor", announce_data["actor"]) + +    {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + +    assert data["type"] == "Undo" +    assert object_data = data["object"] +    assert object_data["type"] == "Announce" +    assert object_data["object"] == activity.data["object"] + +    assert object_data["id"] == +             "http://mastodon.example.org/users/admin/statuses/99542391527669785/activity" +  end + +  test "it works for incomming unfollows with an existing follow" do +    user = insert(:user) + +    follow_data = +      File.read!("test/fixtures/mastodon-follow-activity.json") +      |> Poison.decode!() +      |> Map.put("object", user.ap_id) + +    _follower = insert(:user, ap_id: follow_data["actor"], local: false) + +    {:ok, %Activity{data: _, local: false}} = Transmogrifier.handle_incoming(follow_data) + +    data = +      File.read!("test/fixtures/mastodon-unfollow-activity.json") +      |> Poison.decode!() +      |> Map.put("object", follow_data) + +    {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) + +    assert data["type"] == "Undo" +    assert data["object"]["type"] == "Follow" +    assert data["object"]["object"] == user.ap_id +    assert data["actor"] == "http://mastodon.example.org/users/admin" + +    refute User.following?(User.get_cached_by_ap_id(data["actor"]), user) +  end + +  test "it works for incoming unblocks with an existing block" do +    user = insert(:user) + +    block_data = +      File.read!("test/fixtures/mastodon-block-activity.json") +      |> Poison.decode!() +      |> Map.put("object", user.ap_id) + +    _blocker = insert(:user, ap_id: block_data["actor"], local: false) + +    {:ok, %Activity{data: _, local: false}} = Transmogrifier.handle_incoming(block_data) + +    data = +      File.read!("test/fixtures/mastodon-unblock-activity.json") +      |> Poison.decode!() +      |> Map.put("object", block_data) + +    {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) +    assert data["type"] == "Undo" +    assert data["object"]["type"] == "Block" +    assert data["object"]["object"] == user.ap_id +    assert data["actor"] == "http://mastodon.example.org/users/admin" + +    blocker = User.get_cached_by_ap_id(data["actor"]) + +    refute User.blocks?(blocker, user) +  end +end diff --git a/test/web/activity_pub/transmogrifier_test.exs b/test/web/activity_pub/transmogrifier_test.exs index 23efa4be6..a315ff42d 100644 --- a/test/web/activity_pub/transmogrifier_test.exs +++ b/test/web/activity_pub/transmogrifier_test.exs @@ -362,87 +362,6 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do        assert :error = Transmogrifier.handle_incoming(data)      end -    test "it works for incoming emoji reaction undos" do -      user = insert(:user) - -      {:ok, activity} = CommonAPI.post(user, %{"status" => "hello"}) -      {:ok, reaction_activity, _object} = CommonAPI.react_with_emoji(activity.id, user, "👌") - -      data = -        File.read!("test/fixtures/mastodon-undo-like.json") -        |> Poison.decode!() -        |> Map.put("object", reaction_activity.data["id"]) -        |> Map.put("actor", user.ap_id) - -      {:ok, activity} = Transmogrifier.handle_incoming(data) - -      assert activity.actor == user.ap_id -      assert activity.data["id"] == data["id"] -      assert activity.data["type"] == "Undo" -    end - -    test "it returns an error for incoming unlikes wihout a like activity" do -      user = insert(:user) -      {:ok, activity} = CommonAPI.post(user, %{"status" => "leave a like pls"}) - -      data = -        File.read!("test/fixtures/mastodon-undo-like.json") -        |> Poison.decode!() -        |> Map.put("object", activity.data["object"]) - -      assert Transmogrifier.handle_incoming(data) == :error -    end - -    test "it works for incoming unlikes with an existing like activity" do -      user = insert(:user) -      {:ok, activity} = CommonAPI.post(user, %{"status" => "leave a like pls"}) - -      like_data = -        File.read!("test/fixtures/mastodon-like.json") -        |> Poison.decode!() -        |> Map.put("object", activity.data["object"]) - -      {:ok, %Activity{data: like_data, local: false}} = Transmogrifier.handle_incoming(like_data) - -      data = -        File.read!("test/fixtures/mastodon-undo-like.json") -        |> Poison.decode!() -        |> Map.put("object", like_data) -        |> Map.put("actor", like_data["actor"]) - -      {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) - -      assert data["actor"] == "http://mastodon.example.org/users/admin" -      assert data["type"] == "Undo" -      assert data["id"] == "http://mastodon.example.org/users/admin#likes/2/undo" -      assert data["object"]["id"] == "http://mastodon.example.org/users/admin#likes/2" -    end - -    test "it works for incoming unlikes with an existing like activity and a compact object" do -      user = insert(:user) -      {:ok, activity} = CommonAPI.post(user, %{"status" => "leave a like pls"}) - -      like_data = -        File.read!("test/fixtures/mastodon-like.json") -        |> Poison.decode!() -        |> Map.put("object", activity.data["object"]) - -      {:ok, %Activity{data: like_data, local: false}} = Transmogrifier.handle_incoming(like_data) - -      data = -        File.read!("test/fixtures/mastodon-undo-like.json") -        |> Poison.decode!() -        |> Map.put("object", like_data["id"]) -        |> Map.put("actor", like_data["actor"]) - -      {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) - -      assert data["actor"] == "http://mastodon.example.org/users/admin" -      assert data["type"] == "Undo" -      assert data["id"] == "http://mastodon.example.org/users/admin#likes/2/undo" -      assert data["object"]["id"] == "http://mastodon.example.org/users/admin#likes/2" -    end -      test "it works for incoming announces" do        data = File.read!("test/fixtures/mastodon-announce.json") |> Poison.decode!() @@ -844,60 +763,6 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do        assert User.get_cached_by_ap_id(ap_id)      end -    test "it works for incoming unannounces with an existing notice" do -      user = insert(:user) -      {:ok, activity} = CommonAPI.post(user, %{"status" => "hey"}) - -      announce_data = -        File.read!("test/fixtures/mastodon-announce.json") -        |> Poison.decode!() -        |> Map.put("object", activity.data["object"]) - -      {:ok, %Activity{data: announce_data, local: false}} = -        Transmogrifier.handle_incoming(announce_data) - -      data = -        File.read!("test/fixtures/mastodon-undo-announce.json") -        |> Poison.decode!() -        |> Map.put("object", announce_data) -        |> Map.put("actor", announce_data["actor"]) - -      {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) - -      assert data["type"] == "Undo" -      assert object_data = data["object"] -      assert object_data["type"] == "Announce" -      assert object_data["object"] == activity.data["object"] - -      assert object_data["id"] == -               "http://mastodon.example.org/users/admin/statuses/99542391527669785/activity" -    end - -    test "it works for incomming unfollows with an existing follow" do -      user = insert(:user) - -      follow_data = -        File.read!("test/fixtures/mastodon-follow-activity.json") -        |> Poison.decode!() -        |> Map.put("object", user.ap_id) - -      {:ok, %Activity{data: _, local: false}} = Transmogrifier.handle_incoming(follow_data) - -      data = -        File.read!("test/fixtures/mastodon-unfollow-activity.json") -        |> Poison.decode!() -        |> Map.put("object", follow_data) - -      {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) - -      assert data["type"] == "Undo" -      assert data["object"]["type"] == "Follow" -      assert data["object"]["object"] == user.ap_id -      assert data["actor"] == "http://mastodon.example.org/users/admin" - -      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) @@ -967,32 +832,6 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do        refute User.following?(blocked, blocker)      end -    test "it works for incoming unblocks with an existing block" do -      user = insert(:user) - -      block_data = -        File.read!("test/fixtures/mastodon-block-activity.json") -        |> Poison.decode!() -        |> Map.put("object", user.ap_id) - -      {:ok, %Activity{data: _, local: false}} = Transmogrifier.handle_incoming(block_data) - -      data = -        File.read!("test/fixtures/mastodon-unblock-activity.json") -        |> Poison.decode!() -        |> Map.put("object", block_data) - -      {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data) -      assert data["type"] == "Undo" -      assert data["object"]["type"] == "Block" -      assert data["object"]["object"] == user.ap_id -      assert data["actor"] == "http://mastodon.example.org/users/admin" - -      blocker = User.get_cached_by_ap_id(data["actor"]) - -      refute User.blocks?(blocker, user) -    end -      test "it works for incoming accepts which were pre-accepted" do        follower = insert(:user)        followed = insert(:user)  | 
