chromium/components/feature_engagement/internal/feature_config_event_storage_validator_unittest.cc

// Copyright 2017 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/feature_engagement/internal/feature_config_event_storage_validator.h"

#include <string>

#include "base/feature_list.h"
#include "base/metrics/field_trial.h"
#include "base/test/scoped_feature_list.h"
#include "build/build_config.h"
#include "build/chromeos_buildflags.h"
#include "components/feature_engagement/internal/editable_configuration.h"
#include "components/feature_engagement/internal/event_model.h"
#include "components/feature_engagement/internal/proto/feature_event.pb.h"
#include "components/feature_engagement/public/configuration.h"
#include "testing/gtest/include/gtest/gtest.h"

namespace feature_engagement {

namespace {

BASE_FEATURE();
BASE_FEATURE();
BASE_FEATURE();
BASE_FEATURE();

FeatureConfig kNeverStored;
FeatureConfig kStoredInUsed1Day;
FeatureConfig kStoredInUsed2Days;
FeatureConfig kStoredInUsed10Days;
FeatureConfig kStoredInTrigger1Day;
FeatureConfig kStoredInTrigger2Days;
FeatureConfig kStoredInTrigger10Days;
FeatureConfig kStoredInEventConfigs1Day;
FeatureConfig kStoredInEventConfigs2Days;
FeatureConfig kStoredInEventConfigs10Days;

GroupConfig kGroupNeverStored;

void InitializeStorageFeatureConfigs() {}

class FeatureConfigEventStorageValidatorTest : public ::testing::Test {};

}  // namespace

TEST_F(FeatureConfigEventStorageValidatorTest,
       ShouldOnlyUseConfigFromEnabledFeatures) {}

TEST_F(FeatureConfigEventStorageValidatorTest,
       ShouldStoreIfSingleConfigHasMinimum1DayStorage) {}

TEST_F(FeatureConfigEventStorageValidatorTest,
       ShouldStoreIfAnyConfigHasMinimum1DayStorage) {}

TEST_F(FeatureConfigEventStorageValidatorTest,
       ShouldKeepIfSingleConfigMeetsEventAge) {}

TEST_F(FeatureConfigEventStorageValidatorTest,
       ShouldKeepIfAnyConfigMeetsEventAge) {}

#if BUILDFLAG(IS_CHROMEOS_ASH)
TEST_F(FeatureConfigEventStorageValidatorTest,
       ShouldStoreIfEventStartsWithPrefix) {
  scoped_feature_list_.InitWithFeatures({kEventStorageTestFeatureFoo}, {});

  UseConfig(kNeverStored);
  EXPECT_FALSE(validator_.ShouldStore("myevent"));

  UseConfigEventPrefix(kNeverStored, /*foo_prefix=*/"event");
  EXPECT_FALSE(validator_.ShouldStore("myevent"));

  UseConfigEventPrefix(kNeverStored, /*foo_prefix=*/"tneveym");
  EXPECT_FALSE(validator_.ShouldStore("myevent"));

  UseConfigEventPrefix(kNeverStored, /*foo_prefix=*/"eventmy");
  EXPECT_FALSE(validator_.ShouldStore("myevent"));

  UseConfigEventPrefix(kNeverStored, /*foo_prefix=*/"ymevent");
  EXPECT_FALSE(validator_.ShouldStore("myevent"));

  UseConfigEventPrefix(kNeverStored, /*foo_prefix=*/"myeventfoo");
  EXPECT_FALSE(validator_.ShouldStore("myevent"));

  UseConfigEventPrefix(kNeverStored, /*foo_prefix=*/"myevent");
  EXPECT_FALSE(validator_.ShouldStore("my_event"));

  UseConfigEventPrefix(kNeverStored, /*foo_prefix=*/"myevent");
  EXPECT_FALSE(validator_.ShouldStore("_myevent"));

  UseConfigEventPrefix(kNeverStored, /*foo_prefix=*/"myevent");
  EXPECT_FALSE(validator_.ShouldStore("1myevent"));

  UseConfigEventPrefix(kNeverStored, /*foo_prefix=*/"myevent");
  EXPECT_TRUE(validator_.ShouldStore("myevent"));

  UseConfigEventPrefix(kNeverStored, /*foo_prefix=*/"myevent");
  EXPECT_TRUE(validator_.ShouldStore("myevent_a"));

  UseConfigEventPrefix(kNeverStored, /*foo_prefix=*/"myevent");
  EXPECT_TRUE(validator_.ShouldStore("myevent1"));

  // Tests with case sensitivity.
  UseConfigEventPrefix(kNeverStored, /*foo_prefix=*/"Myevent");
  EXPECT_FALSE(validator_.ShouldStore("myevent"));

  UseConfigEventPrefix(kNeverStored, /*foo_prefix=*/"myEvent");
  EXPECT_FALSE(validator_.ShouldStore("myevent"));

  UseConfigEventPrefix(kNeverStored, /*foo_prefix=*/"Myevent");
  EXPECT_TRUE(validator_.ShouldStore("Myevent"));

  UseConfigEventPrefix(kNeverStored, /*foo_prefix=*/"MyEvent");
  EXPECT_FALSE(validator_.ShouldStore("Myevent"));

  UseConfigEventPrefix(kNeverStored, /*foo_prefix=*/"MyEvent");
  EXPECT_TRUE(validator_.ShouldStore("MyEvent"));

  // Tests with empty string or with spaces.
  UseConfigEventPrefix(kNeverStored, /*foo_prefix=*/"myevent");
  EXPECT_FALSE(validator_.ShouldStore(""));

  UseConfigEventPrefix(kNeverStored, /*foo_prefix=*/"myevent");
  EXPECT_FALSE(validator_.ShouldStore(" "));

  UseConfigEventPrefix(kNeverStored, /*foo_prefix=*/"myevent");
  EXPECT_FALSE(validator_.ShouldStore("  "));

  UseConfigEventPrefix(kNeverStored, /*foo_prefix=*/" myevent");
  EXPECT_FALSE(validator_.ShouldStore(" "));

  UseConfigEventPrefix(kNeverStored, /*foo_prefix=*/"myevent");
  EXPECT_FALSE(validator_.ShouldStore(" myevent"));

  UseConfigEventPrefix(kNeverStored, /*foo_prefix=*/"myevent");
  EXPECT_FALSE(validator_.ShouldStore("  myevent"));

  UseConfigEventPrefix(kNeverStored, /*foo_prefix=*/" myevent");
  EXPECT_FALSE(validator_.ShouldStore("  myevent"));
}
#endif

}  // namespace feature_engagement