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
5 #include "chrome/browser/ui/user_education/feature_promo_snooze_service.h"
6
7 #include <memory>
8
9 #include "base/feature_list.h"
10 #include "base/test/task_environment.h"
11 #include "base/time/time.h"
12 #include "chrome/test/base/testing_profile.h"
13 #include "content/public/test/browser_task_environment.h"
14 #include "testing/gtest/include/gtest/gtest.h"
15
16 namespace {
17 base::Feature kTestIPHFeature{"TestIPHFeature",
18 base::FEATURE_ENABLED_BY_DEFAULT};
19 base::Feature kTestIPHFeature2{"TestIPHFeature2",
20 base::FEATURE_ENABLED_BY_DEFAULT};
21 } // namespace
22
23 class FeaturePromoSnoozeServiceTest : public testing::Test {
24 public:
FeaturePromoSnoozeServiceTest()25 FeaturePromoSnoozeServiceTest()
26 : task_environment_{base::test::SingleThreadTaskEnvironment::TimeSource::
27 MOCK_TIME},
28 service_{&profile_} {}
29
30 protected:
31 content::BrowserTaskEnvironment task_environment_;
32 TestingProfile profile_;
33 FeaturePromoSnoozeService service_;
34 };
35
TEST_F(FeaturePromoSnoozeServiceTest,AllowNonSnoozedIPH)36 TEST_F(FeaturePromoSnoozeServiceTest, AllowNonSnoozedIPH) {
37 service_.Reset(kTestIPHFeature);
38 EXPECT_FALSE(service_.IsBlocked(kTestIPHFeature));
39 }
40
TEST_F(FeaturePromoSnoozeServiceTest,BlockDismissedIPH)41 TEST_F(FeaturePromoSnoozeServiceTest, BlockDismissedIPH) {
42 service_.Reset(kTestIPHFeature);
43 service_.OnUserDismiss(kTestIPHFeature);
44 EXPECT_TRUE(service_.IsBlocked(kTestIPHFeature));
45 service_.Reset(kTestIPHFeature);
46 EXPECT_FALSE(service_.IsBlocked(kTestIPHFeature));
47 }
48
TEST_F(FeaturePromoSnoozeServiceTest,BlockSnoozedIPH)49 TEST_F(FeaturePromoSnoozeServiceTest, BlockSnoozedIPH) {
50 service_.Reset(kTestIPHFeature);
51 service_.OnUserSnooze(kTestIPHFeature);
52 EXPECT_TRUE(service_.IsBlocked(kTestIPHFeature));
53 }
54
TEST_F(FeaturePromoSnoozeServiceTest,ReleaseSnoozedIPH)55 TEST_F(FeaturePromoSnoozeServiceTest, ReleaseSnoozedIPH) {
56 service_.Reset(kTestIPHFeature);
57 service_.OnUserSnooze(kTestIPHFeature, base::TimeDelta::FromHours(1));
58 EXPECT_TRUE(service_.IsBlocked(kTestIPHFeature));
59 task_environment_.FastForwardBy(base::TimeDelta::FromHours(2));
60 EXPECT_FALSE(service_.IsBlocked(kTestIPHFeature));
61 }
62
TEST_F(FeaturePromoSnoozeServiceTest,MultipleIPH)63 TEST_F(FeaturePromoSnoozeServiceTest, MultipleIPH) {
64 service_.Reset(kTestIPHFeature);
65 service_.Reset(kTestIPHFeature2);
66 service_.OnUserSnooze(kTestIPHFeature, base::TimeDelta::FromHours(1));
67 service_.OnUserSnooze(kTestIPHFeature2, base::TimeDelta::FromHours(3));
68 EXPECT_TRUE(service_.IsBlocked(kTestIPHFeature));
69 EXPECT_TRUE(service_.IsBlocked(kTestIPHFeature2));
70 task_environment_.FastForwardBy(base::TimeDelta::FromHours(2));
71 EXPECT_FALSE(service_.IsBlocked(kTestIPHFeature));
72 EXPECT_TRUE(service_.IsBlocked(kTestIPHFeature2));
73 task_environment_.FastForwardBy(base::TimeDelta::FromHours(2));
74 EXPECT_FALSE(service_.IsBlocked(kTestIPHFeature));
75 EXPECT_FALSE(service_.IsBlocked(kTestIPHFeature2));
76 }
77