diff options
Diffstat (limited to 'test')
-rw-r--r-- | test/tasks/user_test.exs | 5 | ||||
-rw-r--r-- | test/user_search_test.exs | 28 |
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"}) |