From ed8a2935f55b5271e65955ddb7446e322439599b Mon Sep 17 00:00:00 2001
From: Maxim Filippov <colixer@gmail.com>
Date: Wed, 20 Mar 2019 01:37:40 +0300
Subject: [PATCH] Use ILIKE to search users

---
 lib/pleroma/user.ex | 22 +++++++---------------
 test/user_test.exs  | 17 +++++++++++++++++
 2 files changed, 24 insertions(+), 15 deletions(-)

diff --git a/lib/pleroma/user.ex b/lib/pleroma/user.ex
index 8df276ae0..bf84eaf7f 100644
--- a/lib/pleroma/user.ex
+++ b/lib/pleroma/user.ex
@@ -788,34 +788,26 @@ defmodule Pleroma.User do
 
   @spec search_for_admin(%{
           query: binary(),
-          admin: Pleroma.User.t(),
           local: boolean(),
           page: number(),
           page_size: number()
         }) :: {:ok, [Pleroma.User.t()], number()}
   def search_for_admin(%{
         query: term,
-        admin: admin,
         local: local,
         page: page,
         page_size: page_size
       }) do
-    term = String.trim_leading(term, "@")
+    maybe_local_query = User |> maybe_local_user_query(local)
 
-    local_paginated_query =
-      User
-      |> maybe_local_user_query(local)
+    search_query = from(u in maybe_local_query, where: ilike(u.nickname, ^"%#{term}%"))
+    count = search_query |> Repo.aggregate(:count, :id)
+    results =
+      search_query
       |> paginate(page, page_size)
+      |> Repo.all()
 
-    search_query = fts_search_subquery(term, local_paginated_query)
-
-    count =
-      term
-      |> fts_search_subquery()
-      |> maybe_local_user_query(local)
-      |> Repo.aggregate(:count, :id)
-
-    {:ok, do_search(search_query, admin), count}
+    {:ok, results, count}
   end
 
   def search(query, resolve \\ false, for_user \\ nil) do
diff --git a/test/user_test.exs b/test/user_test.exs
index c57eb2c06..1f54f3e30 100644
--- a/test/user_test.exs
+++ b/test/user_test.exs
@@ -1098,4 +1098,21 @@ defmodule Pleroma.UserTest do
     assert {:ok, user_state3} = User.bookmark(user, id2)
     assert user_state3.bookmarks == [id2]
   end
+
+  describe "search for admin" do
+    test "it ignores case" do
+      insert(:user, nickname: "papercoach")
+      insert(:user, nickname: "CanadaPaperCoach")
+
+      {:ok, _results, count} =
+        User.search_for_admin(%{
+          query: "paper",
+          local: false,
+          page: 1,
+          page_size: 50
+        })
+
+      assert count == 2
+    end
+  end
 end
-- 
GitLab