Merge branch 'bugfix/block-follow-relationships' into 'develop'
authorlambda <pleromagit@rogerbraun.net>
Tue, 19 Jun 2018 09:42:45 +0000 (09:42 +0000)
committerlambda <pleromagit@rogerbraun.net>
Tue, 19 Jun 2018 09:42:45 +0000 (09:42 +0000)
fix follow relationship leaks when blocked

See merge request pleroma/pleroma!230

1  2 
test/web/activity_pub/transmogrifier_test.exs

index 3b3a0c703a9105919599574a394745de8ec9db29,1e135d65f9f5dcefb72e532c457f9ab0467283cf..838ae169dc1f2ff26ac2195a8c4baaa77999fa51
@@@ -102,16 -102,6 +102,16 @@@ defmodule Pleroma.Web.ActivityPub.Trans
        assert Enum.at(data["object"]["tag"], 2) == "moo"
      end
  
 +    test "it works for incoming notices with contentMap" do
 +      data =
 +        File.read!("test/fixtures/mastodon-post-activity-contentmap.json") |> Poison.decode!()
 +
 +      {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data)
 +
 +      assert data["object"]["content"] ==
 +               "<p><span class=\"h-card\"><a href=\"http://localtesting.pleroma.lol/users/lain\" class=\"u-url mention\">@<span>lain</span></a></span></p>"
 +    end
 +
      test "it works for incoming follow requests" do
        user = insert(:user)
  
        assert User.blocks?(blocker, user)
      end
  
+     test "incoming blocks successfully tear down any follow relationship" do
+       blocker = insert(:user)
+       blocked = insert(:user)
+       data =
+         File.read!("test/fixtures/mastodon-block-activity.json")
+         |> Poison.decode!()
+         |> Map.put("object", blocked.ap_id)
+         |> Map.put("actor", blocker.ap_id)
+       {:ok, blocker} = User.follow(blocker, blocked)
+       {:ok, blocked} = User.follow(blocked, blocker)
+       assert User.following?(blocker, blocked)
+       assert User.following?(blocked, blocker)
+       {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data)
+       assert data["type"] == "Block"
+       assert data["object"] == blocked.ap_id
+       assert data["actor"] == blocker.ap_id
+       blocker = User.get_by_ap_id(data["actor"])
+       blocked = User.get_by_ap_id(data["object"])
+       assert User.blocks?(blocker, blocked)
+       refute User.following?(blocker, blocked)
+       refute User.following?(blocked, blocker)
+     end
      test "it works for incoming unblocks with an existing block" do
        user = insert(:user)