|> base_query(following)
|> filter_blocked_user(for_user)
|> filter_invisible_users()
+ |> filter_bots()
|> filter_blocked_domains(for_user)
|> fts_search(query_string)
|> trigram_rank(query_string)
from(q in query, where: q.invisible == false)
end
+ defp filter_bots(query) do
+ from(q in query, where: q.actor_type not in ["Application", "Service"])
+ end
+
defp filter_blocked_user(query, %User{} = blocker) do
query
|> join(:left, [u], b in Pleroma.UserRelationship,
describe "User.search" do
setup do: clear_config([:instance, :limit_to_local_content])
- test "excluded invisible users from results" do
+ test "excludes invisible users from results" do
user = insert(:user, %{nickname: "john t1000"})
insert(:user, %{invisible: true, nickname: "john t800"})
assert found_user.id == user.id
end
+ test "excludes bots from results" do
+ insert(:user, actor_type: "Service", nickname: "bot1")
+ insert(:user, actor_type: "Application", nickname: "bot2")
+
+ assert [] = User.search("bot")
+ end
+
test "accepts limit parameter" do
Enum.each(0..4, &insert(:user, %{nickname: "john#{&1}"}))
assert length(User.search("john", limit: 3)) == 3