|
|
|
@ -21,7 +21,6 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
|
|
|
|
|
alias Pleroma.UserInviteToken
|
|
|
|
|
alias Pleroma.Web.ActivityPub.Relay
|
|
|
|
|
alias Pleroma.Web.CommonAPI
|
|
|
|
|
alias Pleroma.Web.MastodonAPI.StatusView
|
|
|
|
|
alias Pleroma.Web.MediaProxy
|
|
|
|
|
|
|
|
|
|
setup_all do
|
|
|
|
@ -1586,208 +1585,6 @@ defmodule Pleroma.Web.AdminAPI.AdminAPIControllerTest do
|
|
|
|
|
end
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
describe "GET /api/pleroma/admin/grouped_reports" do
|
|
|
|
|
setup do
|
|
|
|
|
[reporter, target_user] = insert_pair(:user)
|
|
|
|
|
|
|
|
|
|
date1 = (DateTime.to_unix(DateTime.utc_now()) + 1000) |> DateTime.from_unix!()
|
|
|
|
|
date2 = (DateTime.to_unix(DateTime.utc_now()) + 2000) |> DateTime.from_unix!()
|
|
|
|
|
date3 = (DateTime.to_unix(DateTime.utc_now()) + 3000) |> DateTime.from_unix!()
|
|
|
|
|
|
|
|
|
|
first_status =
|
|
|
|
|
insert(:note_activity, user: target_user, data_attrs: %{"published" => date1})
|
|
|
|
|
|
|
|
|
|
second_status =
|
|
|
|
|
insert(:note_activity, user: target_user, data_attrs: %{"published" => date2})
|
|
|
|
|
|
|
|
|
|
third_status =
|
|
|
|
|
insert(:note_activity, user: target_user, data_attrs: %{"published" => date3})
|
|
|
|
|
|
|
|
|
|
{:ok, first_report} =
|
|
|
|
|
CommonAPI.report(reporter, %{
|
|
|
|
|
"account_id" => target_user.id,
|
|
|
|
|
"status_ids" => [first_status.id, second_status.id, third_status.id]
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
{:ok, second_report} =
|
|
|
|
|
CommonAPI.report(reporter, %{
|
|
|
|
|
"account_id" => target_user.id,
|
|
|
|
|
"status_ids" => [first_status.id, second_status.id]
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
{:ok, third_report} =
|
|
|
|
|
CommonAPI.report(reporter, %{
|
|
|
|
|
"account_id" => target_user.id,
|
|
|
|
|
"status_ids" => [first_status.id]
|
|
|
|
|
})
|
|
|
|
|
|
|
|
|
|
%{
|
|
|
|
|
first_status: Activity.get_by_ap_id_with_object(first_status.data["id"]),
|
|
|
|
|
second_status: Activity.get_by_ap_id_with_object(second_status.data["id"]),
|
|
|
|
|
third_status: Activity.get_by_ap_id_with_object(third_status.data["id"]),
|
|
|
|
|
first_report: first_report,
|
|
|
|
|
first_status_reports: [first_report, second_report, third_report],
|
|
|
|
|
second_status_reports: [first_report, second_report],
|
|
|
|
|
third_status_reports: [first_report],
|
|
|
|
|
target_user: target_user,
|
|
|
|
|
reporter: reporter
|
|
|
|
|
}
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
test "returns reports grouped by status", %{
|
|
|
|
|
conn: conn,
|
|
|
|
|
first_status: first_status,
|
|
|
|
|
second_status: second_status,
|
|
|
|
|
third_status: third_status,
|
|
|
|
|
first_status_reports: first_status_reports,
|
|
|
|
|
second_status_reports: second_status_reports,
|
|
|
|
|
third_status_reports: third_status_reports,
|
|
|
|
|
target_user: target_user,
|
|
|
|
|
reporter: reporter
|
|
|
|
|
} do
|
|
|
|
|
response =
|
|
|
|
|
conn
|
|
|
|
|
|> get("/api/pleroma/admin/grouped_reports")
|
|
|
|
|
|> json_response(:ok)
|
|
|
|
|
|
|
|
|
|
assert length(response["reports"]) == 3
|
|
|
|
|
|
|
|
|
|
first_group = Enum.find(response["reports"], &(&1["status"]["id"] == first_status.id))
|
|
|
|
|
|
|
|
|
|
second_group = Enum.find(response["reports"], &(&1["status"]["id"] == second_status.id))
|
|
|
|
|
|
|
|
|
|
third_group = Enum.find(response["reports"], &(&1["status"]["id"] == third_status.id))
|
|
|
|
|
|
|
|
|
|
assert length(first_group["reports"]) == 3
|
|
|
|
|
assert length(second_group["reports"]) == 2
|
|
|
|
|
assert length(third_group["reports"]) == 1
|
|
|
|
|
|
|
|
|
|
assert first_group["date"] ==
|
|
|
|
|
Enum.max_by(first_status_reports, fn act ->
|
|
|
|
|
NaiveDateTime.from_iso8601!(act.data["published"])
|
|
|
|
|
end).data["published"]
|
|
|
|
|
|
|
|
|
|
assert first_group["status"] ==
|
|
|
|
|
Map.put(
|
|
|
|
|
stringify_keys(StatusView.render("show.json", %{activity: first_status})),
|
|
|
|
|
"deleted",
|
|
|
|
|
false
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
assert(first_group["account"]["id"] == target_user.id)
|
|
|
|
|
|
|
|
|
|
assert length(first_group["actors"]) == 1
|
|
|
|
|
assert hd(first_group["actors"])["id"] == reporter.id
|
|
|
|
|
|
|
|
|
|
assert Enum.map(first_group["reports"], & &1["id"]) --
|
|
|
|
|
Enum.map(first_status_reports, & &1.id) == []
|
|
|
|
|
|
|
|
|
|
assert second_group["date"] ==
|
|
|
|
|
Enum.max_by(second_status_reports, fn act ->
|
|
|
|
|
NaiveDateTime.from_iso8601!(act.data["published"])
|
|
|
|
|
end).data["published"]
|
|
|
|
|
|
|
|
|
|
assert second_group["status"] ==
|
|
|
|
|
Map.put(
|
|
|
|
|
stringify_keys(StatusView.render("show.json", %{activity: second_status})),
|
|
|
|
|
"deleted",
|
|
|
|
|
false
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
assert second_group["account"]["id"] == target_user.id
|
|
|
|
|
|
|
|
|
|
assert length(second_group["actors"]) == 1
|
|
|
|
|
assert hd(second_group["actors"])["id"] == reporter.id
|
|
|
|
|
|
|
|
|
|
assert Enum.map(second_group["reports"], & &1["id"]) --
|
|
|
|
|
Enum.map(second_status_reports, & &1.id) == []
|
|
|
|
|
|
|
|
|
|
assert third_group["date"] ==
|
|
|
|
|
Enum.max_by(third_status_reports, fn act ->
|
|
|
|
|
NaiveDateTime.from_iso8601!(act.data["published"])
|
|
|
|
|
end).data["published"]
|
|
|
|
|
|
|
|
|
|
assert third_group["status"] ==
|
|
|
|
|
Map.put(
|
|
|
|
|
stringify_keys(StatusView.render("show.json", %{activity: third_status})),
|
|
|
|
|
"deleted",
|
|
|
|
|
false
|
|
|
|
|
)
|
|
|
|
|
|
|
|
|
|
assert third_group["account"]["id"] == target_user.id
|
|
|
|
|
|
|
|
|
|
assert length(third_group["actors"]) == 1
|
|
|
|
|
assert hd(third_group["actors"])["id"] == reporter.id
|
|
|
|
|
|
|
|
|
|
assert Enum.map(third_group["reports"], & &1["id"]) --
|
|
|
|
|
Enum.map(third_status_reports, & &1.id) == []
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
test "reopened report renders status data", %{
|
|
|
|
|
conn: conn,
|
|
|
|
|
first_report: first_report,
|
|
|
|
|
first_status: first_status
|
|
|
|
|
} do
|
|
|
|
|
{:ok, _} = CommonAPI.update_report_state(first_report.id, "resolved")
|
|
|
|
|
|
|
|
|
|
response =
|
|
|
|
|
conn
|
|
|
|
|
|> get("/api/pleroma/admin/grouped_reports")
|
|
|
|
|
|> json_response(:ok)
|
|
|
|
|
|
|
|
|
|
first_group = Enum.find(response["reports"], &(&1["status"]["id"] == first_status.id))
|
|
|
|
|
|
|
|
|
|
assert first_group["status"] ==
|
|
|
|
|
Map.put(
|
|
|
|
|
stringify_keys(StatusView.render("show.json", %{activity: first_status})),
|
|
|
|
|
"deleted",
|
|
|
|
|
false
|
|
|
|
|
)
|
|
|
|
|
end
|
|
|
|
|
|
|
|
|
|
test "reopened report does not render status data if status has been 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))["status"][
|
|
|
|
|
"deleted"
|
|
|
|
|
] == true
|
|
|
|
|
|
|
|
|
|
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 "PUT /api/pleroma/admin/statuses/:id" do
|
|
|
|
|
setup do
|
|
|
|
|
activity = insert(:note_activity)
|
|
|
|
|