Allow override rule with only metadata action.

This commit is contained in:
Kishore Nallan 2023-12-27 20:14:37 +05:30
parent 0007c97c54
commit 35a5ddeb54
2 changed files with 24 additions and 7 deletions

View File

@ -22,9 +22,9 @@ Option<bool> override_t::parse(const nlohmann::json& override_json, const std::s
if(override_json.count("includes") == 0 && override_json.count("excludes") == 0 &&
override_json.count("filter_by") == 0 && override_json.count("sort_by") == 0 &&
override_json.count("remove_matched_tokens") == 0 &&
override_json.count("remove_matched_tokens") == 0 && override_json.count("metadata") == 0 &&
override_json.count("replace_query") == 0) {
return Option<bool>(400, "Must contain one of: `includes`, `excludes`, "
return Option<bool>(400, "Must contain one of: `includes`, `excludes`, `metadata`, "
"`filter_by`, `sort_by`, `remove_matched_tokens`, `replace_query`.");
}

View File

@ -275,8 +275,8 @@ TEST_F(CollectionOverrideTest, OverrideJSONValidation) {
parse_op = override_t::parse(include_json2, "", override2);
ASSERT_FALSE(parse_op.ok());
ASSERT_STREQ("Must contain one of: `includes`, `excludes`, `filter_by`, `sort_by`, `remove_matched_tokens`, `replace_query`.",
parse_op.error().c_str());
ASSERT_STREQ("Must contain one of: `includes`, `excludes`, `metadata`, `filter_by`, `sort_by`, "
"`remove_matched_tokens`, `replace_query`.", parse_op.error().c_str());
include_json2["includes"] = nlohmann::json::array();
include_json2["includes"][0] = 100;
@ -3894,20 +3894,37 @@ TEST_F(CollectionOverrideTest, MetadataValidation) {
ASSERT_FALSE(op.ok());
ASSERT_EQ("The `metadata` must be a JSON object.", op.error());
// don't allow empty rule without any action
override_json1 = R"({
"id": "ov-1",
"rule": {
"query": "queryA",
"match": "exact"
}
})"_json;
override_t override2;
op = override_t::parse(override_json1, "ov-2", override2);
ASSERT_FALSE(op.ok());
ASSERT_EQ("Must contain one of: `includes`, `excludes`, `metadata`, `filter_by`, `sort_by`, "
"`remove_matched_tokens`, `replace_query`.", op.error());
// should allow only metadata to be present as action
override_json1 = R"({
"id": "ov-1",
"rule": {
"query": "queryA",
"match": "exact"
},
"filter_by": "category: kids",
"metadata": {"foo": "bar"}
})"_json;
op = override_t::parse(override_json1, "ov-1", override1);
override_t override3;
op = override_t::parse(override_json1, "ov-3", override3);
ASSERT_TRUE(op.ok());
coll1->add_override(override1);
coll1->add_override(override3);
collectionManager.drop_collection("coll1");
}