blob: d8c54011b8b9a04db63d2a8de3aec101575a0306 [file] [log] [blame]
// Copyright 2020 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "components/metrics/date_changed_helper.h"
#include "base/time/time.h"
#include "base/time/time_override.h"
#include "components/prefs/testing_pref_service.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace metrics {
namespace {
using base::subtle::TimeNowIgnoringOverride;
const char kTestPrefName[] = "TestPref";
// TODO(crbug.com/1004987): Use TaskEnvironment::TimeSource::MOCK_TIME here
// instead of explicit clock overrides when it better supports setting a
// specific time of day and rewinding time.
class DateChangedHelperTest : public testing::Test {
public:
void SetUp() override {
date_changed_helper::RegisterPref(prefs_.registry(), kTestPrefName);
}
protected:
TestingPrefServiceSimple prefs_;
};
} // namespace
// Should not consider date changed if the preference is not available.
TEST_F(DateChangedHelperTest, TestNewDoesNotFire) {
SCOPED_TRACE(base::Time::Now());
ASSERT_FALSE(
date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName));
}
// Should consider date changed if the preference is more than a day old.
TEST_F(DateChangedHelperTest, TestOldFires) {
SCOPED_TRACE(base::Time::Now());
date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName);
base::subtle::ScopedTimeClockOverrides time_override(
[]() { return TimeNowIgnoringOverride() + base::Hours(25); }, nullptr,
nullptr);
ASSERT_TRUE(
date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName));
}
// Should consider date changed if the preference is more than a day in the
// future.
TEST_F(DateChangedHelperTest, TestFutureFires) {
SCOPED_TRACE(base::Time::Now());
date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName);
base::subtle::ScopedTimeClockOverrides time_override(
[]() { return TimeNowIgnoringOverride() - base::Hours(25); }, nullptr,
nullptr);
ASSERT_TRUE(
date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName));
}
// Should not consider date changed if the preference is earlier the same day.
TEST_F(DateChangedHelperTest, TestEarlierSameDayNotFired) {
SCOPED_TRACE(base::Time::Now());
{
base::subtle::ScopedTimeClockOverrides time_override(
[]() {
return TimeNowIgnoringOverride().LocalMidnight() + base::Hours(2);
},
nullptr, nullptr);
date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName);
}
base::subtle::ScopedTimeClockOverrides time_override(
[]() {
return TimeNowIgnoringOverride().LocalMidnight() + base::Hours(22);
},
nullptr, nullptr);
ASSERT_FALSE(
date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName));
}
// Should not consider date changed if the preference is later the same day.
TEST_F(DateChangedHelperTest, TestLaterSameDayNotFired) {
SCOPED_TRACE(base::Time::Now());
{
base::subtle::ScopedTimeClockOverrides time_override(
[]() {
return TimeNowIgnoringOverride().LocalMidnight() + base::Hours(22);
},
nullptr, nullptr);
date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName);
}
base::subtle::ScopedTimeClockOverrides time_override(
[]() {
return TimeNowIgnoringOverride().LocalMidnight() + base::Hours(2);
},
nullptr, nullptr);
ASSERT_FALSE(
date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName));
}
// Should consider date changed if the preference is in the previous day.
TEST_F(DateChangedHelperTest, TestJustNextDayFired) {
SCOPED_TRACE(base::Time::Now());
{
base::subtle::ScopedTimeClockOverrides time_override(
[]() {
return TimeNowIgnoringOverride().LocalMidnight() - base::Minutes(5);
},
nullptr, nullptr);
date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName);
}
base::subtle::ScopedTimeClockOverrides time_override(
[]() {
return TimeNowIgnoringOverride().LocalMidnight() + base::Minutes(5);
},
nullptr, nullptr);
ASSERT_TRUE(
date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName));
}
// Should consider date changed if the preference is in the next day.
TEST_F(DateChangedHelperTest, TestJustPreviousDayFired) {
SCOPED_TRACE(base::Time::Now());
{
base::subtle::ScopedTimeClockOverrides time_override(
[]() {
return TimeNowIgnoringOverride().LocalMidnight() + base::Minutes(5);
},
nullptr, nullptr);
date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName);
}
base::subtle::ScopedTimeClockOverrides time_override(
[]() {
return TimeNowIgnoringOverride().LocalMidnight() - base::Minutes(5);
},
nullptr, nullptr);
ASSERT_TRUE(
date_changed_helper::HasDateChangedSinceLastCall(&prefs_, kTestPrefName));
}
} // namespace metrics