186 lines
5.4 KiB
Elixir
186 lines
5.4 KiB
Elixir
|
# Pleroma: A lightweight social networking server
|
||
|
# Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
|
||
|
# SPDX-License-Identifier: AGPL-3.0-only
|
||
|
|
||
|
defmodule Pleroma.Web.AdminAPI.StatusControllerTest do
|
||
|
use Pleroma.Web.ConnCase
|
||
|
|
||
|
import Pleroma.Factory
|
||
|
|
||
|
alias Pleroma.Activity
|
||
|
alias Pleroma.Config
|
||
|
alias Pleroma.ModerationLog
|
||
|
alias Pleroma.Repo
|
||
|
alias Pleroma.User
|
||
|
alias Pleroma.Web.CommonAPI
|
||
|
|
||
|
setup do
|
||
|
admin = insert(:user, is_admin: true)
|
||
|
token = insert(:oauth_admin_token, user: admin)
|
||
|
|
||
|
conn =
|
||
|
build_conn()
|
||
|
|> assign(:user, admin)
|
||
|
|> assign(:token, token)
|
||
|
|
||
|
{:ok, %{admin: admin, token: token, conn: conn}}
|
||
|
end
|
||
|
|
||
|
describe "GET /api/pleroma/admin/statuses/:id" do
|
||
|
test "not found", %{conn: conn} do
|
||
|
assert conn
|
||
|
|> get("/api/pleroma/admin/statuses/not_found")
|
||
|
|> json_response(:not_found)
|
||
|
end
|
||
|
|
||
|
test "shows activity", %{conn: conn} do
|
||
|
activity = insert(:note_activity)
|
||
|
|
||
|
response =
|
||
|
conn
|
||
|
|> get("/api/pleroma/admin/statuses/#{activity.id}")
|
||
|
|> json_response(200)
|
||
|
|
||
|
assert response["id"] == activity.id
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe "PUT /api/pleroma/admin/statuses/:id" do
|
||
|
setup do
|
||
|
activity = insert(:note_activity)
|
||
|
|
||
|
%{id: activity.id}
|
||
|
end
|
||
|
|
||
|
test "toggle sensitive flag", %{conn: conn, id: id, admin: admin} do
|
||
|
response =
|
||
|
conn
|
||
|
|> put("/api/pleroma/admin/statuses/#{id}", %{"sensitive" => "true"})
|
||
|
|> json_response(:ok)
|
||
|
|
||
|
assert response["sensitive"]
|
||
|
|
||
|
log_entry = Repo.one(ModerationLog)
|
||
|
|
||
|
assert ModerationLog.get_log_entry_message(log_entry) ==
|
||
|
"@#{admin.nickname} updated status ##{id}, set sensitive: 'true'"
|
||
|
|
||
|
response =
|
||
|
conn
|
||
|
|> put("/api/pleroma/admin/statuses/#{id}", %{"sensitive" => "false"})
|
||
|
|> json_response(:ok)
|
||
|
|
||
|
refute response["sensitive"]
|
||
|
end
|
||
|
|
||
|
test "change visibility flag", %{conn: conn, id: id, admin: admin} do
|
||
|
response =
|
||
|
conn
|
||
|
|> put("/api/pleroma/admin/statuses/#{id}", %{visibility: "public"})
|
||
|
|> json_response(:ok)
|
||
|
|
||
|
assert response["visibility"] == "public"
|
||
|
|
||
|
log_entry = Repo.one(ModerationLog)
|
||
|
|
||
|
assert ModerationLog.get_log_entry_message(log_entry) ==
|
||
|
"@#{admin.nickname} updated status ##{id}, set visibility: 'public'"
|
||
|
|
||
|
response =
|
||
|
conn
|
||
|
|> put("/api/pleroma/admin/statuses/#{id}", %{visibility: "private"})
|
||
|
|> json_response(:ok)
|
||
|
|
||
|
assert response["visibility"] == "private"
|
||
|
|
||
|
response =
|
||
|
conn
|
||
|
|> put("/api/pleroma/admin/statuses/#{id}", %{visibility: "unlisted"})
|
||
|
|> json_response(:ok)
|
||
|
|
||
|
assert response["visibility"] == "unlisted"
|
||
|
end
|
||
|
|
||
|
test "returns 400 when visibility is unknown", %{conn: conn, id: id} do
|
||
|
conn = put(conn, "/api/pleroma/admin/statuses/#{id}", %{visibility: "test"})
|
||
|
|
||
|
assert json_response(conn, :bad_request) == "Unsupported visibility"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe "DELETE /api/pleroma/admin/statuses/:id" do
|
||
|
setup do
|
||
|
activity = insert(:note_activity)
|
||
|
|
||
|
%{id: activity.id}
|
||
|
end
|
||
|
|
||
|
test "deletes status", %{conn: conn, id: id, admin: admin} do
|
||
|
conn
|
||
|
|> delete("/api/pleroma/admin/statuses/#{id}")
|
||
|
|> json_response(:ok)
|
||
|
|
||
|
refute Activity.get_by_id(id)
|
||
|
|
||
|
log_entry = Repo.one(ModerationLog)
|
||
|
|
||
|
assert ModerationLog.get_log_entry_message(log_entry) ==
|
||
|
"@#{admin.nickname} deleted status ##{id}"
|
||
|
end
|
||
|
|
||
|
test "returns 404 when the status does not exist", %{conn: conn} do
|
||
|
conn = delete(conn, "/api/pleroma/admin/statuses/test")
|
||
|
|
||
|
assert json_response(conn, :not_found) == "Not found"
|
||
|
end
|
||
|
end
|
||
|
|
||
|
describe "GET /api/pleroma/admin/statuses" do
|
||
|
test "returns all public and unlisted statuses", %{conn: conn, admin: admin} do
|
||
|
blocked = insert(:user)
|
||
|
user = insert(:user)
|
||
|
User.block(admin, blocked)
|
||
|
|
||
|
{:ok, _} = CommonAPI.post(user, %{status: "@#{admin.nickname}", visibility: "direct"})
|
||
|
|
||
|
{:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "unlisted"})
|
||
|
{:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "private"})
|
||
|
{:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "public"})
|
||
|
{:ok, _} = CommonAPI.post(blocked, %{status: ".", visibility: "public"})
|
||
|
|
||
|
response =
|
||
|
conn
|
||
|
|> get("/api/pleroma/admin/statuses")
|
||
|
|> json_response(200)
|
||
|
|
||
|
refute "private" in Enum.map(response, & &1["visibility"])
|
||
|
assert length(response) == 3
|
||
|
end
|
||
|
|
||
|
test "returns only local statuses with local_only on", %{conn: conn} do
|
||
|
user = insert(:user)
|
||
|
remote_user = insert(:user, local: false, nickname: "archaeme@archae.me")
|
||
|
insert(:note_activity, user: user, local: true)
|
||
|
insert(:note_activity, user: remote_user, local: false)
|
||
|
|
||
|
response =
|
||
|
conn
|
||
|
|> get("/api/pleroma/admin/statuses?local_only=true")
|
||
|
|> json_response(200)
|
||
|
|
||
|
assert length(response) == 1
|
||
|
end
|
||
|
|
||
|
test "returns private and direct statuses with godmode on", %{conn: conn, admin: admin} do
|
||
|
user = insert(:user)
|
||
|
|
||
|
{:ok, _} = CommonAPI.post(user, %{status: "@#{admin.nickname}", visibility: "direct"})
|
||
|
|
||
|
{:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "private"})
|
||
|
{:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "public"})
|
||
|
conn = get(conn, "/api/pleroma/admin/statuses?godmode=true")
|
||
|
assert json_response(conn, 200) |> length() == 3
|
||
|
end
|
||
|
end
|
||
|
end
|