logo

pleroma

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

search_test.exs (5725B)


  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.SearchTest do
  5. use Pleroma.Web.ConnCase, async: true
  6. alias Pleroma.Web.AdminAPI.Search
  7. import Pleroma.Factory
  8. describe "search for admin" do
  9. test "it ignores case" do
  10. insert(:user, nickname: "papercoach")
  11. insert(:user, nickname: "CanadaPaperCoach")
  12. {:ok, _results, count} =
  13. Search.user(%{
  14. query: "paper",
  15. local: false,
  16. page: 1,
  17. page_size: 50
  18. })
  19. assert count == 2
  20. end
  21. test "it returns local/external users" do
  22. insert(:user, local: true)
  23. insert(:user, local: false)
  24. insert(:user, local: false)
  25. {:ok, _results, local_count} =
  26. Search.user(%{
  27. query: "",
  28. local: true
  29. })
  30. {:ok, _results, external_count} =
  31. Search.user(%{
  32. query: "",
  33. external: true
  34. })
  35. assert local_count == 1
  36. assert external_count == 2
  37. end
  38. test "it returns active/deactivated users" do
  39. insert(:user, is_active: false)
  40. insert(:user, is_active: false)
  41. insert(:user, is_active: true)
  42. {:ok, _results, active_count} =
  43. Search.user(%{
  44. query: "",
  45. active: true
  46. })
  47. {:ok, _results, deactivated_count} =
  48. Search.user(%{
  49. query: "",
  50. deactivated: true
  51. })
  52. assert active_count == 1
  53. assert deactivated_count == 2
  54. end
  55. test "it returns specific user" do
  56. insert(:user)
  57. insert(:user)
  58. user = insert(:user, nickname: "bob", local: true, is_active: true)
  59. {:ok, _results, total_count} = Search.user(%{query: ""})
  60. {:ok, [^user], count} =
  61. Search.user(%{
  62. query: "Bo",
  63. active: true,
  64. local: true
  65. })
  66. assert total_count == 3
  67. assert count == 1
  68. end
  69. test "it returns user by domain" do
  70. insert(:user)
  71. insert(:user)
  72. user = insert(:user, nickname: "some@domain.com")
  73. {:ok, _results, total} = Search.user()
  74. {:ok, [^user], count} = Search.user(%{query: "domain.com"})
  75. assert total == 3
  76. assert count == 1
  77. end
  78. test "it return user by full nickname" do
  79. insert(:user)
  80. insert(:user)
  81. user = insert(:user, nickname: "some@domain.com")
  82. {:ok, _results, total} = Search.user()
  83. {:ok, [^user], count} = Search.user(%{query: "some@domain.com"})
  84. assert total == 3
  85. assert count == 1
  86. end
  87. test "it returns admin user" do
  88. admin = insert(:user, is_admin: true)
  89. insert(:user)
  90. insert(:user)
  91. {:ok, _results, total} = Search.user()
  92. {:ok, [^admin], count} = Search.user(%{is_admin: true})
  93. assert total == 3
  94. assert count == 1
  95. end
  96. test "it returns moderator user" do
  97. moderator = insert(:user, is_moderator: true)
  98. insert(:user)
  99. insert(:user)
  100. {:ok, _results, total} = Search.user()
  101. {:ok, [^moderator], count} = Search.user(%{is_moderator: true})
  102. assert total == 3
  103. assert count == 1
  104. end
  105. test "it returns users with tags" do
  106. user1 = insert(:user, tags: ["first"])
  107. user2 = insert(:user, tags: ["second"])
  108. insert(:user)
  109. insert(:user)
  110. {:ok, _results, total} = Search.user()
  111. {:ok, users, count} = Search.user(%{tags: ["first", "second"]})
  112. assert total == 4
  113. assert count == 2
  114. assert user1 in users
  115. assert user2 in users
  116. end
  117. test "it returns users by actor_types" do
  118. user_service = insert(:user, actor_type: "Service")
  119. user_application = insert(:user, actor_type: "Application")
  120. user1 = insert(:user)
  121. user2 = insert(:user)
  122. {:ok, [^user_service], 1} = Search.user(%{actor_types: ["Service"]})
  123. {:ok, [^user_application], 1} = Search.user(%{actor_types: ["Application"]})
  124. {:ok, [^user2, ^user1], 2} = Search.user(%{actor_types: ["Person"]})
  125. {:ok, [^user2, ^user1, ^user_service], 3} =
  126. Search.user(%{actor_types: ["Person", "Service"]})
  127. end
  128. test "it returns user by display name" do
  129. user = insert(:user, name: "Display name")
  130. insert(:user)
  131. insert(:user)
  132. {:ok, _results, total} = Search.user()
  133. {:ok, [^user], count} = Search.user(%{name: "display"})
  134. assert total == 3
  135. assert count == 1
  136. end
  137. test "it returns user by email" do
  138. user = insert(:user, email: "some@example.com")
  139. insert(:user)
  140. insert(:user)
  141. {:ok, _results, total} = Search.user()
  142. {:ok, [^user], count} = Search.user(%{email: "some@example.com"})
  143. assert total == 3
  144. assert count == 1
  145. end
  146. test "it returns unapproved user" do
  147. unapproved = insert(:user, is_approved: false)
  148. insert(:user)
  149. insert(:user)
  150. {:ok, _results, total} = Search.user()
  151. {:ok, [^unapproved], count} = Search.user(%{need_approval: true})
  152. assert total == 3
  153. assert count == 1
  154. end
  155. test "it returns unconfirmed user" do
  156. unconfirmed = insert(:user, is_confirmed: false)
  157. insert(:user)
  158. insert(:user)
  159. {:ok, _results, total} = Search.user()
  160. {:ok, [^unconfirmed], count} = Search.user(%{unconfirmed: true})
  161. assert total == 3
  162. assert count == 1
  163. end
  164. # Note: as in Mastodon, `is_discoverable` doesn't anyhow relate to user searchability
  165. test "it returns non-discoverable users" do
  166. insert(:user)
  167. insert(:user, is_discoverable: false)
  168. {:ok, _results, total} = Search.user()
  169. assert total == 2
  170. end
  171. end
  172. end