Extract report actions from `MastodonAPIController` to `ReportController`
authorEgor Kislitsyn <egor@kislitsyn.com>
Mon, 30 Sep 2019 10:04:03 +0000 (17:04 +0700)
committerEgor Kislitsyn <egor@kislitsyn.com>
Mon, 30 Sep 2019 10:44:10 +0000 (17:44 +0700)
Update MastodonAPI.ReportView

lib/pleroma/web/mastodon_api/controllers/mastodon_api_controller.ex
lib/pleroma/web/mastodon_api/controllers/report_controller.ex [new file with mode: 0644]
lib/pleroma/web/mastodon_api/views/report_view.ex
lib/pleroma/web/router.ex
test/web/mastodon_api/controllers/report_controller_test.exs [new file with mode: 0644]
test/web/mastodon_api/mastodon_api_controller_test.exs

index 0878f7ba64a27d387cb9554b768b09390ad2c465..1ec699b6f78bd85411a26de011158343af99d908 100644 (file)
@@ -31,7 +31,6 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
   alias Pleroma.Web.MastodonAPI.ListView
   alias Pleroma.Web.MastodonAPI.MastodonAPI
   alias Pleroma.Web.MastodonAPI.MastodonView
-  alias Pleroma.Web.MastodonAPI.ReportView
   alias Pleroma.Web.MastodonAPI.StatusView
   alias Pleroma.Web.MediaProxy
   alias Pleroma.Web.OAuth.App
@@ -946,20 +945,6 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIController do
     end
   end
 
