feature_promo_snooze_service_unittest.cc 4.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120
  1. // Copyright 2020 The Chromium Authors. All rights reserved.
  2. // Use of this source code is governed by a BSD-style license that can be
  3. // found in the LICENSE file.
  4. #include "components/user_education/common/feature_promo_snooze_service.h"
  5. #include <memory>
  6. #include "base/feature_list.h"
  7. #include "base/metrics/field_trial_param_associator.h"
  8. #include "base/test/scoped_feature_list.h"
  9. #include "base/test/task_environment.h"
  10. #include "base/time/time.h"
  11. #include "components/feature_engagement/public/feature_constants.h"
  12. #include "components/user_education/common/feature_promo_snooze_service.h"
  13. #include "testing/gtest/include/gtest/gtest.h"
  14. namespace user_education {
  15. namespace {
  16. base::Feature kTestIPHFeature{"TestIPHFeature",
  17. base::FEATURE_ENABLED_BY_DEFAULT};
  18. base::Feature kTestIPHFeature2{"TestIPHFeature2",
  19. base::FEATURE_ENABLED_BY_DEFAULT};
  20. class TestFeaturePromoSnoozeService : public FeaturePromoSnoozeService {
  21. public:
  22. TestFeaturePromoSnoozeService() = default;
  23. ~TestFeaturePromoSnoozeService() override = default;
  24. void Reset(const base::Feature& iph_feature) override {
  25. snooze_data_.erase(&iph_feature);
  26. }
  27. absl::optional<FeaturePromoSnoozeService::SnoozeData> ReadSnoozeData(
  28. const base::Feature& iph_feature) override {
  29. const auto it = snooze_data_.find(&iph_feature);
  30. return it == snooze_data_.end() ? absl::nullopt
  31. : absl::make_optional(it->second);
  32. }
  33. void SaveSnoozeData(const base::Feature& iph_feature,
  34. const SnoozeData& snooze_data) override {
  35. snooze_data_[&iph_feature] = snooze_data;
  36. }
  37. private:
  38. std::map<const base::Feature*, SnoozeData> snooze_data_;
  39. };
  40. } // namespace
  41. class FeaturePromoSnoozeServiceTest : public testing::Test {
  42. public:
  43. FeaturePromoSnoozeServiceTest()
  44. : task_environment_{
  45. base::test::SingleThreadTaskEnvironment::TimeSource::MOCK_TIME} {}
  46. protected:
  47. base::test::TaskEnvironment task_environment_;
  48. TestFeaturePromoSnoozeService service_;
  49. };
  50. TEST_F(FeaturePromoSnoozeServiceTest, AllowFirstTimeIPH) {
  51. service_.Reset(kTestIPHFeature);
  52. EXPECT_FALSE(service_.IsBlocked(kTestIPHFeature));
  53. }
  54. TEST_F(FeaturePromoSnoozeServiceTest, BlockDismissedIPH) {
  55. service_.Reset(kTestIPHFeature);
  56. service_.OnPromoShown(kTestIPHFeature);
  57. service_.OnUserDismiss(kTestIPHFeature);
  58. EXPECT_TRUE(service_.IsBlocked(kTestIPHFeature));
  59. service_.Reset(kTestIPHFeature);
  60. EXPECT_FALSE(service_.IsBlocked(kTestIPHFeature));
  61. }
  62. TEST_F(FeaturePromoSnoozeServiceTest, BlockSnoozedIPH) {
  63. service_.Reset(kTestIPHFeature);
  64. service_.OnPromoShown(kTestIPHFeature);
  65. service_.OnUserSnooze(kTestIPHFeature);
  66. EXPECT_TRUE(service_.IsBlocked(kTestIPHFeature));
  67. }
  68. TEST_F(FeaturePromoSnoozeServiceTest, ReleaseSnoozedIPH) {
  69. service_.Reset(kTestIPHFeature);
  70. service_.OnPromoShown(kTestIPHFeature);
  71. service_.OnUserSnooze(kTestIPHFeature, base::Hours(1));
  72. EXPECT_TRUE(service_.IsBlocked(kTestIPHFeature));
  73. task_environment_.FastForwardBy(base::Hours(2));
  74. EXPECT_FALSE(service_.IsBlocked(kTestIPHFeature));
  75. }
  76. TEST_F(FeaturePromoSnoozeServiceTest, MultipleIPH) {
  77. service_.Reset(kTestIPHFeature);
  78. service_.Reset(kTestIPHFeature2);
  79. service_.OnPromoShown(kTestIPHFeature);
  80. service_.OnUserSnooze(kTestIPHFeature, base::Hours(1));
  81. service_.OnPromoShown(kTestIPHFeature2);
  82. service_.OnUserSnooze(kTestIPHFeature2, base::Hours(3));
  83. EXPECT_TRUE(service_.IsBlocked(kTestIPHFeature));
  84. EXPECT_TRUE(service_.IsBlocked(kTestIPHFeature2));
  85. task_environment_.FastForwardBy(base::Hours(2));
  86. EXPECT_FALSE(service_.IsBlocked(kTestIPHFeature));
  87. EXPECT_TRUE(service_.IsBlocked(kTestIPHFeature2));
  88. task_environment_.FastForwardBy(base::Hours(2));
  89. EXPECT_FALSE(service_.IsBlocked(kTestIPHFeature));
  90. EXPECT_FALSE(service_.IsBlocked(kTestIPHFeature2));
  91. }
  92. TEST_F(FeaturePromoSnoozeServiceTest, SnoozeNonClicker) {
  93. base::test::ScopedFeatureList feature_list;
  94. service_.Reset(kTestIPHFeature);
  95. service_.OnPromoShown(kTestIPHFeature);
  96. EXPECT_TRUE(service_.IsBlocked(kTestIPHFeature));
  97. task_environment_.FastForwardBy(base::Days(15));
  98. EXPECT_FALSE(service_.IsBlocked(kTestIPHFeature));
  99. }
  100. } // namespace user_education