MastoAPI: Add blocking.
authorRoger Braun <roger@rogerbraun.net>
Fri, 3 Nov 2017 07:38:05 +0000 (08:38 +0100)
committerRoger Braun <roger@rogerbraun.net>
Fri, 3 Nov 2017 07:38:05 +0000 (08:38 +0100)
lib/pleroma/web/mastodon_api/mastodon_api_controller.ex
lib/pleroma/web/router.ex
test/web/mastodon_api/mastodon_api_controller_test.exs

index 881bd38df570c9057bf5ec28e2bc7d9ea9174386..5e299c976de5c61f2cdf75e98aa2fe36ea2cf839 100644 (file)
@@ -311,6 +311,30 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
     end
   end
 
+  def block(%{assigns: %{user: blocker}} = conn, %{"id" => id}) do
+    with %User{} = blocked <- Repo.get(User, id),
+         {:ok, blocker} <- User.block(blocker, blocked) do
+      render conn, AccountView, "relationship.json", %{user: blocker, target: blocked}
+    else
+      {:error, message} = err ->
+        conn
+        |> put_resp_content_type("application/json")
+        |> send_resp(403, Poison.encode!(%{"error" => message}))
+    end
+  end
+
+  def unblock(%{assigns: %{user: blocker}} = conn, %{"id" => id}) do
+    with %User{} = blocked <- Repo.get(User, id),
+         {:ok, blocker} <- User.unblock(blocker, blocked) do
+      render conn, AccountView, "relationship.json", %{user: blocker, target: blocked}
+    else
+      {:error, message} = err ->
+        conn
+        |> put_resp_content_type("application/json")
+        |> send_resp(403, Poison.encode!(%{"error" => message}))
+    end
+  end
+
   def search(%{assigns: %{user: user}} = conn, %{"q" => query} = params) do
     accounts = User.search(query, params["resolve"] == "true")
 
index 1fb5eadf68eb1fcbd4acd8a6468c21344be892f7..c4bbaa265fbdb1c0fdee62ee439606abd2456ebb 100644 (file)
@@ -58,8 +58,8 @@ defmodule Pleroma.Web.Router do
     get "/accounts/search", MastodonAPIController, :account_search
     post "/accounts/:id/follow", MastodonAPIController, :follow
     post "/accounts/:id/unfollow", MastodonAPIController, :unfollow
-    post "/accounts/:id/block", MastodonAPIController, :relationship_noop
-    post "/accounts/:id/unblock", MastodonAPIController, :relationship_noop
+    post "/accounts/:id/block", MastodonAPIController, :block
+    post "/accounts/:id/unblock", MastodonAPIController, :unblock
     post "/accounts/:id/mute", MastodonAPIController, :relationship_noop
     post "/accounts/:id/unmute", MastodonAPIController, :relationship_noop
 
index cf09bc4b8d94a11f938c2e77d851f51955405ebf..c91f96f38305385610e5a0b3812c0f7ac8f4b909 100644 (file)
@@ -291,11 +291,29 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
     assert id == other_user.id
   end
 
-  test "unimplemented block/mute endpoints" do
+  test "blocking / unblocking a user", %{conn: conn} do
     user = insert(:user)
     other_user = insert(:user)
 
-    ["block", "unblock", "mute", "unmute"]
+    conn = conn
+    |> assign(:user, user)
+    |> post("/api/v1/accounts/#{other_user.id}/block")
+
+    assert %{"id" => id, "blocking" => true} = json_response(conn, 200)
+
+    user = Repo.get(User, user.id)
+    conn = build_conn()
+    |> assign(:user, user)
+    |> post("/api/v1/accounts/#{other_user.id}/unblock")
+
+    assert %{"id" => id, "blocking" => false} = json_response(conn, 200)
+  end
+
+  test "unimplemented mute endpoints" do
+    user = insert(:user)
+    other_user = insert(:user)
+
+    ["mute", "unmute"]
     |> Enum.each(fn(endpoint) ->
       conn = build_conn()
       |> assign(:user, user)