logo

pleroma

My custom branche(s) on git.pleroma.social/pleroma/pleroma git clone https://hacktivis.me/git/pleroma.git

status_controller_test.exs (7985B)


  1. # Pleroma: A lightweight social networking server
  2. # Copyright © 2017-2022 Pleroma Authors <https://pleroma.social/>
  3. # SPDX-License-Identifier: AGPL-3.0-only
  4. defmodule Pleroma.Web.AdminAPI.StatusControllerTest do
  5. use Pleroma.Web.ConnCase, async: false
  6. import Pleroma.Factory
  7. alias Pleroma.Activity
  8. alias Pleroma.ModerationLog
  9. alias Pleroma.Repo
  10. alias Pleroma.User
  11. alias Pleroma.Web.CommonAPI
  12. setup do
  13. admin = insert(:user, is_admin: true)
  14. token = insert(:oauth_admin_token, user: admin)
  15. conn =
  16. build_conn()
  17. |> assign(:user, admin)
  18. |> assign(:token, token)
  19. {:ok, %{admin: admin, token: token, conn: conn}}
  20. end
  21. describe "GET /api/pleroma/admin/statuses/:id" do
  22. setup do
  23. clear_config([:instance, :admin_privileges], [:messages_read])
  24. end
  25. test "not found", %{conn: conn} do
  26. assert conn
  27. |> get("/api/pleroma/admin/statuses/not_found")
  28. |> json_response_and_validate_schema(:not_found)
  29. end
  30. test "shows activity", %{conn: conn} do
  31. activity = insert(:note_activity)
  32. response =
  33. conn
  34. |> get("/api/pleroma/admin/statuses/#{activity.id}")
  35. |> json_response_and_validate_schema(200)
  36. assert response["id"] == activity.id
  37. account = response["account"]
  38. actor = User.get_by_ap_id(activity.actor)
  39. assert account["id"] == actor.id
  40. assert account["nickname"] == actor.nickname
  41. assert account["is_active"] == actor.is_active
  42. assert account["is_confirmed"] == actor.is_confirmed
  43. end
  44. test "denies reading activity when not privileged", %{conn: conn} do
  45. clear_config([:instance, :admin_privileges], [])
  46. assert conn |> get("/api/pleroma/admin/statuses/some_id") |> json_response(:forbidden)
  47. end
  48. end
  49. describe "PUT /api/pleroma/admin/statuses/:id" do
  50. setup do
  51. clear_config([:instance, :admin_privileges], [:messages_delete])
  52. activity = insert(:note_activity)
  53. %{id: activity.id}
  54. end
  55. test "toggle sensitive flag", %{conn: conn, id: id, admin: admin} do
  56. response =
  57. conn
  58. |> put_req_header("content-type", "application/json")
  59. |> put("/api/pleroma/admin/statuses/#{id}", %{"sensitive" => "true"})
  60. |> json_response_and_validate_schema(:ok)
  61. assert response["sensitive"]
  62. log_entry = Repo.one(ModerationLog)
  63. assert ModerationLog.get_log_entry_message(log_entry) ==
  64. "@#{admin.nickname} updated status ##{id}, set sensitive: 'true'"
  65. response =
  66. conn
  67. |> put_req_header("content-type", "application/json")
  68. |> put("/api/pleroma/admin/statuses/#{id}", %{"sensitive" => "false"})
  69. |> json_response_and_validate_schema(:ok)
  70. refute response["sensitive"]
  71. end
  72. test "change visibility flag", %{conn: conn, id: id, admin: admin} do
  73. response =
  74. conn
  75. |> put_req_header("content-type", "application/json")
  76. |> put("/api/pleroma/admin/statuses/#{id}", %{visibility: "public"})
  77. |> json_response_and_validate_schema(:ok)
  78. assert response["visibility"] == "public"
  79. log_entry = Repo.one(ModerationLog)
  80. assert ModerationLog.get_log_entry_message(log_entry) ==
  81. "@#{admin.nickname} updated status ##{id}, set visibility: 'public'"
  82. response =
  83. conn
  84. |> put_req_header("content-type", "application/json")
  85. |> put("/api/pleroma/admin/statuses/#{id}", %{visibility: "private"})
  86. |> json_response_and_validate_schema(:ok)
  87. assert response["visibility"] == "private"
  88. response =
  89. conn
  90. |> put_req_header("content-type", "application/json")
  91. |> put("/api/pleroma/admin/statuses/#{id}", %{visibility: "unlisted"})
  92. |> json_response_and_validate_schema(:ok)
  93. assert response["visibility"] == "unlisted"
  94. end
  95. test "returns 400 when visibility is unknown", %{conn: conn, id: id} do
  96. conn =
  97. conn
  98. |> put_req_header("content-type", "application/json")
  99. |> put("/api/pleroma/admin/statuses/#{id}", %{visibility: "test"})
  100. assert %{"error" => "test - Invalid value for enum."} =
  101. json_response_and_validate_schema(conn, :bad_request)
  102. end
  103. test "it requires privileged role :messages_delete", %{conn: conn} do
  104. clear_config([:instance, :admin_privileges], [])
  105. assert conn
  106. |> put_req_header("content-type", "application/json")
  107. |> put("/api/pleroma/admin/statuses/some_id", %{})
  108. |> json_response(:forbidden)
  109. end
  110. end
  111. describe "DELETE /api/pleroma/admin/statuses/:id" do
  112. setup do
  113. clear_config([:instance, :admin_privileges], [:messages_delete])
  114. activity = insert(:note_activity)
  115. %{id: activity.id}
  116. end
  117. test "deletes status", %{conn: conn, id: id, admin: admin} do
  118. conn
  119. |> delete("/api/pleroma/admin/statuses/#{id}")
  120. |> json_response_and_validate_schema(:ok)
  121. refute Activity.get_by_id(id)
  122. log_entry = Repo.one(ModerationLog)
  123. assert ModerationLog.get_log_entry_message(log_entry) ==
  124. "@#{admin.nickname} deleted status ##{id}"
  125. end
  126. test "returns 404 when the status does not exist", %{conn: conn} do
  127. conn = delete(conn, "/api/pleroma/admin/statuses/test")
  128. assert json_response_and_validate_schema(conn, :not_found) == %{"error" => "Not found"}
  129. end
  130. test "it requires privileged role :messages_delete", %{conn: conn} do
  131. clear_config([:instance, :admin_privileges], [])
  132. assert conn
  133. |> put_req_header("content-type", "application/json")
  134. |> delete("/api/pleroma/admin/statuses/some_id")
  135. |> json_response(:forbidden)
  136. end
  137. end
  138. describe "GET /api/pleroma/admin/statuses" do
  139. setup do
  140. clear_config([:instance, :admin_privileges], [:messages_read])
  141. end
  142. test "returns all public and unlisted statuses", %{conn: conn, admin: admin} do
  143. blocked = insert(:user)
  144. user = insert(:user)
  145. User.block(admin, blocked)
  146. {:ok, _} = CommonAPI.post(user, %{status: "@#{admin.nickname}", visibility: "direct"})
  147. {:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "unlisted"})
  148. {:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "private"})
  149. {:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "public"})
  150. {:ok, _} = CommonAPI.post(blocked, %{status: ".", visibility: "public"})
  151. response =
  152. conn
  153. |> get("/api/pleroma/admin/statuses")
  154. |> json_response_and_validate_schema(200)
  155. refute "private" in Enum.map(response, & &1["visibility"])
  156. assert length(response) == 3
  157. end
  158. test "returns only local statuses with local_only on", %{conn: conn} do
  159. user = insert(:user)
  160. remote_user = insert(:user, local: false, nickname: "archaeme@archae.me")
  161. insert(:note_activity, user: user, local: true)
  162. insert(:note_activity, user: remote_user, local: false)
  163. response =
  164. conn
  165. |> get("/api/pleroma/admin/statuses?local_only=true")
  166. |> json_response_and_validate_schema(200)
  167. assert length(response) == 1
  168. end
  169. test "returns private and direct statuses with godmode on", %{conn: conn, admin: admin} do
  170. user = insert(:user)
  171. {:ok, _} = CommonAPI.post(user, %{status: "@#{admin.nickname}", visibility: "direct"})
  172. {:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "private"})
  173. {:ok, _} = CommonAPI.post(user, %{status: ".", visibility: "public"})
  174. conn = get(conn, "/api/pleroma/admin/statuses?godmode=true")
  175. assert json_response_and_validate_schema(conn, 200) |> length() == 3
  176. end
  177. test "it requires privileged role :messages_read", %{conn: conn} do
  178. clear_config([:instance, :admin_privileges], [])
  179. conn = get(conn, "/api/pleroma/admin/statuses")
  180. assert json_response(conn, :forbidden)
  181. end
  182. end
  183. end