-  def reports(%{assigns: %{user: user}} = conn, params) do
-    case CommonAPI.report(user, params) do
-      {:ok, activity} ->
-        conn
-        |> put_view(ReportView)
-        |> try_render("report.json", %{activity: activity})
-
-      {:error, err} ->
-        conn
-        |> put_status(:bad_request)
-        |> json(%{error: err})
-    end
-  end
-
   def account_register(
         %{assigns: %{app: app}} = conn,
         %{"username" => nickname, "email" => _, "password" => _, "agreement" => true} = params
diff --git a/lib/pleroma/web/mastodon_api/controllers/report_controller.ex b/lib/pleroma/web/mastodon_api/controllers/report_controller.ex
new file mode 100644 (file)
index 0000000..1c084b7
--- /dev/null
@@ -0,0 +1,16 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.MastodonAPI.ReportController do
+  use Pleroma.Web, :controller
+
+  action_fallback(Pleroma.Web.MastodonAPI.FallbackController)
+
+  @doc "POST /api/v1/reports"
+  def create(%{assigns: %{user: user}} = conn, params) do
+    with {:ok, activity} <- Pleroma.Web.CommonAPI.report(user, params) do
+      render(conn, "show.json", activity: activity)
+    end
+  end
+end
index a16e7ff109d31ee934d2607ff3107d6095531178..9da2dd740053dae3165312bbc1f1c5075cf5705c 100644 (file)
@@ -5,7 +5,7 @@
 defmodule Pleroma.Web.MastodonAPI.ReportView do
   use Pleroma.Web, :view
 
-  def render("report.json", %{activity: activity}) do
+  def render("show.json", %{activity: activity}) do
     %{
       id: to_string(activity.id),
       action_taken: false
index 805bef16f176089eefc57d7e1b47b199bb43f2f7..7bdc80fccc46b3ba340043e115d29db6f3dce8c1 100644 (file)
@@ -396,7 +396,7 @@ defmodule Pleroma.Web.Router do
       get("/pleroma/mascot", MastodonAPIController, :get_mascot)
       put("/pleroma/mascot", MastodonAPIController, :set_mascot)
 
-      post("/reports", MastodonAPIController, :reports)
+      post("/reports", ReportController, :create)
     end
 
     scope [] do
diff --git a/test/web/mastodon_api/controllers/report_controller_test.exs b/test/web/mastodon_api/controllers/report_controller_test.exs
new file mode 100644 (file)
index 0000000..fcece40
--- /dev/null
@@ -0,0 +1,88 @@
+# Pleroma: A lightweight social networking server
+# Copyright © 2017-2019 Pleroma Authors <https://pleroma.social/>
+# SPDX-License-Identifier: AGPL-3.0-only
+
+defmodule Pleroma.Web.MastodonAPI.ConversationControllerTest do
+  use Pleroma.Web.ConnCase
+
+  alias Pleroma.Web.CommonAPI
+
+  import Pleroma.Factory
+
+  setup do
+    reporter = insert(:user)
+    target_user = insert(:user)
+
+    {:ok, activity} = CommonAPI.post(target_user, %{"status" => "foobar"})
+
+    [reporter: reporter, target_user: target_user, activity: activity]
+  end
+
+  test "submit a basic report", %{conn: conn, reporter: reporter, target_user: target_user} do
+    assert %{"action_taken" => false, "id" => _} =
+             conn
+             |> assign(:user, reporter)
+             |> post("/api/v1/reports", %{"account_id" => target_user.id})
+             |> json_response(200)
+  end
+
+  test "submit a report with statuses and comment", %{
+    conn: conn,
+    reporter: reporter,
+    target_user: target_user,
+    activity: activity
+  } do
+    assert %{"action_taken" => false, "id" => _} =
+             conn
+             |> assign(:user, reporter)
+             |> post("/api/v1/reports", %{
+               "account_id" => target_user.id,
+               "status_ids" => [activity.id],
+               "comment" => "bad status!",
+               "forward" => "false"
+             })
+             |> json_response(200)
+  end
+
+  test "account_id is required", %{
+    conn: conn,
+    reporter: reporter,
+    activity: activity
+  } do
+    assert %{"error" => "Valid `account_id` required"} =
+             conn
+             |> assign(:user, reporter)
+             |> post("/api/v1/reports", %{"status_ids" => [activity.id]})
+             |> json_response(400)
+  end
+
+  test "comment must be up to the size specified in the config", %{
+    conn: conn,
+    reporter: reporter,
+    target_user: target_user
+  } do
+    max_size = Pleroma.Config.get([:instance, :max_report_comment_size], 1000)
+    comment = String.pad_trailing("a", max_size + 1, "a")
+
+    error = %{"error" => "Comment must be up to #{max_size} characters"}
+
+    assert ^error =
+             conn
+             |> assign(:user, reporter)
+             |> post("/api/v1/reports", %{"account_id" => target_user.id, "comment" => comment})
+             |> json_response(400)
+  end
+
+  test "returns error when account is not exist", %{
+    conn: conn,
+    reporter: reporter,
+    activity: activity
+  } do
+    conn =
+      conn
+      |> assign(:user, reporter)
+      |> post("/api/v1/reports", %{"status_ids" => [activity.id], "account_id" => "foo"})
+
+    assert json_response(conn, 400) == %{"error" => "Account not found"}
+  end
+end
index b3acb7a228b66415d7c22ea6fe5fab61cab8a2d0..d316a61c15ab9bfd8bc33e7d257e750197ae79ea 100644 (file)
@@ -1380,85 +1380,6 @@ defmodule Pleroma.Web.MastodonAPI.MastodonAPIControllerTest do
     end
   end
 
-  describe "reports" do
-    setup do
-      reporter = insert(:user)
-      target_user = insert(:user)
-
-      {:ok, activity} = CommonAPI.post(target_user, %{"status" => "foobar"})
-
-      [reporter: reporter, target_user: target_user, activity: activity]
-    end
-
-    test "submit a basic report", %{conn: conn, reporter: reporter, target_user: target_user} do
-      assert %{"action_taken" => false, "id" => _} =
-               conn
-               |> assign(:user, reporter)
-               |> post("/api/v1/reports", %{"account_id" => target_user.id})
-               |> json_response(200)
-    end
-
-    test "submit a report with statuses and comment", %{
-      conn: conn,
-      reporter: reporter,
-      target_user: target_user,
-      activity: activity
-    } do
-      assert %{"action_taken" => false, "id" => _} =
-               conn
-               |> assign(:user, reporter)
-               |> post("/api/v1/reports", %{
-                 "account_id" => target_user.id,
-                 "status_ids" => [activity.id],
-                 "comment" => "bad status!",
-                 "forward" => "false"
-               })
-               |> json_response(200)
-    end
-
-    test "account_id is required", %{
-      conn: conn,
-      reporter: reporter,
-      activity: activity
-    } do
-      assert %{"error" => "Valid `account_id` required"} =
-               conn
-               |> assign(:user, reporter)
-               |> post("/api/v1/reports", %{"status_ids" => [activity.id]})
-               |> json_response(400)
-    end
-
-    test "comment must be up to the size specified in the config", %{
-      conn: conn,
-      reporter: reporter,
-      target_user: target_user
-    } do
-      max_size = Config.get([:instance, :max_report_comment_size], 1000)
-      comment = String.pad_trailing("a", max_size + 1, "a")
-
-      error = %{"error" => "Comment must be up to #{max_size} characters"}
-
-      assert ^error =
-               conn
-               |> assign(:user, reporter)
-               |> post("/api/v1/reports", %{"account_id" => target_user.id, "comment" => comment})
-               |> json_response(400)
-    end
-
-    test "returns error when account is not exist", %{
-      conn: conn,
-      reporter: reporter,
-      activity: activity
-    } do
-      conn =
-        conn
-        |> assign(:user, reporter)
-        |> post("/api/v1/reports", %{"status_ids" => [activity.id], "account_id" => "foo"})
-
-      assert json_response(conn, 400) == %{"error" => "Account not found"}
-    end
-  end
-
   describe "link headers" do
     test "preserves parameters in link headers", %{conn: conn} do
       user = insert(:user)