Formatting and add tests for blocks/unblocks
authorFrancis Dinh <normandy@firemail.cc>
Sun, 20 May 2018 01:23:52 +0000 (21:23 -0400)
committerFrancis Dinh <normandy@firemail.cc>
Sun, 20 May 2018 01:23:52 +0000 (21:23 -0400)
lib/pleroma/user.ex
lib/pleroma/web/activity_pub/transmogrifier.ex
lib/pleroma/web/activity_pub/utils.ex
test/fixtures/mastodon-block-activity.json [new file with mode: 0644]
test/fixtures/mastodon-unblock-activity.json [new file with mode: 0644]
test/web/activity_pub/transmogrifier_test.exs

index 399a66787dff4bf01128bd6a9492c5242aafb656..6a8129ac84b2572432d80e2cd77d76b27cbdcd6b 100644 (file)
@@ -404,18 +404,22 @@ defmodule Pleroma.User do
       from(
         u in User,
         select_merge: %{
-          search_distance: fragment(
-            "? <-> (? || ?)",
-            ^query,
-            u.nickname,
-            u.name
-          )}
+          search_distance:
+            fragment(
+              "? <-> (? || ?)",
+              ^query,
+              u.nickname,
+              u.name
+            )
+        }
       )
 
-    q = from(s in subquery(inner),
-      order_by: s.search_distance,
-      limit: 20
-    )
+    q =
+      from(
+        s in subquery(inner),
+        order_by: s.search_distance,
+        limit: 20
+      )
 
     Repo.all(q)
   end
index 0d539c02c54be71eb0d3cfa98294affe3d868818..fe0294c5c5b4080078a077edda91e703f4d0a1c6 100644 (file)
@@ -266,7 +266,9 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
     handle_incoming(data)
   end
 
-  def handle_incoming(%{"type" => "Block", "object" => blocked, "actor" => blocker, "id" => id} = data) do
+  def handle_incoming(
+        %{"type" => "Block", "object" => blocked, "actor" => blocker, "id" => id} = data
+      ) do
     with %User{local: true} = blocked = User.get_cached_by_ap_id(blocked),
          %User{} = blocker = User.get_or_fetch_by_ap_id(blocker),
          {:ok, activity} <- ActivityPub.block(blocker, blocked, false) do
@@ -277,6 +279,7 @@ defmodule Pleroma.Web.ActivityPub.Transmogrifier do
       e -> :error
     end
   end
+
   # TODO
   # Accept
   # Undo for non-Announce
index c29fc6b078c5bda9ff3190db715303c2ecf368cb..846dd97c22d9f2889048ace60589b673f338e3e2 100644 (file)
@@ -357,6 +357,7 @@ defmodule Pleroma.Web.ActivityPub.Utils do
       "object" => block_activity.data
     }
   end
+
   #### Create-related helpers
 
   def make_create_data(params, additional) do
