1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80
|
// Copyright 2022 The Chromium Authors
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/segmentation_platform/internal/config_parser.h"
#include <memory>
#include "components/segmentation_platform/public/config.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace segmentation_platform {
bool operator==(const std::unique_ptr<Config::SegmentMetadata>& a,
const std::unique_ptr<Config::SegmentMetadata>& b) {
return *a == *b;
}
TEST(ConfigParserTest, ParseInvalidConfig) {
constexpr char kInvalidJson[] =
R"({"segmentation_key":"test_key, "uma_name":})";
EXPECT_FALSE(ParseConfigFromString(kInvalidJson));
constexpr char kMissingFields[] = R"({"segmentation_key":"test_key"})";
EXPECT_FALSE(ParseConfigFromString(kMissingFields));
}
TEST(ConfigParserTest, ParseValidConfig) {
constexpr char kValidConfig1[] = R"({
"segmentation_key": "test_key",
"segmentation_uma_name": "TestKey",
"segments": {
"16" : {"segment_uma_name" : "LowEngagement"},
"5" : {"segment_uma_name" : "HighEngagement"},
"6" : {"segment_uma_name" : "MediumEngagement"}
},
"segment_selection_ttl_days": 10
})";
auto config1 = ParseConfigFromString(kValidConfig1);
ASSERT_TRUE(config1);
EXPECT_EQ(config1->segmentation_key, "test_key");
EXPECT_EQ(config1->segmentation_uma_name, "TestKey");
base::flat_map<proto::SegmentId, std::unique_ptr<Config::SegmentMetadata>>
expected1;
expected1.insert(
{proto::SegmentId::
OPTIMIZATION_TARGET_SEGMENTATION_CHROME_LOW_USER_ENGAGEMENT,
std::make_unique<Config::SegmentMetadata>("LowEngagement")});
expected1.insert(
{proto::SegmentId::OPTIMIZATION_TARGET_SEGMENTATION_SHARE,
std::make_unique<Config::SegmentMetadata>("HighEngagement")});
expected1.insert(
{proto::SegmentId::OPTIMIZATION_TARGET_SEGMENTATION_VOICE,
std::make_unique<Config::SegmentMetadata>("MediumEngagement")});
EXPECT_EQ(config1->segments, expected1);
EXPECT_EQ(config1->segment_selection_ttl, base::Days(10));
EXPECT_EQ(config1->unknown_selection_ttl, base::Days(0));
constexpr char kValidConfig2[] = R"({
"segmentation_key": "test_key",
"segmentation_uma_name": "TestKey",
"segments": {
"5" : {"segment_uma_name" : "FeedUser"}
},
"segment_selection_ttl_days": 10,
"unknown_segment_selection_ttl_days": 14
})";
auto config2 = ParseConfigFromString(kValidConfig2);
ASSERT_TRUE(config2);
EXPECT_EQ(config2->segmentation_key, "test_key");
EXPECT_EQ(config2->segmentation_uma_name, "TestKey");
base::flat_map<proto::SegmentId, std::unique_ptr<Config::SegmentMetadata>>
expected2;
expected2.insert({proto::SegmentId::OPTIMIZATION_TARGET_SEGMENTATION_SHARE,
std::make_unique<Config::SegmentMetadata>("FeedUser")});
EXPECT_EQ(config2->segments, expected2);
EXPECT_EQ(config2->segment_selection_ttl, base::Days(10));
EXPECT_EQ(config2->unknown_selection_ttl, base::Days(14));
}
} // namespace segmentation_platform
|