excluded invisible users from search results
authorMaksim Pechnikov <parallel588@gmail.com>
Tue, 5 Nov 2019 05:55:41 +0000 (08:55 +0300)
committerMaksim Pechnikov <parallel588@gmail.com>
Tue, 5 Nov 2019 05:55:41 +0000 (08:55 +0300)
lib/pleroma/user/search.ex
test/user_search_test.exs

index 09664db76b7393a144c9d54972ba3a884eabb7bf..b1bb9d4da0aa65ad14c14a1fe131f88380ecdc19 100644 (file)
@@ -45,6 +45,7 @@ defmodule Pleroma.User.Search do
     for_user
     |> base_query(following)
     |> filter_blocked_user(for_user)
+    |> filter_invisible_users()
     |> filter_blocked_domains(for_user)
     |> fts_search(query_string)
     |> trigram_rank(query_string)
@@ -98,6 +99,10 @@ defmodule Pleroma.User.Search do
   defp base_query(_user, false), do: User
   defp base_query(user, true), do: User.get_followers_query(user)
 
+  defp filter_invisible_users(query) do
+    from(q in query, where: q.invisible == false)
+  end
+
   defp filter_blocked_user(query, %User{blocks: blocks})
        when length(blocks) > 0 do
     from(q in query, where: not (q.ap_id in ^blocks))
index 721af1e5bb9bbecc1d677f3309dceb8126d1d1dd..98841dbbda2c231f586a3b17896ca08815f2b737 100644 (file)
@@ -15,6 +15,14 @@ defmodule Pleroma.UserSearchTest do
   end
 
   describe "User.search" do
+    test "excluded invisible users from results" do
+      user = insert(:user, %{nickname: "john t1000"})
+      insert(:user, %{invisible: true, nickname: "john t800"})
+
+      [found_user] = User.search("john")
+      assert found_user.id == user.id
+    end
+
     test "accepts limit parameter" do
       Enum.each(0..4, &insert(:user, %{nickname: "john#{&1}"}))
       assert length(User.search("john", limit: 3)) == 3