From faeee8ce05e546822c3a41c8453143713f28aadb Mon Sep 17 00:00:00 2001 From: Malte E <malte.e@mailbox.org> Date: Fri, 9 Dec 2022 10:24:00 +0800 Subject: [PATCH] add default parameter for limit, comment about synapse returning limit+1 --- include/mtx/requests.hpp | 2 +- include/mtxclient/http/client.hpp | 4 ++-- lib/http/client.cpp | 12 ++++++------ lib/structs/requests.cpp | 7 ------- tests/client_api.cpp | 28 +++++++++++++++++----------- tests/requests.cpp | 13 ------------- 6 files changed, 26 insertions(+), 40 deletions(-) diff --git a/include/mtx/requests.hpp b/include/mtx/requests.hpp index 20ebb7835..b1cefd8a3 100644 --- a/include/mtx/requests.hpp +++ b/include/mtx/requests.hpp @@ -443,7 +443,7 @@ struct SetPusher struct userDirectorySearch { //! The maximum number of results to return. Defaults to 10. - int limit; + std::optional<int> limit; //! Required: The term to search for std::string search_term; diff --git a/include/mtxclient/http/client.hpp b/include/mtxclient/http/client.hpp index fed026a70..2ef3dc756 100644 --- a/include/mtxclient/http/client.hpp +++ b/include/mtxclient/http/client.hpp @@ -764,8 +764,8 @@ public: //! Searches the user directory void search_user_directory(const std::string &search_term, - int limit, - Callback<mtx::responses::Users> callback); + Callback<mtx::responses::Users> callback, + int limit = -1); private: template<class Request, class Response> diff --git a/lib/http/client.cpp b/lib/http/client.cpp index 4fc4b2581..1eff94746 100644 --- a/lib/http/client.cpp +++ b/lib/http/client.cpp @@ -1662,13 +1662,13 @@ Client::set_pusher(const mtx::requests::SetPusher &req, Callback<mtx::responses: void Client::search_user_directory(const std::string &search_term, - int limit, - Callback<mtx::responses::Users> callback) + Callback<mtx::responses::Users> callback, + int limit) { - mtx::requests::userDirectorySearch req; - req.search_term = search_term; - req.limit = limit; - post<mtx::requests::userDirectorySearch, mtx::responses::Users>( + nlohmann::json req = {{"search_term", search_term}}; + if (limit >= 0) + req["limit"] = limit; + post<nlohmann::json, mtx::responses::Users>( "/client/v3/user_directory/search", req, std::move(callback)); } diff --git a/lib/structs/requests.cpp b/lib/structs/requests.cpp index c7133c3c3..badc7709f 100644 --- a/lib/structs/requests.cpp +++ b/lib/structs/requests.cpp @@ -287,12 +287,5 @@ to_json(json &obj, const SetPusher &req) obj["append"] = req.append; } -void -to_json(json &obj, const userDirectorySearch &request) -{ - obj["limit"] = request.limit; - obj["search_term"] = request.search_term; -} - } // namespace requests } // namespace mtx diff --git a/tests/client_api.cpp b/tests/client_api.cpp index 6c2a94f7f..ee3cd5d6f 100644 --- a/tests/client_api.cpp +++ b/tests/client_api.cpp @@ -1884,25 +1884,31 @@ TEST(ClientAPI, Users) [](const mtx::responses::RoomId &, RequestErr err) { check_error(err); }); }); + alice->search_user_directory("carl", + [alice](const mtx::responses::Users &users, RequestErr err) { + check_error(err); + EXPECT_EQ(users.results.size(), 1); + EXPECT_EQ(users.results[0].display_name, "Bobby"); + EXPECT_EQ(users.limited, false); + }); + // synapse appears to return limit+1 results, this does not seem to + // be spec compliant. To make the tests work, we pass 0 to get 1 result alice->search_user_directory( - "carl", 10, [alice](const mtx::responses::Users &users, RequestErr err) { - check_error(err); - EXPECT_EQ(users.results.size(), 1); - EXPECT_EQ(users.results[0].display_name, "Bobby"); - EXPECT_EQ(users.limited, false); - }); - alice->search_user_directory( - "Bob", 0, [alice](const mtx::responses::Users &users, RequestErr err) { + "Bob", + [alice](const mtx::responses::Users &users, RequestErr err) { check_error(err); EXPECT_EQ(users.results.size(), 1); EXPECT_EQ(users.limited, true); - }); + }, + 0); alice->search_user_directory( - "Bob", 10, [alice](const mtx::responses::Users &users, RequestErr err) { + "Bob", + [alice](const mtx::responses::Users &users, RequestErr err) { check_error(err); EXPECT_EQ(users.results.size(), 2); EXPECT_EQ(users.limited, false); - }); + }, + -1); alice->close(); bob->close(); diff --git a/tests/requests.cpp b/tests/requests.cpp index 17a71ea9d..94fecf2bb 100644 --- a/tests/requests.cpp +++ b/tests/requests.cpp @@ -354,16 +354,3 @@ TEST(Requests, PublicRooms) EXPECT_THROW(json req = b3, std::invalid_argument); } - -TEST(Requests, userDirectorySearch) -{ - userDirectorySearch search; - search.search_term = "foo"; - search.limit = 10; - - json j = search; - EXPECT_EQ(j, R"({ - "limit": 10, - "search_term": "foo" - })"_json); -} -- GitLab