logo

pleroma

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

account_controller_test.exs (10706B)


  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.PleromaAPI.AccountControllerTest do
  5. use Pleroma.Web.ConnCase
  6. alias Pleroma.Config
  7. alias Pleroma.Tests.ObanHelpers
  8. alias Pleroma.User
  9. alias Pleroma.Web.CommonAPI
  10. import Pleroma.Factory
  11. import Swoosh.TestAssertions
  12. describe "POST /api/v1/pleroma/accounts/confirmation_resend" do
  13. setup do
  14. {:ok, user} =
  15. insert(:user)
  16. |> User.confirmation_changeset(set_confirmation: false)
  17. |> User.update_and_set_cache()
  18. refute user.is_confirmed
  19. [user: user]
  20. end
  21. setup do: clear_config([:instance, :account_activation_required], true)
  22. test "resend account confirmation email", %{conn: conn, user: user} do
  23. conn
  24. |> put_req_header("content-type", "application/json")
  25. |> post("/api/v1/pleroma/accounts/confirmation_resend?email=#{user.email}")
  26. |> json_response_and_validate_schema(:no_content)
  27. ObanHelpers.perform_all()
  28. email = Pleroma.Emails.UserEmail.account_confirmation_email(user)
  29. notify_email = Config.get([:instance, :notify_email])
  30. instance_name = Config.get([:instance, :name])
  31. assert_email_sent(
  32. from: {instance_name, notify_email},
  33. to: {user.name, user.email},
  34. html_body: email.html_body
  35. )
  36. end
  37. test "resend account confirmation email (with nickname)", %{conn: conn, user: user} do
  38. conn
  39. |> put_req_header("content-type", "application/json")
  40. |> post("/api/v1/pleroma/accounts/confirmation_resend?nickname=#{user.nickname}")
  41. |> json_response_and_validate_schema(:no_content)
  42. ObanHelpers.perform_all()
  43. email = Pleroma.Emails.UserEmail.account_confirmation_email(user)
  44. notify_email = Config.get([:instance, :notify_email])
  45. instance_name = Config.get([:instance, :name])
  46. assert_email_sent(
  47. from: {instance_name, notify_email},
  48. to: {user.name, user.email},
  49. html_body: email.html_body
  50. )
  51. end
  52. end
  53. describe "getting favorites timeline of specified user" do
  54. setup do
  55. [current_user, user] = insert_pair(:user, hide_favorites: false)
  56. %{user: current_user, conn: conn} = oauth_access(["read:favourites"], user: current_user)
  57. [current_user: current_user, user: user, conn: conn]
  58. end
  59. test "returns list of statuses favorited by specified user", %{
  60. conn: conn,
  61. user: user
  62. } do
  63. [activity | _] = insert_pair(:note_activity)
  64. CommonAPI.favorite(user, activity.id)
  65. response =
  66. conn
  67. |> get("/api/v1/pleroma/accounts/#{user.id}/favourites")
  68. |> json_response_and_validate_schema(:ok)
  69. [like] = response
  70. assert length(response) == 1
  71. assert like["id"] == activity.id
  72. end
  73. test "returns favorites for specified user_id when requester is not logged in", %{
  74. user: user
  75. } do
  76. activity = insert(:note_activity)
  77. CommonAPI.favorite(user, activity.id)
  78. response =
  79. build_conn()
  80. |> get("/api/v1/pleroma/accounts/#{user.id}/favourites")
  81. |> json_response_and_validate_schema(200)
  82. assert length(response) == 1
  83. end
  84. test "returns favorited DM only when user is logged in and he is one of recipients", %{
  85. current_user: current_user,
  86. user: user
  87. } do
  88. {:ok, direct} =
  89. CommonAPI.post(current_user, %{
  90. status: "Hi @#{user.nickname}!",
  91. visibility: "direct"
  92. })
  93. CommonAPI.favorite(user, direct.id)
  94. for u <- [user, current_user] do
  95. response =
  96. build_conn()
  97. |> assign(:user, u)
  98. |> assign(:token, insert(:oauth_token, user: u, scopes: ["read:favourites"]))
  99. |> get("/api/v1/pleroma/accounts/#{user.id}/favourites")
  100. |> json_response_and_validate_schema(:ok)
  101. assert length(response) == 1
  102. end
  103. response =
  104. build_conn()
  105. |> get("/api/v1/pleroma/accounts/#{user.id}/favourites")
  106. |> json_response_and_validate_schema(200)
  107. assert length(response) == 0
  108. end
  109. test "does not return others' favorited DM when user is not one of recipients", %{
  110. conn: conn,
  111. user: user
  112. } do
  113. user_two = insert(:user)
  114. {:ok, direct} =
  115. CommonAPI.post(user_two, %{
  116. status: "Hi @#{user.nickname}!",
  117. visibility: "direct"
  118. })
  119. CommonAPI.favorite(user, direct.id)
  120. response =
  121. conn
  122. |> get("/api/v1/pleroma/accounts/#{user.id}/favourites")
  123. |> json_response_and_validate_schema(:ok)
  124. assert Enum.empty?(response)
  125. end
  126. test "paginates favorites using since_id and max_id", %{
  127. conn: conn,
  128. user: user
  129. } do
  130. activities = insert_list(10, :note_activity)
  131. Enum.each(activities, fn activity ->
  132. CommonAPI.favorite(user, activity.id)
  133. end)
  134. third_activity = Enum.at(activities, 2)
  135. seventh_activity = Enum.at(activities, 6)
  136. response =
  137. conn
  138. |> get(
  139. "/api/v1/pleroma/accounts/#{user.id}/favourites?since_id=#{third_activity.id}&max_id=#{seventh_activity.id}"
  140. )
  141. |> json_response_and_validate_schema(:ok)
  142. assert length(response) == 3
  143. refute third_activity in response
  144. refute seventh_activity in response
  145. end
  146. test "limits favorites using limit parameter", %{
  147. conn: conn,
  148. user: user
  149. } do
  150. 7
  151. |> insert_list(:note_activity)
  152. |> Enum.each(fn activity ->
  153. CommonAPI.favorite(user, activity.id)
  154. end)
  155. response =
  156. conn
  157. |> get("/api/v1/pleroma/accounts/#{user.id}/favourites?limit=3")
  158. |> json_response_and_validate_schema(:ok)
  159. assert length(response) == 3
  160. end
  161. test "returns empty response when user does not have any favorited statuses", %{
  162. conn: conn,
  163. user: user
  164. } do
  165. response =
  166. conn
  167. |> get("/api/v1/pleroma/accounts/#{user.id}/favourites")
  168. |> json_response_and_validate_schema(:ok)
  169. assert Enum.empty?(response)
  170. end
  171. test "returns 404 error when specified user is not exist", %{conn: conn} do
  172. conn = get(conn, "/api/v1/pleroma/accounts/test/favourites")
  173. assert json_response_and_validate_schema(conn, 404) == %{"error" => "Record not found"}
  174. end
  175. test "returns 403 error when user has hidden own favorites", %{conn: conn} do
  176. user = insert(:user, hide_favorites: true)
  177. activity = insert(:note_activity)
  178. CommonAPI.favorite(user, activity.id)
  179. conn = get(conn, "/api/v1/pleroma/accounts/#{user.id}/favourites")
  180. assert json_response_and_validate_schema(conn, 403) == %{"error" => "Can't get favorites"}
  181. end
  182. test "hides favorites for new users by default", %{conn: conn} do
  183. user = insert(:user)
  184. activity = insert(:note_activity)
  185. CommonAPI.favorite(user, activity.id)
  186. assert user.hide_favorites
  187. conn = get(conn, "/api/v1/pleroma/accounts/#{user.id}/favourites")
  188. assert json_response_and_validate_schema(conn, 403) == %{"error" => "Can't get favorites"}
  189. end
  190. end
  191. describe "subscribing / unsubscribing" do
  192. test "subscribing / unsubscribing to a user" do
  193. %{user: user, conn: conn} = oauth_access(["follow"])
  194. subscription_target = insert(:user)
  195. ret_conn =
  196. conn
  197. |> assign(:user, user)
  198. |> post("/api/v1/pleroma/accounts/#{subscription_target.id}/subscribe")
  199. assert %{"id" => _id, "subscribing" => true} =
  200. json_response_and_validate_schema(ret_conn, 200)
  201. conn = post(conn, "/api/v1/pleroma/accounts/#{subscription_target.id}/unsubscribe")
  202. assert %{"id" => _id, "subscribing" => false} = json_response_and_validate_schema(conn, 200)
  203. end
  204. end
  205. describe "subscribing" do
  206. test "returns 404 when subscription_target not found" do
  207. %{conn: conn} = oauth_access(["write:follows"])
  208. conn = post(conn, "/api/v1/pleroma/accounts/target_id/subscribe")
  209. assert %{"error" => "Record not found"} = json_response_and_validate_schema(conn, 404)
  210. end
  211. end
  212. describe "unsubscribing" do
  213. test "returns 404 when subscription_target not found" do
  214. %{conn: conn} = oauth_access(["follow"])
  215. conn = post(conn, "/api/v1/pleroma/accounts/target_id/unsubscribe")
  216. assert %{"error" => "Record not found"} = json_response_and_validate_schema(conn, 404)
  217. end
  218. end
  219. describe "account endorsements" do
  220. test "returns a list of pinned accounts", %{conn: conn} do
  221. %{id: id1} = user1 = insert(:user)
  222. %{id: id2} = user2 = insert(:user)
  223. %{id: id3} = user3 = insert(:user)
  224. CommonAPI.follow(user1, user2)
  225. CommonAPI.follow(user1, user3)
  226. User.endorse(user1, user2)
  227. User.endorse(user1, user3)
  228. [%{"id" => ^id2}, %{"id" => ^id3}] =
  229. conn
  230. |> get("/api/v1/pleroma/accounts/#{id1}/endorsements")
  231. |> json_response_and_validate_schema(200)
  232. end
  233. test "returns 404 error when specified user is not exist", %{conn: conn} do
  234. conn = get(conn, "/api/v1/pleroma/accounts/test/endorsements")
  235. assert json_response_and_validate_schema(conn, 404) == %{"error" => "Record not found"}
  236. end
  237. end
  238. describe "birthday reminders" do
  239. test "returns a list of friends having birthday on specified day" do
  240. %{user: user, conn: conn} = oauth_access(["read:accounts"])
  241. %{id: id1} =
  242. user1 =
  243. insert(:user, %{
  244. birthday: "2001-02-12",
  245. show_birthday: true
  246. })
  247. user2 =
  248. insert(:user, %{
  249. birthday: "2001-02-14",
  250. show_birthday: true
  251. })
  252. user3 = insert(:user)
  253. CommonAPI.follow(user, user1)
  254. CommonAPI.follow(user, user2)
  255. CommonAPI.follow(user, user3)
  256. [%{"id" => ^id1}] =
  257. conn
  258. |> get("/api/v1/pleroma/birthdays?day=12&month=2")
  259. |> json_response_and_validate_schema(:ok)
  260. end
  261. test "the list doesn't list friends with hidden birth date" do
  262. %{user: user, conn: conn} = oauth_access(["read:accounts"])
  263. user1 =
  264. insert(:user, %{
  265. birthday: "2001-02-12",
  266. show_birthday: false
  267. })
  268. %{id: id2} =
  269. user2 =
  270. insert(:user, %{
  271. birthday: "2001-02-12",
  272. show_birthday: true
  273. })
  274. CommonAPI.follow(user, user1)
  275. CommonAPI.follow(user, user2)
  276. [%{"id" => ^id2}] =
  277. conn
  278. |> get("/api/v1/pleroma/birthdays?day=12&month=2")
  279. |> json_response_and_validate_schema(:ok)
  280. end
  281. end
  282. end