1 # Pleroma: A lightweight social networking server
2 # Copyright © 2017-2020 Pleroma Authors <https://pleroma.social/>
3 # SPDX-License-Identifier: AGPL-3.0-only
5 defmodule Pleroma.Web.AdminAPI.StatusControllerTest do
6 use Pleroma.Web.ConnCase
10 alias Pleroma.Activity
12 alias Pleroma.ModerationLog
15 alias Pleroma.Web.CommonAPI
18 admin = insert(:user, is_admin: true)
19 token = insert(:oauth_admin_token, user: admin)
23 |> assign(:user, admin)
24 |> assign(:token, token)
26 {:ok, %{admin: admin, token: token, conn: conn}}
29 describe "GET /api/pleroma/admin/statuses/:id" do
30 test "not found", %{conn: conn} do
32 |> get("/api/pleroma/admin/statuses/not_found")
33 |> json_response_and_validate_schema(:not_found)
36 test "shows activity", %{conn: conn} do
37 activity = insert(:note_activity)
41 |> get("/api/pleroma/admin/statuses/#{activity.id}")
42 |> json_response_and_validate_schema(200)
44 assert response["id"] == activity.id
48 describe "PUT /api/pleroma/admin/statuses/:id" do
50 activity = insert(:note_activity)
55 test "toggle sensitive flag", %{conn: conn, id: id, admin: admin} do
58 |> put_req_header("content-type", "application/json")
59 |> put("/api/pleroma/admin/statuses/#{id}", %{"sensitive" => "true"})
60 |> json_response_and_validate_schema(:ok)
62 assert response["sensitive"]
64 log_entry = Repo.one(ModerationLog)
66 assert ModerationLog.get_log_entry_message(log_entry) ==
67 "@#{admin.nickname} updated status ##{id}, set sensitive: 'true'"
71 |> put_req_header("content-type", "application/json")
72 |> put("/api/pleroma/admin/statuses/#{id}", %{"sensitive" => "false"})
73 |> json_response_and_validate_schema(:ok)
75 refute response["sensitive"]
78 test "change visibility flag", %{conn: conn, id: id, admin: admin} do
81 |> put_req_header("content-type", "application/json")
82 |> put("/api/pleroma/admin/statuses/#{id}", %{visibility: "public"})
83 |> json_response_and_validate_schema(:ok)
85 assert response["visibility"] == "public"
87 log_entry = Repo.one(ModerationLog)
89 assert ModerationLog.get_log_entry_message(log_entry) ==
90 "@#{admin.nickname} updated status ##{id}, set visibility: 'public'"
94 |> put_req_header("content-type", "application/json")
95 |> put("/api/pleroma/admin/statuses/#{id}", %{visibility: "private"})
96 |> json_response_and_validate_schema(:ok)
98 assert response["visibility"] == "private"
102 |> put_req_header("content-type", "application/json")
103 |> put("/api/pleroma/admin/statuses/#{id}", %{visibility: "unlisted"})
104 |> json_response_and_validate_schema(:ok)
106 assert response["visibility"] == "unlisted"
109 test "returns 400 when visibility is unknown", %{conn: conn, id: id} do
112 |> put_req_header("content-type", "application/json")
113 |> put("/api/pleroma/admin/statuses/#{id}", %{visibility: "test"})
115 assert %{"error" => "test - Invalid value for enum."} =
116 json_response_and_validate_schema(conn, :bad_request)
120 describe "DELETE /api/pleroma/admin/statuses/:id" do
122 activity = insert(:note_activity)
127 test "deletes status", %{conn: conn, id: id, admin: admin} do
129 |> delete("/api/pleroma/admin/statuses/#{id}")
130 |> json_response_and_validate_schema(:ok)
132 refute Activity.get_by_id(id)
134 log_entry = Repo.one(ModerationLog)
136 assert ModerationLog.get_log_entry_message(log_entry) ==
137 "@#{admin.nickname} deleted status ##{id}"
140 test "returns 404 when the status does not exist", %{conn: conn} do
141 conn = delete(conn, "/api/pleroma/admin/statuses/test")
143 assert json_response_and_validate_schema(conn, :not_found) == %{"error" => "Not found"}
147 describe "GET /api/pleroma/admin/statuses" do
148 test "returns all public and unlisted statuses", %{conn: conn, admin: admin} do
149 blocked = insert(:user)
151 User.block(admin, blocked)
153 {:ok, _} = CommonAPI.post(user, %{status: "@#{admin.nickname}", visibility: "direct"})
155 {:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "unlisted"})
156 {:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "private"})
157 {:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "public"})
158 {:ok, _} = CommonAPI.post(blocked, %{status: ".", visibility: "public"})
162 |> get("/api/pleroma/admin/statuses")
163 |> json_response_and_validate_schema(200)
165 refute "private" in Enum.map(response, & &1["visibility"])
166 assert length(response) == 3
169 test "returns only local statuses with local_only on", %{conn: conn} do
171 remote_user = insert(:user, local: false, nickname: "archaeme@archae.me")
172 insert(:note_activity, user: user, local: true)
173 insert(:note_activity, user: remote_user, local: false)
177 |> get("/api/pleroma/admin/statuses?local_only=true")
178 |> json_response_and_validate_schema(200)
180 assert length(response) == 1
183 test "returns private and direct statuses with godmode on", %{conn: conn, admin: admin} do
186 {:ok, _} = CommonAPI.post(user, %{status: "@#{admin.nickname}", visibility: "direct"})
188 {:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "private"})
189 {:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "public"})
190 conn = get(conn, "/api/pleroma/admin/statuses?godmode=true")
191 assert json_response_and_validate_schema(conn, 200) |> length() == 3