|
|
@@ -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) |
|
|
|