xref: /aosp_15_r20/external/cronet/components/metrics/date_changed_helper_unittest.cc (revision 6777b5387eb2ff775bb5750e3f5d96f37fb7352b)
1 // Copyright 2020 The Chromium Authors
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 "components/metrics/date_changed_helper.h"
6 
7 #include "base/time/time.h"
8 #include "base/time/time_override.h"
9 #include "components/prefs/testing_pref_service.h"
10 #include "testing/gtest/include/gtest/gtest.h"
11 
12 namespace metrics {
13 
14 namespace {
15 
16 using base::subtle::TimeNowIgnoringOverride;
17 
18 const char kTestPrefName[] = "TestPref";
19 
20 // TODO(crbug.com/40099277): Use TaskEnvironment::TimeSource::MOCK_TIME here
21 // instead of explicit clock overrides when it better supports setting a
22 // specific time of day and rewinding time.
23 class DateChangedHelperTest : public testing::Test {
24  public:
SetUp()25   void SetUp() override {
26     date_changed_helper::RegisterPref(prefs_.registry(), kTestPrefName);
27   }
28 
29  protected:
30   TestingPrefServiceSimple prefs_;
31 };
32 
33 }  // namespace
34 
35 // Should not consider date changed if the preference is not available.
TEST_F(DateChangedHelperTest,TestNewDoesNotFire)36 TEST_F(DateChangedHelperTest, TestNewDoesNotFire) {
37   SCOPED_TRACE(base::Time::Now());
38   ASSERT_FALSE(
39       date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName));
40 }
41 
42 // Should consider date changed if the preference is more than a day old.
TEST_F(DateChangedHelperTest,TestOldFires)43 TEST_F(DateChangedHelperTest, TestOldFires) {
44   SCOPED_TRACE(base::Time::Now());
45   date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName);
46 
47   base::subtle::ScopedTimeClockOverrides time_override(
48       []() { return TimeNowIgnoringOverride() + base::Hours(25); }, nullptr,
49       nullptr);
50   ASSERT_TRUE(
51       date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName));
52 }
53 
54 // Should consider date changed if the preference is more than a day in the
55 // future.
TEST_F(DateChangedHelperTest,TestFutureFires)56 TEST_F(DateChangedHelperTest, TestFutureFires) {
57   SCOPED_TRACE(base::Time::Now());
58   date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName);
59 
60   base::subtle::ScopedTimeClockOverrides time_override(
61       []() { return TimeNowIgnoringOverride() - base::Hours(25); }, nullptr,
62       nullptr);
63   ASSERT_TRUE(
64       date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName));
65 }
66 
67 // Should not consider date changed if the preference is earlier the same day.
TEST_F(DateChangedHelperTest,TestEarlierSameDayNotFired)68 TEST_F(DateChangedHelperTest, TestEarlierSameDayNotFired) {
69   SCOPED_TRACE(base::Time::Now());
70   {
71     base::subtle::ScopedTimeClockOverrides time_override(
72         []() {
73           return TimeNowIgnoringOverride().LocalMidnight() + base::Hours(2);
74         },
75         nullptr, nullptr);
76     date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName);
77   }
78 
79   base::subtle::ScopedTimeClockOverrides time_override(
80       []() {
81         return TimeNowIgnoringOverride().LocalMidnight() + base::Hours(22);
82       },
83       nullptr, nullptr);
84   ASSERT_FALSE(
85       date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName));
86 }
87 
88 // Should not consider date changed if the preference is later the same day.
TEST_F(DateChangedHelperTest,TestLaterSameDayNotFired)89 TEST_F(DateChangedHelperTest, TestLaterSameDayNotFired) {
90   SCOPED_TRACE(base::Time::Now());
91   {
92     base::subtle::ScopedTimeClockOverrides time_override(
93         []() {
94           return TimeNowIgnoringOverride().LocalMidnight() + base::Hours(22);
95         },
96         nullptr, nullptr);
97     date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName);
98   }
99 
100   base::subtle::ScopedTimeClockOverrides time_override(
101       []() {
102         return TimeNowIgnoringOverride().LocalMidnight() + base::Hours(2);
103       },
104       nullptr, nullptr);
105   ASSERT_FALSE(
106       date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName));
107 }
108 
109 // Should consider date changed if the preference is in the previous day.
TEST_F(DateChangedHelperTest,TestJustNextDayFired)110 TEST_F(DateChangedHelperTest, TestJustNextDayFired) {
111   SCOPED_TRACE(base::Time::Now());
112   {
113     base::subtle::ScopedTimeClockOverrides time_override(
114         []() {
115           return TimeNowIgnoringOverride().LocalMidnight() - base::Minutes(5);
116         },
117         nullptr, nullptr);
118     date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName);
119   }
120 
121   base::subtle::ScopedTimeClockOverrides time_override(
122       []() {
123         return TimeNowIgnoringOverride().LocalMidnight() + base::Minutes(5);
124       },
125       nullptr, nullptr);
126   ASSERT_TRUE(
127       date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName));
128 }
129 
130 // Should consider date changed if the preference is in the next day.
TEST_F(DateChangedHelperTest,TestJustPreviousDayFired)131 TEST_F(DateChangedHelperTest, TestJustPreviousDayFired) {
132   SCOPED_TRACE(base::Time::Now());
133   {
134     base::subtle::ScopedTimeClockOverrides time_override(
135         []() {
136           return TimeNowIgnoringOverride().LocalMidnight() + base::Minutes(5);
137         },
138         nullptr, nullptr);
139     date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName);
140   }
141 
142   base::subtle::ScopedTimeClockOverrides time_override(
143       []() {
144         return TimeNowIgnoringOverride().LocalMidnight() - base::Minutes(5);
145       },
146       nullptr, nullptr);
147   ASSERT_TRUE(
148       date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName));
149 }
150 
151 }  // namespace metrics
152