Fix a long-standing bug where the user directory would return 1 more row than requested. (#14631)

This commit is contained in:
reivilibre 2022-12-07 11:19:43 +00:00 committed by GitHub
parent 9e82caac45
commit cf1059d045
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 10 additions and 3 deletions

1
changelog.d/14631.bugfix Normal file
View file

@ -0,0 +1 @@
Fix a long-standing bug where the user directory would return 1 more row than requested.

View file

@ -63,8 +63,8 @@ class UserDirectorySearchRestServlet(RestServlet):
body = parse_json_object_from_request(request) body = parse_json_object_from_request(request)
limit = body.get("limit", 10) limit = int(body.get("limit", 10))
limit = min(limit, 50) limit = max(min(limit, 50), 0)
try: try:
search_term = body["search_term"] search_term = body["search_term"]

View file

@ -886,7 +886,7 @@ class UserDirectoryStore(UserDirectoryBackgroundUpdateStore):
limited = len(results) > limit limited = len(results) > limit
return {"limited": limited, "results": results} return {"limited": limited, "results": results[0:limit]}
def _parse_query_sqlite(search_term: str) -> str: def _parse_query_sqlite(search_term: str) -> str:

View file

@ -448,6 +448,12 @@ class UserDirectoryStoreTestCase(HomeserverTestCase):
{"user_id": BOBBY, "display_name": "bobby", "avatar_url": None}, {"user_id": BOBBY, "display_name": "bobby", "avatar_url": None},
) )
@override_config({"user_directory": {"search_all_users": True}})
def test_search_user_limit_correct(self) -> None:
r = self.get_success(self.store.search_user_dir(ALICE, "bob", 1))
self.assertTrue(r["limited"])
self.assertEqual(1, len(r["results"]))
@override_config({"user_directory": {"search_all_users": True}}) @override_config({"user_directory": {"search_all_users": True}})
def test_search_user_dir_stop_words(self) -> None: def test_search_user_dir_stop_words(self) -> None:
"""Tests that a user can look up another user by searching for the start if its """Tests that a user can look up another user by searching for the start if its