From a9b926e24b3d04f34e94e91de5c3445068449c21 Mon Sep 17 00:00:00 2001 From: Kishore Nallan Date: Wed, 28 Dec 2022 17:20:36 +0530 Subject: [PATCH] Don't wrap () for empty filter strings. --- src/auth_manager.cpp | 8 +++++++- test/core_api_utils_test.cpp | 23 +++++++++++++++++++++++ 2 files changed, 30 insertions(+), 1 deletion(-) diff --git a/src/auth_manager.cpp b/src/auth_manager.cpp index ee3eed7b..f4e5c431 100644 --- a/src/auth_manager.cpp +++ b/src/auth_manager.cpp @@ -394,7 +394,13 @@ bool AuthManager::add_item_to_params(std::map& req_par if(req_params.count(item.key()) == 0) { req_params[item.key()] = str_value; } else if(item.key() == "filter_by") { - req_params[item.key()] = "(" + req_params[item.key()] + ") && (" + str_value + ")"; + if(!req_params[item.key()].empty() && !str_value.empty()) { + req_params[item.key()] = "(" + req_params[item.key()] + ") && (" + str_value + ")"; + } else if(req_params[item.key()].empty() && !str_value.empty()) { + req_params[item.key()] = "(" + str_value + ")"; + } else if(!req_params[item.key()].empty() && str_value.empty()) { + req_params[item.key()] = "(" + req_params[item.key()] + ")"; + } } else if(overwrite) { req_params[item.key()] = str_value; } diff --git a/test/core_api_utils_test.cpp b/test/core_api_utils_test.cpp index fecd2606..d8d8787b 100644 --- a/test/core_api_utils_test.cpp +++ b/test/core_api_utils_test.cpp @@ -199,6 +199,29 @@ TEST_F(CoreAPIUtilsTest, MultiSearchEmbeddedKeys) { // ensure that req params are appended to (embedded params are also rolled into req params) ASSERT_EQ("((user_id: 100) && (age: > 100)) && (foo: bar)", req->params["filter_by"]); + // when empty filter_by is present in req params, don't add () + req->params["filter_by"] = ""; + post_multi_search(req, res); + ASSERT_EQ("((age: > 100)) && (foo: bar)", req->params["filter_by"]); + + // when empty filter_by in collection search params, don't add () + req->params["filter_by"] = "user_id: 100"; + search["filter_by"] = ""; + body["searches"].clear(); + body["searches"].push_back(search); + req->body = body.dump(); + post_multi_search(req, res); + ASSERT_EQ("((user_id: 100)) && (foo: bar)", req->params["filter_by"]); + + // when both are empty, don't add () + req->params["filter_by"] = ""; + search["filter_by"] = ""; + body["searches"].clear(); + body["searches"].push_back(search); + req->body = body.dump(); + post_multi_search(req, res); + ASSERT_EQ("(foo: bar)", req->params["filter_by"]); + // try setting max search limit req->embedded_params_vec[0]["limit_multi_searches"] = 0; ASSERT_FALSE(post_multi_search(req, res));