Don't allow rule creation targeting the same destination collection.

Upsert can still be used for this.
This commit is contained in:
Kishore Nallan 2023-07-09 19:50:21 +05:30
parent 448b2b6ce9
commit 5c60e06690
2 changed files with 23 additions and 2 deletions

View File

@ -83,6 +83,10 @@ Option<bool> AnalyticsManager::create_popular_queries_index(nlohmann::json &payl
suggestion_config.suggestion_collection = suggestion_collection;
suggestion_config.limit = limit;
if(!upsert && popular_queries.count(suggestion_collection) != 0) {
return Option<bool>(400, "There's already another configuration for this destination collection.");
}
for(const auto& coll: params["source"]["collections"]) {
if(!coll.is_string()) {
return Option<bool>(400, "Must contain a valid list of source collection names.");

View File

@ -134,6 +134,23 @@ TEST_F(AnalyticsManagerTest, GetAndDeleteSuggestions) {
}
})"_json;
create_op = analyticsManager.create_rule(analytics_rule, false, true);
ASSERT_FALSE(create_op.ok());
ASSERT_EQ("There's already another configuration for this destination collection.", create_op.error());
analytics_rule = R"({
"name": "top_search_queries2",
"type": "popular_queries",
"params": {
"limit": 100,
"source": {
"collections": ["titles"]
},
"destination": {
"collection": "top_queries2"
}
}
})"_json;
create_op = analyticsManager.create_rule(analytics_rule, false, true);
ASSERT_TRUE(create_op.ok());
@ -173,8 +190,8 @@ TEST_F(AnalyticsManagerTest, GetAndDeleteSuggestions) {
ASSERT_EQ("There's already another configuration with the name `top_search_queries2`.", create_op.error());
// try deleting both rules
analyticsManager.remove_rule("top_search_queries");
analyticsManager.remove_rule("top_search_queries2");
ASSERT_TRUE(analyticsManager.remove_rule("top_search_queries").ok());
ASSERT_TRUE(analyticsManager.remove_rule("top_search_queries2").ok());
missing_rule_op = analyticsManager.get_rule("top_search_queries");
ASSERT_FALSE(missing_rule_op.ok());