Index: chrome/browser/banners/app_banner_settings_helper_unittest.cc |
diff --git a/chrome/browser/banners/app_banner_settings_helper_unittest.cc b/chrome/browser/banners/app_banner_settings_helper_unittest.cc |
index 73853d7ca7b1b9bf803477d24c0c7bb8e1bb566b..1f92104e9c2bccd9d8805ff18f3eac7eca437915 100644 |
--- a/chrome/browser/banners/app_banner_settings_helper_unittest.cc |
+++ b/chrome/browser/banners/app_banner_settings_helper_unittest.cc |
@@ -42,8 +42,188 @@ class AppBannerSettingsHelperTest : public ChromeRenderViewHostTestHarness {}; |
} // namespace |
+TEST_F(AppBannerSettingsHelperTest, BucketTimeToResolutionInvalid) { |
+ base::Time reference_time = GetReferenceTime(); |
+ |
+ // Test null, 1 day, and greater than 1 day cases. |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, |
+ base::TimeDelta::FromDays(0)), |
+ reference_time.LocalMidnight()); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ reference_time, base::TimeDelta::FromMinutes(1440)), |
+ reference_time.LocalMidnight()); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution(reference_time, |
+ base::TimeDelta::FromDays(2)), |
+ reference_time.LocalMidnight()); |
+ |
+ // Test number of minutes in 1 day + 1. |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ reference_time, base::TimeDelta::FromMinutes(1441)), |
+ reference_time.LocalMidnight()); |
+ |
+ // Test minutes which are not divisible by 1440 (minutes in a day). |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ reference_time, base::TimeDelta::FromMinutes(7)), |
+ reference_time.LocalMidnight()); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ reference_time, base::TimeDelta::FromMinutes(13)), |
+ reference_time.LocalMidnight()); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ reference_time, base::TimeDelta::FromMinutes(21)), |
+ reference_time.LocalMidnight()); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ reference_time, base::TimeDelta::FromMinutes(35)), |
+ reference_time.LocalMidnight()); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ reference_time, base::TimeDelta::FromMinutes(42)), |
+ reference_time.LocalMidnight()); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ reference_time, base::TimeDelta::FromMinutes(50)), |
+ reference_time.LocalMidnight()); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ reference_time, base::TimeDelta::FromMinutes(59)), |
+ reference_time.LocalMidnight()); |
+} |
+ |
+TEST_F(AppBannerSettingsHelperTest, BucketTimeToResolutionValid) { |
+ // 11:00 |
+ base::Time reference_time = GetReferenceTime(); |
+ // 13:44 |
+ base::Time same_day_later = |
+ reference_time + base::TimeDelta::FromMinutes(164); |
+ // 10:18 |
+ base::Time same_day_earlier = |
+ reference_time - base::TimeDelta::FromMinutes(42); |
+ base::Time midnight = reference_time.LocalMidnight(); |
+ base::Time bucketed_hour = midnight + base::TimeDelta::FromHours(11); |
+ base::Time bucketed_hour_later = midnight + base::TimeDelta::FromHours(13); |
+ base::Time bucketed_hour_earlier = midnight + base::TimeDelta::FromHours(10); |
+ |
+ // Resolution of 1 minute: 11:00, 13:44, 10:18. |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ reference_time, base::TimeDelta::FromMinutes(1)), |
+ bucketed_hour); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ same_day_later, base::TimeDelta::FromMinutes(1)), |
+ bucketed_hour_later + base::TimeDelta::FromMinutes(44)); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ same_day_earlier, base::TimeDelta::FromMinutes(1)), |
+ bucketed_hour_earlier + base::TimeDelta::FromMinutes(18)); |
+ |
+ // Resolution of 3 minutes: 11:00, 13:43, 10:18. |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ reference_time, base::TimeDelta::FromMinutes(3)), |
+ bucketed_hour); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ same_day_later, base::TimeDelta::FromMinutes(3)), |
+ bucketed_hour_later + base::TimeDelta::FromMinutes(42)); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ same_day_earlier, base::TimeDelta::FromMinutes(3)), |
+ bucketed_hour_earlier + base::TimeDelta::FromMinutes(18)); |
+ |
+ // Resolution of 10 minutes: 11:00, 13:40, 10:10. |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ reference_time, base::TimeDelta::FromMinutes(10)), |
+ bucketed_hour); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ same_day_later, base::TimeDelta::FromMinutes(10)), |
+ bucketed_hour_later + base::TimeDelta::FromMinutes(40)); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ same_day_earlier, base::TimeDelta::FromMinutes(10)), |
+ bucketed_hour_earlier + base::TimeDelta::FromMinutes(10)); |
+ |
+ // Resolution of 20 minutes: 11:00, 13:40, 10:00. |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ reference_time, base::TimeDelta::FromMinutes(20)), |
+ bucketed_hour); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ same_day_later, base::TimeDelta::FromMinutes(20)), |
+ bucketed_hour_later + base::TimeDelta::FromMinutes(40)); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ same_day_earlier, base::TimeDelta::FromMinutes(20)), |
+ bucketed_hour_earlier); |
+ |
+ // Resolution of 60 minutes: 11:00, 13:00, 10:00. |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ reference_time, base::TimeDelta::FromMinutes(60)), |
+ bucketed_hour); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ same_day_later, base::TimeDelta::FromMinutes(60)), |
+ bucketed_hour_later); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ same_day_earlier, base::TimeDelta::FromMinutes(60)), |
+ bucketed_hour_earlier); |
+ |
+ // Resolution of 120 minutes: 10:00, 12:00, 10:00. |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ reference_time, base::TimeDelta::FromMinutes(120)), |
+ bucketed_hour_earlier); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ same_day_later, base::TimeDelta::FromMinutes(120)), |
+ bucketed_hour_later - base::TimeDelta::FromHours(1)); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ same_day_earlier, base::TimeDelta::FromMinutes(120)), |
+ bucketed_hour_earlier); |
+ |
+ // Resolution of 180 minutes: 9:00, 12:00, 9:00. |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ reference_time, base::TimeDelta::FromMinutes(180)), |
+ bucketed_hour_earlier - base::TimeDelta::FromHours(1)); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ same_day_later, base::TimeDelta::FromMinutes(180)), |
+ bucketed_hour_later - base::TimeDelta::FromHours(1)); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ same_day_earlier, base::TimeDelta::FromMinutes(180)), |
+ bucketed_hour_earlier - base::TimeDelta::FromHours(1)); |
+ |
+ // Resolution of 240 minutes: 8:00, 12:00, 8:00. |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ reference_time, base::TimeDelta::FromMinutes(240)), |
+ midnight + base::TimeDelta::FromHours(8)); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ same_day_later, base::TimeDelta::FromMinutes(240)), |
+ midnight + base::TimeDelta::FromHours(12)); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ same_day_earlier, base::TimeDelta::FromMinutes(240)), |
+ midnight + base::TimeDelta::FromHours(8)); |
+ |
+ // Resolution of 360 minutes: 6:00, 12:00, 6:00 |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ reference_time, base::TimeDelta::FromMinutes(360)), |
+ midnight + base::TimeDelta::FromHours(6)); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ same_day_later, base::TimeDelta::FromMinutes(360)), |
+ midnight + base::TimeDelta::FromHours(12)); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ same_day_earlier, base::TimeDelta::FromMinutes(360)), |
+ midnight + base::TimeDelta::FromHours(6)); |
+ |
+ // Resolution of 720 minutes: 0:00, 12:00, 0:00 |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ reference_time, base::TimeDelta::FromMinutes(720)), |
+ midnight); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ same_day_later, base::TimeDelta::FromMinutes(720)), |
+ midnight + base::TimeDelta::FromHours(12)); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ same_day_earlier, base::TimeDelta::FromMinutes(720)), |
+ midnight); |
+ |
+ // Resolution of 1440 minutes: 0:00, 0:00, 0:00 |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ reference_time, base::TimeDelta::FromMinutes(1440)), |
+ midnight); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ same_day_later, base::TimeDelta::FromMinutes(1440)), |
+ midnight); |
+ EXPECT_EQ(AppBannerSettingsHelper::BucketTimeToResolution( |
+ same_day_earlier, base::TimeDelta::FromMinutes(1440)), |
+ midnight); |
+} |
+ |
TEST_F(AppBannerSettingsHelperTest, CouldShowEvents) { |
AppBannerSettingsHelper::SetEngagementWeights(1, 1); |
+ AppBannerSettingsHelper::SetMinimumMinutesBetweenVisits(1440); |
GURL url(kTestURL); |
NavigateAndCommit(url); |
@@ -76,7 +256,7 @@ TEST_F(AppBannerSettingsHelperTest, CouldShowEvents) { |
web_contents(), url, kTestPackageName, three_days_prior, |
ui::PAGE_TRANSITION_GENERATED); |
- // Now there should be two days. |
+ // Now there should be two events. |
events = AppBannerSettingsHelper::GetCouldShowBannerEvents( |
web_contents(), url, kTestPackageName); |
EXPECT_EQ(2u, events.size()); |
@@ -90,7 +270,7 @@ TEST_F(AppBannerSettingsHelperTest, CouldShowEvents) { |
web_contents(), url, kTestPackageName, reference_time, |
ui::PAGE_TRANSITION_LINK); |
- // Now there should still be two days, but the first date should have been |
+ // Now there should still be two events, but the first date should have been |
// removed. |
events = AppBannerSettingsHelper::GetCouldShowBannerEvents( |
web_contents(), url, kTestPackageName); |
@@ -100,12 +280,12 @@ TEST_F(AppBannerSettingsHelperTest, CouldShowEvents) { |
EXPECT_EQ(events[0].engagement, 1); |
EXPECT_EQ(events[1].engagement, 1); |
- // Now add the the other day on the reference date. |
+ // Now add the the other date on the reference day. |
AppBannerSettingsHelper::RecordBannerCouldShowEvent( |
web_contents(), url, kTestPackageName, same_day, |
ui::PAGE_TRANSITION_RELOAD); |
- // Now there should still be the same two days. |
+ // Now there should still be the same two dates. |
events = AppBannerSettingsHelper::GetCouldShowBannerEvents( |
web_contents(), url, kTestPackageName); |
EXPECT_EQ(2u, events.size()); |
@@ -115,8 +295,102 @@ TEST_F(AppBannerSettingsHelperTest, CouldShowEvents) { |
EXPECT_EQ(events[1].engagement, 1); |
} |
+TEST_F(AppBannerSettingsHelperTest, CouldShowEventsDifferentResolution) { |
+ AppBannerSettingsHelper::SetEngagementWeights(1, 1); |
+ AppBannerSettingsHelper::SetMinimumMinutesBetweenVisits(20); |
+ GURL url(kTestURL); |
+ NavigateAndCommit(url); |
+ |
+ // Check that by default, there are no events recorded. |
+ std::vector<AppBannerSettingsHelper::BannerEvent> events = |
+ AppBannerSettingsHelper::GetCouldShowBannerEvents(web_contents(), url, |
+ kTestPackageName); |
+ EXPECT_TRUE(events.empty()); |
+ |
+ base::Time reference_time = GetReferenceTime(); |
+ base::Time same_day_ignored_i = |
+ reference_time + base::TimeDelta::FromMinutes(10); |
+ base::Time same_day_counted_i = |
+ reference_time + base::TimeDelta::FromMinutes(20); |
+ base::Time same_day_counted_ii = |
+ reference_time + base::TimeDelta::FromMinutes(45); |
+ base::Time same_day_ignored_ii = |
+ reference_time + base::TimeDelta::FromMinutes(59); |
+ |
+ // Add the reference date. |
+ AppBannerSettingsHelper::RecordBannerCouldShowEvent( |
+ web_contents(), url, kTestPackageName, reference_time, |
+ ui::PAGE_TRANSITION_LINK); |
+ |
+ // There should be one event recorded |
+ events = AppBannerSettingsHelper::GetCouldShowBannerEvents( |
+ web_contents(), url, kTestPackageName); |
+ EXPECT_EQ(1u, events.size()); |
+ EXPECT_TRUE(IsWithinDay(events[0].time, reference_time)); |
+ EXPECT_EQ(events[0].engagement, 1); |
+ |
+ // Now add the the ignored date on the reference day. |
+ AppBannerSettingsHelper::RecordBannerCouldShowEvent( |
+ web_contents(), url, kTestPackageName, same_day_ignored_i, |
+ ui::PAGE_TRANSITION_RELOAD); |
+ |
+ // Now there should still one event. |
+ events = AppBannerSettingsHelper::GetCouldShowBannerEvents( |
+ web_contents(), url, kTestPackageName); |
+ EXPECT_EQ(1u, events.size()); |
+ EXPECT_TRUE(IsWithinDay(events[0].time, reference_time)); |
+ EXPECT_EQ(events[0].engagement, 1); |
+ |
+ // Now add the the first counted date on the reference day. |
+ AppBannerSettingsHelper::RecordBannerCouldShowEvent( |
+ web_contents(), url, kTestPackageName, same_day_counted_i, |
+ ui::PAGE_TRANSITION_TYPED); |
+ |
+ // Now there should be two events. |
+ events = AppBannerSettingsHelper::GetCouldShowBannerEvents( |
+ web_contents(), url, kTestPackageName); |
+ EXPECT_EQ(2u, events.size()); |
+ EXPECT_TRUE(IsWithinDay(events[0].time, reference_time)); |
+ EXPECT_TRUE(IsWithinDay(events[1].time, same_day_counted_i)); |
+ EXPECT_EQ(events[0].engagement, 1); |
+ EXPECT_EQ(events[1].engagement, 1); |
+ |
+ // Now add the the second counted date on the reference day. |
+ AppBannerSettingsHelper::RecordBannerCouldShowEvent( |
+ web_contents(), url, kTestPackageName, same_day_counted_ii, |
+ ui::PAGE_TRANSITION_GENERATED); |
+ |
+ // Now there should be three events. |
+ events = AppBannerSettingsHelper::GetCouldShowBannerEvents( |
+ web_contents(), url, kTestPackageName); |
+ EXPECT_EQ(3u, events.size()); |
+ EXPECT_TRUE(IsWithinDay(events[0].time, reference_time)); |
+ EXPECT_TRUE(IsWithinDay(events[1].time, same_day_counted_i)); |
+ EXPECT_TRUE(IsWithinDay(events[2].time, same_day_counted_ii)); |
+ EXPECT_EQ(events[0].engagement, 1); |
+ EXPECT_EQ(events[1].engagement, 1); |
+ EXPECT_EQ(events[2].engagement, 1); |
+ |
+ // Now add the the second ignored date on the reference day. |
+ AppBannerSettingsHelper::RecordBannerCouldShowEvent( |
+ web_contents(), url, kTestPackageName, same_day_ignored_ii, |
+ ui::PAGE_TRANSITION_LINK); |
+ |
+ // Now there should still be three events. |
+ events = AppBannerSettingsHelper::GetCouldShowBannerEvents( |
+ web_contents(), url, kTestPackageName); |
+ EXPECT_EQ(3u, events.size()); |
+ EXPECT_TRUE(IsWithinDay(events[0].time, reference_time)); |
+ EXPECT_TRUE(IsWithinDay(events[1].time, same_day_counted_i)); |
+ EXPECT_TRUE(IsWithinDay(events[2].time, same_day_counted_ii)); |
+ EXPECT_EQ(events[0].engagement, 1); |
+ EXPECT_EQ(events[1].engagement, 1); |
+ EXPECT_EQ(events[2].engagement, 1); |
+} |
+ |
TEST_F(AppBannerSettingsHelperTest, SingleEvents) { |
AppBannerSettingsHelper::SetEngagementWeights(1, 1); |
+ AppBannerSettingsHelper::SetMinimumMinutesBetweenVisits(1440); |
GURL url(kTestURL); |
NavigateAndCommit(url); |
@@ -239,6 +513,7 @@ TEST_F(AppBannerSettingsHelperTest, CouldShowEventReplacedWithHigherWeight) { |
TEST_F(AppBannerSettingsHelperTest, IndirectEngagementWithLowerWeight) { |
AppBannerSettingsHelper::SetEngagementWeights(2, 0.5); |
+ AppBannerSettingsHelper::SetMinimumMinutesBetweenVisits(1440); |
GURL url(kTestURL); |
NavigateAndCommit(url); |
@@ -300,6 +575,7 @@ TEST_F(AppBannerSettingsHelperTest, DirectEngagementWithHigherWeight) { |
TEST_F(AppBannerSettingsHelperTest, ShouldShowFromEngagement) { |
AppBannerSettingsHelper::SetEngagementWeights(1, 1); |
+ AppBannerSettingsHelper::SetMinimumMinutesBetweenVisits(1440); |
GURL url(kTestURL); |
NavigateAndCommit(url); |
@@ -374,6 +650,7 @@ TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterBlocking) { |
TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterShowing) { |
AppBannerSettingsHelper::SetEngagementWeights(1, 1); |
+ AppBannerSettingsHelper::SetMinimumMinutesBetweenVisits(1440); |
GURL url(kTestURL); |
NavigateAndCommit(url); |
@@ -413,6 +690,7 @@ TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterShowing) { |
TEST_F(AppBannerSettingsHelperTest, ShouldNotShowAfterAdding) { |
AppBannerSettingsHelper::SetEngagementWeights(1, 1); |
+ AppBannerSettingsHelper::SetMinimumMinutesBetweenVisits(1440); |
benwells
2015/08/24 06:55:52
At some point you might want to put all this boile
dominickn
2015/08/24 07:43:16
Will investigate for a separate CL.
|
GURL url(kTestURL); |
NavigateAndCommit(url); |