From 3d2989278c2f97fb5247d0b58b99b77f400f3185 Mon Sep 17 00:00:00 2001
From: Ivan Tashkinov <ivantashkinov@gmail.com>
Date: Tue, 30 Jun 2020 21:26:39 +0300
Subject: [PATCH 1/2] [#1892] Excluded bot actors (applications, services) from
 search results.

---
 lib/pleroma/user/search.ex | 5 +++++
 test/user_search_test.exs  | 9 ++++++++-
 2 files changed, 13 insertions(+), 1 deletion(-)

diff --git a/lib/pleroma/user/search.ex b/lib/pleroma/user/search.ex
index cec59c372..0293c6ae7 100644
--- a/lib/pleroma/user/search.ex
+++ b/lib/pleroma/user/search.ex
@@ -52,6 +52,7 @@ defmodule Pleroma.User.Search do
     |> 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)
@@ -109,6 +110,10 @@ defmodule Pleroma.User.Search do
     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,
diff --git a/test/user_search_test.exs b/test/user_search_test.exs
index 17c63322a..9a74b9764 100644
--- a/test/user_search_test.exs
+++ b/test/user_search_test.exs
@@ -17,7 +17,7 @@ defmodule Pleroma.UserSearchTest do
   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"})
 
@@ -25,6 +25,13 @@ defmodule Pleroma.UserSearchTest do
       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

From 90764670dc83c39c28cd7851f08f77f1e8bcf25a Mon Sep 17 00:00:00 2001
From: Ivan Tashkinov <ivantashkinov@gmail.com>
Date: Fri, 3 Jul 2020 11:02:15 +0300
Subject: [PATCH 2/2] [#1892] Excluded internal users (applications) from user
 search results, reinstated service actors in search results.

---
 lib/pleroma/user/search.ex |  6 +++---
 test/user_search_test.exs  | 10 ++++++----
 2 files changed, 9 insertions(+), 7 deletions(-)

diff --git a/lib/pleroma/user/search.ex b/lib/pleroma/user/search.ex
index 0293c6ae7..42ff1de78 100644
--- a/lib/pleroma/user/search.ex
+++ b/lib/pleroma/user/search.ex
@@ -52,7 +52,7 @@ defmodule Pleroma.User.Search do
     |> base_query(following)
     |> filter_blocked_user(for_user)
     |> filter_invisible_users()
-    |> filter_bots()
+    |> filter_internal_users()
     |> filter_blocked_domains(for_user)
     |> fts_search(query_string)
     |> trigram_rank(query_string)
@@ -110,8 +110,8 @@ defmodule Pleroma.User.Search do
     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"])
+  defp filter_internal_users(query) do
+    from(q in query, where: q.actor_type != "Application")
   end
 
   defp filter_blocked_user(query, %User{} = blocker) do
diff --git a/test/user_search_test.exs b/test/user_search_test.exs
index 9a74b9764..f030523d3 100644
--- a/test/user_search_test.exs
+++ b/test/user_search_test.exs
@@ -25,11 +25,13 @@ defmodule Pleroma.UserSearchTest do
       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")
+    test "excludes service actors from results" do
+      insert(:user, actor_type: "Application", nickname: "user1")
+      service = insert(:user, actor_type: "Service", nickname: "user2")
+      person = insert(:user, actor_type: "Person", nickname: "user3")
 
-      assert [] = User.search("bot")
+      assert [found_user1, found_user2] = User.search("user")
+      assert [found_user1.id, found_user2.id] -- [service.id, person.id] == []
     end
 
     test "accepts limit parameter" do