summaryrefslogtreecommitdiff
path: root/test/user_search_test.exs
diff options
context:
space:
mode:
authorHaelwenn <contact+git.pleroma.social@hacktivis.me>2020-07-10 08:49:14 +0000
committerHaelwenn <contact+git.pleroma.social@hacktivis.me>2020-07-10 08:49:14 +0000
commit5ea638757210c34b40fb568e537082b78f4118a6 (patch)
tree6635ffb2117ec4765969484cb437d7f1f7ea1e79 /test/user_search_test.exs
parent8743df5193018238eff730447519300b271cd592 (diff)
parent123352ffa1c80aab658fca0c2276d1c06de43a02 (diff)
downloadpleroma-5ea638757210c34b40fb568e537082b78f4118a6.tar.gz
pleroma-5ea638757210c34b40fb568e537082b78f4118a6.zip
Merge branch 'user-search-nickname-rank-boost' into 'develop'
Improved search results for localized nickname match See merge request pleroma/pleroma!2733
Diffstat (limited to 'test/user_search_test.exs')
-rw-r--r--test/user_search_test.exs31
1 files changed, 25 insertions, 6 deletions
diff --git a/test/user_search_test.exs b/test/user_search_test.exs
index f030523d3..559ba5966 100644
--- a/test/user_search_test.exs
+++ b/test/user_search_test.exs
@@ -46,30 +46,49 @@ defmodule Pleroma.UserSearchTest do
assert length(User.search("john", limit: 3, offset: 3)) == 2
end
- test "finds a user by full or partial nickname" do
+ defp clear_virtual_fields(user) do
+ Map.merge(user, %{search_rank: nil, search_type: nil})
+ end
+
+ test "finds a user by full nickname or its leading fragment" do
user = insert(:user, %{nickname: "john"})
Enum.each(["john", "jo", "j"], fn query ->
assert user ==
User.search(query)
|> List.first()
- |> Map.put(:search_rank, nil)
- |> Map.put(:search_type, nil)
+ |> clear_virtual_fields()
end)
end
- test "finds a user by full or partial name" do
+ test "finds a user by full name or leading fragment(s) of its words" do
user = insert(:user, %{name: "John Doe"})
Enum.each(["John Doe", "JOHN", "doe", "j d", "j", "d"], fn query ->
assert user ==
User.search(query)
|> List.first()
- |> Map.put(:search_rank, nil)
- |> Map.put(:search_type, nil)
+ |> clear_virtual_fields()
end)
end
+ test "matches by leading fragment of user domain" do
+ user = insert(:user, %{nickname: "arandom@dude.com"})
+ insert(:user, %{nickname: "iamthedude"})
+
+ assert [user.id] == User.search("dud") |> Enum.map(& &1.id)
+ end
+
+ test "ranks full nickname match higher than full name match" do
+ nicknamed_user = insert(:user, %{nickname: "hj@shigusegubu.club"})
+ named_user = insert(:user, %{nickname: "xyz@sample.com", name: "HJ"})
+
+ results = User.search("hj")
+
+ assert [nicknamed_user.id, named_user.id] == Enum.map(results, & &1.id)
+ assert Enum.at(results, 0).search_rank > Enum.at(results, 1).search_rank
+ end
+
test "finds users, considering density of matched tokens" do
u1 = insert(:user, %{name: "Bar Bar plus Word Word"})
u2 = insert(:user, %{name: "Word Word Bar Bar Bar"})