aboutsummaryrefslogtreecommitdiff
path: root/test
diff options
context:
space:
mode:
Diffstat (limited to 'test')
-rw-r--r--test/tasks/user_test.exs5
-rw-r--r--test/user_search_test.exs28
2 files changed, 28 insertions, 5 deletions
diff --git a/test/tasks/user_test.exs b/test/tasks/user_test.exs
index b55aa1cdb..d4c4b5a14 100644
--- a/test/tasks/user_test.exs
+++ b/test/tasks/user_test.exs
@@ -436,11 +436,14 @@ defmodule Mix.Tasks.Pleroma.UserTest do
{:ok, user} = User.follow(user, kawen)
- assert [moon.id, kawen.id] == User.Search.search("moon") |> Enum.map(& &1.id)
+ # One "typo" in nickname makes `moot` score better than `kawen` despite of name match
+ assert [moon.id, moot.id, kawen.id] == User.Search.search("moon") |> Enum.map(& &1.id)
+
res = User.search("moo") |> Enum.map(& &1.id)
assert moon.id in res
assert moot.id in res
assert kawen.id in res
+
assert [moon.id, kawen.id] == User.Search.search("moon fediverse") |> Enum.map(& &1.id)
assert [kawen.id, moon.id] ==
diff --git a/test/user_search_test.exs b/test/user_search_test.exs
index 17c63322a..9ff00d7f9 100644
--- a/test/user_search_test.exs
+++ b/test/user_search_test.exs
@@ -37,6 +37,10 @@ defmodule Pleroma.UserSearchTest do
assert length(User.search("john", limit: 3, offset: 3)) == 2
end
+ defp clear_virtual_fields(user) do
+ Map.merge(user, %{search_rank: nil, search_type: nil, levenshtein_distance: nil})
+ end
+
test "finds a user by full or partial nickname" do
user = insert(:user, %{nickname: "john"})
@@ -44,8 +48,7 @@ defmodule Pleroma.UserSearchTest do
assert user ==
User.search(query)
|> List.first()
- |> Map.put(:search_rank, nil)
- |> Map.put(:search_type, nil)
+ |> clear_virtual_fields()
end)
end
@@ -56,8 +59,8 @@ defmodule Pleroma.UserSearchTest do
assert user ==
User.search(query)
|> List.first()
- |> Map.put(:search_rank, nil)
- |> Map.put(:search_type, nil)
+ |> Map.merge(%{search_rank: nil, search_type: nil, levenshtein_distance: nil})
+ |> clear_virtual_fields()
end)
end
@@ -68,6 +71,23 @@ defmodule Pleroma.UserSearchTest do
assert [u2.id, u1.id] == Enum.map(User.search("bar word"), & &1.id)
end
+ test "considers Levenshtein distance between query and nickname for short queries" do
+ clear_config([:instance, :limit_to_local_content], false)
+
+ user = insert(:user, %{nickname: "hj@shigusegubu.club"})
+ insert(:user, %{nickname: "xyz@sample.com"})
+ insert(:user, %{nickname: "zyx@hj.com"})
+
+ # Note: "h.j." and "hhhj" are matched since 4+ char queries allow for 2 typos
+ for query <- ["hj", "hhj", "h j", "lj", "hi", "jj", "h.j.", "hhhj"] do
+ assert [user.id] == Enum.map(User.search(query), & &1.id)
+ end
+
+ for query <- ["ajay", "gg"] do
+ assert [] == User.search(query)
+ end
+ end
+
test "finds users, boosting ranks of friends and followers" do
u1 = insert(:user)
u2 = insert(:user, %{name: "Doe"})