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