logo

pleroma

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

user_view_test.exs (6512B)


  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.ActivityPub.UserViewTest do
  5. use Pleroma.DataCase, async: true
  6. import Pleroma.Factory
  7. alias Pleroma.User
  8. alias Pleroma.Web.ActivityPub.UserView
  9. alias Pleroma.Web.CommonAPI
  10. test "Renders a user, including the public key" do
  11. user = insert(:user)
  12. result = UserView.render("user.json", %{user: user})
  13. assert result["id"] == user.ap_id
  14. assert result["preferredUsername"] == user.nickname
  15. assert String.contains?(result["publicKey"]["publicKeyPem"], "BEGIN PUBLIC KEY")
  16. end
  17. test "Renders profile fields" do
  18. fields = [
  19. %{"name" => "foo", "value" => "bar"}
  20. ]
  21. {:ok, user} =
  22. insert(:user)
  23. |> User.update_changeset(%{fields: fields})
  24. |> User.update_and_set_cache()
  25. assert %{
  26. "attachment" => [%{"name" => "foo", "type" => "PropertyValue", "value" => "bar"}]
  27. } = UserView.render("user.json", %{user: user})
  28. end
  29. test "Renders with emoji tags" do
  30. user = insert(:user, emoji: %{"bib" => "/test"})
  31. assert %{
  32. "tag" => [
  33. %{
  34. "icon" => %{"type" => "Image", "url" => "/test"},
  35. "id" => "/test",
  36. "name" => ":bib:",
  37. "type" => "Emoji",
  38. "updated" => "1970-01-01T00:00:00Z"
  39. }
  40. ]
  41. } = UserView.render("user.json", %{user: user})
  42. end
  43. test "Does not add an avatar image if the user hasn't set one" do
  44. user = insert(:user)
  45. result = UserView.render("user.json", %{user: user})
  46. refute result["icon"]
  47. refute result["image"]
  48. user =
  49. insert(:user,
  50. avatar: %{"url" => [%{"href" => "https://someurl"}]},
  51. banner: %{"url" => [%{"href" => "https://somebanner"}]}
  52. )
  53. result = UserView.render("user.json", %{user: user})
  54. assert result["icon"]["url"] == "https://someurl"
  55. assert result["image"]["url"] == "https://somebanner"
  56. end
  57. test "renders an invisible user with the invisible property set to true" do
  58. user = insert(:user, invisible: true)
  59. assert %{"invisible" => true} = UserView.render("service.json", %{user: user})
  60. end
  61. test "service has a few essential fields" do
  62. user = insert(:user)
  63. result = UserView.render("service.json", %{user: user})
  64. assert result["id"]
  65. assert result["type"] == "Application"
  66. assert result["inbox"]
  67. assert result["outbox"]
  68. end
  69. test "renders AKAs" do
  70. akas = ["https://i.tusooa.xyz/users/test-pleroma"]
  71. user = insert(:user, also_known_as: akas)
  72. assert %{"alsoKnownAs" => ^akas} = UserView.render("user.json", %{user: user})
  73. end
  74. describe "endpoints" do
  75. test "local users have a usable endpoints structure" do
  76. user = insert(:user)
  77. result = UserView.render("user.json", %{user: user})
  78. assert result["id"] == user.ap_id
  79. %{
  80. "sharedInbox" => _,
  81. "oauthAuthorizationEndpoint" => _,
  82. "oauthRegistrationEndpoint" => _,
  83. "oauthTokenEndpoint" => _
  84. } = result["endpoints"]
  85. end
  86. test "remote users have an empty endpoints structure" do
  87. user = insert(:user, local: false)
  88. result = UserView.render("user.json", %{user: user})
  89. assert result["id"] == user.ap_id
  90. assert result["endpoints"] == %{}
  91. end
  92. test "instance users do not expose oAuth endpoints" do
  93. user = insert(:user, nickname: nil, local: true)
  94. result = UserView.render("user.json", %{user: user})
  95. refute result["endpoints"]["oauthAuthorizationEndpoint"]
  96. refute result["endpoints"]["oauthRegistrationEndpoint"]
  97. refute result["endpoints"]["oauthTokenEndpoint"]
  98. end
  99. end
  100. describe "followers" do
  101. test "sets totalItems to zero when followers are hidden" do
  102. user = insert(:user)
  103. other_user = insert(:user)
  104. {:ok, _other_user, user, _activity} = CommonAPI.follow(other_user, user)
  105. assert %{"totalItems" => 1} = UserView.render("followers.json", %{user: user})
  106. user = Map.merge(user, %{hide_followers_count: true, hide_followers: true})
  107. refute UserView.render("followers.json", %{user: user}) |> Map.has_key?("totalItems")
  108. end
  109. test "sets correct totalItems when followers are hidden but the follower counter is not" do
  110. user = insert(:user)
  111. other_user = insert(:user)
  112. {:ok, _other_user, user, _activity} = CommonAPI.follow(other_user, user)
  113. assert %{"totalItems" => 1} = UserView.render("followers.json", %{user: user})
  114. user = Map.merge(user, %{hide_followers_count: false, hide_followers: true})
  115. assert %{"totalItems" => 1} = UserView.render("followers.json", %{user: user})
  116. end
  117. end
  118. describe "following" do
  119. test "sets totalItems to zero when follows are hidden" do
  120. user = insert(:user)
  121. other_user = insert(:user)
  122. {:ok, user, _other_user, _activity} = CommonAPI.follow(user, other_user)
  123. assert %{"totalItems" => 1} = UserView.render("following.json", %{user: user})
  124. user = Map.merge(user, %{hide_follows_count: true, hide_follows: true})
  125. assert %{"totalItems" => 0} = UserView.render("following.json", %{user: user})
  126. end
  127. test "sets correct totalItems when follows are hidden but the follow counter is not" do
  128. user = insert(:user)
  129. other_user = insert(:user)
  130. {:ok, user, _other_user, _activity} = CommonAPI.follow(user, other_user)
  131. assert %{"totalItems" => 1} = UserView.render("following.json", %{user: user})
  132. user = Map.merge(user, %{hide_follows_count: false, hide_follows: true})
  133. assert %{"totalItems" => 1} = UserView.render("following.json", %{user: user})
  134. end
  135. end
  136. describe "acceptsChatMessages" do
  137. test "it returns this value if it is set" do
  138. true_user = insert(:user, accepts_chat_messages: true)
  139. false_user = insert(:user, accepts_chat_messages: false)
  140. nil_user = insert(:user, accepts_chat_messages: nil)
  141. assert %{"capabilities" => %{"acceptsChatMessages" => true}} =
  142. UserView.render("user.json", user: true_user)
  143. assert %{"capabilities" => %{"acceptsChatMessages" => false}} =
  144. UserView.render("user.json", user: false_user)
  145. refute Map.has_key?(
  146. UserView.render("user.json", user: nil_user)["capabilities"],
  147. "acceptsChatMessages"
  148. )
  149. end
  150. end
  151. end