diff --git a/test/fixtures/mastodon-block-activity.json b/test/fixtures/mastodon-block-activity.json
new file mode 100644 (file)
index 0000000..186719d
--- /dev/null
@@ -0,0 +1,29 @@
+{
+  "type": "Block",
+  "signature": {
+    "type": "RsaSignature2017",
+    "signatureValue": "Kn1/UkAQGJVaXBfWLAHcnwHg8YMAUqlEaBuYLazAG+pz5hqivsyrBmPV186Xzr+B4ZLExA9+SnOoNx/GOz4hBm0kAmukNSILAsUd84tcJ2yT9zc1RKtembK4WiwOw7li0+maeDN0HaB6t+6eTqsCWmtiZpprhXD8V1GGT8yG7X24fQ9oFGn+ng7lasbcCC0988Y1eGqNe7KryxcPuQz57YkDapvtONzk8gyLTkZMV4De93MyRHq6GVjQVIgtiYabQAxrX6Q8C+4P/jQoqdWJHEe+MY5JKyNaT/hMPt2Md1ok9fZQBGHlErk22/zy8bSN19GdG09HmIysBUHRYpBLig==",
+    "creator": "http://mastodon.example.org/users/admin#main-key",
+    "created": "2018-02-17T13:29:31Z"
+  },
+  "object": "http://localtesting.pleroma.lol/users/lain",
+  "nickname": "lain",
+  "id": "http://mastodon.example.org/users/admin#follows/2",
+  "actor": "http://mastodon.example.org/users/admin",
+  "@context": [
+    "https://www.w3.org/ns/activitystreams",
+    "https://w3id.org/security/v1",
+    {
+      "toot": "http://joinmastodon.org/ns#",
+      "sensitive": "as:sensitive",
+      "ostatus": "http://ostatus.org#",
+      "movedTo": "as:movedTo",
+      "manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
+      "inReplyToAtomUri": "ostatus:inReplyToAtomUri",
+      "conversation": "ostatus:conversation",
+      "atomUri": "ostatus:atomUri",
+      "Hashtag": "as:Hashtag",
+      "Emoji": "toot:Emoji"
+    }
+  ]
+}
diff --git a/test/fixtures/mastodon-unblock-activity.json b/test/fixtures/mastodon-unblock-activity.json
new file mode 100644 (file)
index 0000000..53b2f42
--- /dev/null
@@ -0,0 +1,33 @@
+{
+    "@context": [
+            "https://www.w3.org/ns/activitystreams",
+            "https://w3id.org/security/v1",
+            {
+              "toot": "http://joinmastodon.org/ns#",
+              "sensitive": "as:sensitive",
+              "ostatus": "http://ostatus.org#",
+              "movedTo": "as:movedTo",
+              "manuallyApprovesFollowers": "as:manuallyApprovesFollowers",
+              "inReplyToAtomUri": "ostatus:inReplyToAtomUri",
+              "conversation": "ostatus:conversation",
+              "atomUri": "ostatus:atomUri",
+              "Hashtag": "as:Hashtag",
+              "Emoji": "toot:Emoji"
+            }
+          ],
+    "signature": {
+        "type": "RsaSignature2017",
+        "signatureValue": "Kn1/UkAQGJVaXBfWLAHcnwHg8YMAUqlEaBuYLazAG+pz5hqivsyrBmPV186Xzr+B4ZLExA9+SnOoNx/GOz4hBm0kAmukNSILAsUd84tcJ2yT9zc1RKtembK4WiwOw7li0+maeDN0HaB6t+6eTqsCWmtiZpprhXD8V1GGT8yG7X24fQ9oFGn+ng7lasbcCC0988Y1eGqNe7KryxcPuQz57YkDapvtONzk8gyLTkZMV4De93MyRHq6GVjQVIgtiYabQAxrX6Q8C+4P/jQoqdWJHEe+MY5JKyNaT/hMPt2Md1ok9fZQBGHlErk22/zy8bSN19GdG09HmIysBUHRYpBLig==",
+        "creator": "http://mastodon.example.org/users/admin#main-key",
+        "created": "2018-02-17T13:29:31Z"
+      },
+    "type": "Undo",
+    "object": {
+      "type": "Block", 
+      "object": "http://localtesting.pleroma.lol/users/lain",
+      "nickname": "lain",
+      "id": "http://mastodon.example.org/users/admin#follows/2",
+      "actor": "http://mastodon.example.org/users/admin" 
+    },
+    "actor": "http://mastodon.example.org/users/admin"
+}
index 8ed7147f4eded461ddb2fdbe7ff72956f332c1da..0ca00a07e9651c04449192016054a7d56cd3084b 100644 (file)
@@ -280,10 +280,56 @@ defmodule Pleroma.Web.ActivityPub.TransmogrifierTest do
 
       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_by_ap_id(data["actor"]), user)
     end
+
+    test "it works for incoming blocks" do
+      user = insert(:user)
+
+      data =
+        File.read!("test/fixtures/mastodon-block-activity.json")
+        |> Poison.decode!()
+        |> Map.put("object", user.ap_id)
+
+      {:ok, %Activity{data: data, local: false}} = Transmogrifier.handle_incoming(data)
+
+      assert data["type"] == "Block"
+      assert data["object"] == user.ap_id
+      assert data["actor"] == "https://mastodon.example.org/users/admin"
+
+      blocker = User.get_by_ap_id(data["actor"])
+
+      assert User.blocks?(blocker, user.ap_id)
+    end
+
+    test "it works for incoming unblocks" 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"] == "https://mastodon.example.org/users/admin"
+
+      blocker = User.get_by_ap_id(data["actor"])
+
+      refute User.blocks?(blocker, user.ap_id)
+    end
   end
 
   describe "prepare outgoing" do