Fetch account from report, not from status (it might be deleted)
authorMaxim Filippov <colixer@gmail.com>
Wed, 27 Nov 2019 15:09:00 +0000 (00:09 +0900)
committerMaxim Filippov <colixer@gmail.com>
Wed, 27 Nov 2019 15:09:00 +0000 (00:09 +0900)
lib/pleroma/web/activity_pub/utils.ex
lib/pleroma/web/admin_api/admin_api_controller.ex
test/web/admin_api/admin_api_controller_test.exs

index d91abf7b3283b38cd791a1d26c48ed271328b87b..2ca805c091ab25c9340e05782750844b1ff6d711 100644 (file)
@@ -798,11 +798,18 @@ defmodule Pleroma.Web.ActivityPub.Utils do
     reports = get_reports_by_status_id(activity["id"])
     max_date = Enum.max_by(reports, &NaiveDateTime.from_iso8601!(&1.data["published"]))
     actors = Enum.map(reports, & &1.user_actor)
+    [%{data: %{"object" => [account_id | _]}} | _] = reports
+
+    account =
+      AccountView.render("show.json", %{
+        user: User.get_by_ap_id(account_id)
+      })
+
     status = get_status_data(activity)
 
     %{
       date: max_date.data["published"],
-      account: activity["actor"],
+      account: account,
       status: status,
       actors: Enum.uniq(actors),
       reports: reports
index 24fdc3c821920759735e7372d2bfe8a877f0c7d5..b003d1f358333896e42b46f49a14b5b9def70591 100644 (file)
@@ -647,11 +647,11 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIController do
   end
 
   def list_grouped_reports(conn, _params) do
-    reports = Utils.get_reported_activities()
+    statuses = Utils.get_reported_activities()
 
     conn
     |> put_view(ReportView)
-    |> render("index_grouped.json", Utils.get_reports_grouped_by_status(reports))
+    |> render("index_grouped.json", Utils.get_reports_grouped_by_status(statuses))
   end
 
   def report_show(conn, %{"id" => id}) do
index a69fadcdc85bdcef75e9d0545704c53b3a8fa55a..108baad91ca561921e857a69da7d140fc8420342 100644 (file)
@@ -1755,6 +1755,25 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
 
       assert length(Enum.filter(response["reports"], &(&1["status"]["deleted"] == false))) == 2
     end
+
+    test "account not empty if status was deleted", %{
+      conn: conn,
+      first_report: first_report,
+      first_status: first_status,
+      target_user: target_user
+    } do
+      {:ok, _} = CommonAPI.update_report_state(first_report.id, "resolved")
+      {:ok, _} = CommonAPI.delete(first_status.id, target_user)
+
+      refute Activity.get_by_ap_id(first_status.id)
+
+      response =
+        conn
+        |> get("/api/pleroma/admin/grouped_reports")
+        |> json_response(:ok)
+
+      assert Enum.find(response["reports"], &(&1["status"]["deleted"] == true))["account"]
+    end
   end
 
   describe "POST /api/pleroma/admin/reports/:id/respond" do