Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(4365)

Unified Diff: chrome/browser/engagement/site_engagement_score_unittest.cc

Issue 2788413003: Add SiteEngagementService::GetAllDetails(), to return detailed scores. (Closed)
Patch Set: Fix notifications permission logic & test Created 3 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: chrome/browser/engagement/site_engagement_score_unittest.cc
diff --git a/chrome/browser/engagement/site_engagement_score_unittest.cc b/chrome/browser/engagement/site_engagement_score_unittest.cc
index 51e32258e4281638f5359e992ca2bc9a20e57f65..96268a2981e632ae7667cd87181d9f8311d6be66 100644
--- a/chrome/browser/engagement/site_engagement_score_unittest.cc
+++ b/chrome/browser/engagement/site_engagement_score_unittest.cc
@@ -9,7 +9,12 @@
#include "base/macros.h"
#include "base/test/simple_test_clock.h"
#include "base/values.h"
+#include "chrome/browser/content_settings/host_content_settings_map_factory.h"
#include "chrome/browser/engagement/site_engagement_service.h"
+#include "chrome/browser/profiles/profile.h"
+#include "chrome/test/base/chrome_render_view_host_test_harness.h"
+#include "chrome/test/base/testing_profile.h"
+#include "components/content_settings/core/browser/host_content_settings_map.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
@@ -42,12 +47,12 @@ base::Time GetReferenceTime() {
} // namespace
-class SiteEngagementScoreTest : public testing::Test {
+class SiteEngagementScoreTest : public ChromeRenderViewHostTestHarness {
public:
SiteEngagementScoreTest() : score_(&test_clock_, GURL(), nullptr) {}
void SetUp() override {
- testing::Test::SetUp();
+ ChromeRenderViewHostTestHarness::SetUp();
// Disable the first engagement bonus for tests.
SiteEngagementScore::SetParamValuesForTesting();
}
@@ -114,10 +119,10 @@ TEST_F(SiteEngagementScoreTest, AccumulateOnSameDay) {
score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
EXPECT_EQ(std::min(SiteEngagementScore::GetMaxPointsPerDay(),
(i + 1) * SiteEngagementScore::GetNavigationPoints()),
- score_.GetScore());
+ score_.GetTotalScore());
}
- EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetScore());
+ EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetTotalScore());
}
// Accumulate on the first day to max that day's engagement, then accumulate on
@@ -130,7 +135,7 @@ TEST_F(SiteEngagementScoreTest, AccumulateOnTwoDays) {
for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i)
score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
- EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetScore());
+ EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetTotalScore());
test_clock_.SetNow(later_date);
for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i) {
@@ -139,10 +144,11 @@ TEST_F(SiteEngagementScoreTest, AccumulateOnTwoDays) {
std::min(SiteEngagementScore::GetMaxPointsPerDay(),
(i + 1) * SiteEngagementScore::GetNavigationPoints());
EXPECT_EQ(day_score + SiteEngagementScore::GetMaxPointsPerDay(),
- score_.GetScore());
+ score_.GetTotalScore());
}
- EXPECT_EQ(2 * SiteEngagementScore::GetMaxPointsPerDay(), score_.GetScore());
+ EXPECT_EQ(2 * SiteEngagementScore::GetMaxPointsPerDay(),
+ score_.GetTotalScore());
}
// Accumulate score on many consecutive days and ensure the score doesn't exceed
@@ -158,10 +164,10 @@ TEST_F(SiteEngagementScoreTest, AccumulateALotOnManyDays) {
EXPECT_EQ(std::min(SiteEngagementScore::kMaxPoints,
(i + 1) * SiteEngagementScore::GetMaxPointsPerDay()),
- score_.GetScore());
+ score_.GetTotalScore());
}
- EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetScore());
+ EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetTotalScore());
}
// Accumulate a little on many consecutive days and ensure the score doesn't
@@ -180,10 +186,10 @@ TEST_F(SiteEngagementScoreTest, AccumulateALittleOnManyDays) {
std::min(SiteEngagementScore::kMaxPoints,
(i + 1) * kLessAccumulationsThanNeededToMaxDailyEngagement *
SiteEngagementScore::GetNavigationPoints()),
- score_.GetScore());
+ score_.GetTotalScore());
}
- EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetScore());
+ EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetTotalScore());
}
// Accumulate a bit, then check the score decays properly for a range of times.
@@ -199,14 +205,14 @@ TEST_F(SiteEngagementScoreTest, ScoresDecayOverTime) {
score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
}
- EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetScore());
+ EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetTotalScore());
// The score should not have decayed before the first decay period has
// elapsed.
test_clock_.SetNow(current_day +
base::TimeDelta::FromHours(
SiteEngagementScore::GetDecayPeriodInHours() - 1));
- EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetScore());
+ EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetTotalScore());
// The score should have decayed by one chunk after one decay period has
// elapsed.
@@ -215,7 +221,7 @@ TEST_F(SiteEngagementScoreTest, ScoresDecayOverTime) {
base::TimeDelta::FromHours(SiteEngagementScore::GetDecayPeriodInHours()));
EXPECT_EQ(
SiteEngagementScore::kMaxPoints - SiteEngagementScore::GetDecayPoints(),
- score_.GetScore());
+ score_.GetTotalScore());
// The score should have decayed by the right number of chunks after a few
// decay periods have elapsed.
@@ -226,14 +232,14 @@ TEST_F(SiteEngagementScoreTest, ScoresDecayOverTime) {
EXPECT_EQ(SiteEngagementScore::kMaxPoints -
kLessPeriodsThanNeededToDecayMaxScore *
SiteEngagementScore::GetDecayPoints(),
- score_.GetScore());
+ score_.GetTotalScore());
// The score should not decay below zero.
test_clock_.SetNow(
current_day +
base::TimeDelta::FromHours(kMorePeriodsThanNeededToDecayMaxScore *
SiteEngagementScore::GetDecayPeriodInHours()));
- EXPECT_EQ(0, score_.GetScore());
+ EXPECT_EQ(0, score_.GetTotalScore());
}
// Test that any expected decays are applied before adding points.
@@ -251,7 +257,7 @@ TEST_F(SiteEngagementScoreTest, DecaysAppliedBeforeAdd) {
double initial_score = kLessDaysThanNeededToMaxTotalEngagement *
SiteEngagementScore::GetMaxPointsPerDay();
- EXPECT_EQ(initial_score, score_.GetScore());
+ EXPECT_EQ(initial_score, score_.GetTotalScore());
// Go forward a few decay periods.
test_clock_.SetNow(
@@ -262,12 +268,12 @@ TEST_F(SiteEngagementScoreTest, DecaysAppliedBeforeAdd) {
double decayed_score = initial_score -
kLessPeriodsThanNeededToDecayMaxScore *
SiteEngagementScore::GetDecayPoints();
- EXPECT_EQ(decayed_score, score_.GetScore());
+ EXPECT_EQ(decayed_score, score_.GetTotalScore());
// Now add some points.
score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
EXPECT_EQ(decayed_score + SiteEngagementScore::GetNavigationPoints(),
- score_.GetScore());
+ score_.GetTotalScore());
}
// Test that going back in time is handled properly.
@@ -278,7 +284,7 @@ TEST_F(SiteEngagementScoreTest, GoBackInTime) {
for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i)
score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
- EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetScore());
+ EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetTotalScore());
// Adding to the score on an earlier date should be treated like another day,
// and should not cause any decay.
@@ -291,10 +297,11 @@ TEST_F(SiteEngagementScoreTest, GoBackInTime) {
std::min(SiteEngagementScore::GetMaxPointsPerDay(),
(i + 1) * SiteEngagementScore::GetNavigationPoints());
EXPECT_EQ(day_score + SiteEngagementScore::GetMaxPointsPerDay(),
- score_.GetScore());
+ score_.GetTotalScore());
}
- EXPECT_EQ(2 * SiteEngagementScore::GetMaxPointsPerDay(), score_.GetScore());
+ EXPECT_EQ(2 * SiteEngagementScore::GetMaxPointsPerDay(),
+ score_.GetTotalScore());
}
// Test that scores are read / written correctly from / to empty score
@@ -339,32 +346,32 @@ TEST_F(SiteEngagementScoreTest, FirstDailyEngagementBonus) {
// The first engagement event gets the bonus.
score1.AddPoints(0.5);
- EXPECT_EQ(1.0, score1.GetScore());
+ EXPECT_EQ(1.0, score1.GetTotalScore());
// Subsequent events do not.
score1.AddPoints(0.5);
- EXPECT_EQ(1.5, score1.GetScore());
+ EXPECT_EQ(1.5, score1.GetTotalScore());
// Bonuses are awarded independently between scores.
score2.AddPoints(1.0);
- EXPECT_EQ(1.5, score2.GetScore());
+ EXPECT_EQ(1.5, score2.GetTotalScore());
score2.AddPoints(1.0);
- EXPECT_EQ(2.5, score2.GetScore());
+ EXPECT_EQ(2.5, score2.GetTotalScore());
test_clock_.SetNow(current_day + base::TimeDelta::FromDays(1));
// The first event for the next day gets the bonus.
score1.AddPoints(0.5);
- EXPECT_EQ(2.5, score1.GetScore());
+ EXPECT_EQ(2.5, score1.GetTotalScore());
// Subsequent events do not.
score1.AddPoints(0.5);
- EXPECT_EQ(3.0, score1.GetScore());
+ EXPECT_EQ(3.0, score1.GetTotalScore());
score2.AddPoints(1.0);
- EXPECT_EQ(4.0, score2.GetScore());
+ EXPECT_EQ(4.0, score2.GetTotalScore());
score2.AddPoints(1.0);
- EXPECT_EQ(5.0, score2.GetScore());
+ EXPECT_EQ(5.0, score2.GetTotalScore());
}
// Test that resetting a score has the correct properties.
@@ -373,26 +380,27 @@ TEST_F(SiteEngagementScoreTest, Reset) {
test_clock_.SetNow(current_day);
score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
- EXPECT_EQ(SiteEngagementScore::GetNavigationPoints(), score_.GetScore());
+ EXPECT_EQ(SiteEngagementScore::GetNavigationPoints(), score_.GetTotalScore());
current_day += base::TimeDelta::FromDays(7);
test_clock_.SetNow(current_day);
score_.Reset(20.0, current_day);
- EXPECT_DOUBLE_EQ(20.0, score_.GetScore());
+ EXPECT_DOUBLE_EQ(20.0, score_.GetTotalScore());
EXPECT_DOUBLE_EQ(0, score_.points_added_today_);
EXPECT_EQ(current_day, score_.last_engagement_time_);
EXPECT_TRUE(score_.last_shortcut_launch_time_.is_null());
// Adding points after the reset should work as normal.
score_.AddPoints(5);
- EXPECT_EQ(25.0, score_.GetScore());
+ EXPECT_EQ(25.0, score_.GetTotalScore());
// The decay should happen one decay period from the current time.
test_clock_.SetNow(current_day +
base::TimeDelta::FromHours(
SiteEngagementScore::GetDecayPeriodInHours() + 1));
- EXPECT_EQ(25.0 - SiteEngagementScore::GetDecayPoints(), score_.GetScore());
+ EXPECT_EQ(25.0 - SiteEngagementScore::GetDecayPoints(),
+ score_.GetTotalScore());
// Ensure that manually setting a time works as expected.
score_.AddPoints(5);
@@ -400,7 +408,7 @@ TEST_F(SiteEngagementScoreTest, Reset) {
base::Time now = test_clock_.Now();
score_.Reset(10.0, now);
- EXPECT_DOUBLE_EQ(10.0, score_.GetScore());
+ EXPECT_DOUBLE_EQ(10.0, score_.GetTotalScore());
EXPECT_DOUBLE_EQ(0, score_.points_added_today_);
EXPECT_EQ(now, score_.last_engagement_time_);
EXPECT_TRUE(score_.last_shortcut_launch_time_.is_null());
@@ -413,7 +421,7 @@ TEST_F(SiteEngagementScoreTest, Reset) {
score_.Reset(15.0, now);
// 5 bonus from the last shortcut launch.
- EXPECT_DOUBLE_EQ(20.0, score_.GetScore());
+ EXPECT_DOUBLE_EQ(20.0, score_.GetTotalScore());
EXPECT_DOUBLE_EQ(0, score_.points_added_today_);
EXPECT_EQ(now, score_.last_engagement_time_);
EXPECT_EQ(old_now, score_.last_shortcut_launch_time_);
@@ -431,19 +439,60 @@ TEST_F(SiteEngagementScoreTest, ProportionalDecay) {
score_.AddPoints(2.0);
current_day += base::TimeDelta::FromDays(7);
test_clock_.SetNow(current_day);
- EXPECT_DOUBLE_EQ(1.0, score_.GetScore());
+ EXPECT_DOUBLE_EQ(1.0, score_.GetTotalScore());
// 3 decay periods, expect the score to be halved 3 times.
score_.AddPoints(15.0);
current_day += base::TimeDelta::FromDays(21);
test_clock_.SetNow(current_day);
- EXPECT_DOUBLE_EQ(2.0, score_.GetScore());
+ EXPECT_DOUBLE_EQ(2.0, score_.GetTotalScore());
// Ensure point removal happens after proportional decay.
score_.AddPoints(4.0);
- EXPECT_DOUBLE_EQ(6.0, score_.GetScore());
+ EXPECT_DOUBLE_EQ(6.0, score_.GetTotalScore());
SetParamValue(SiteEngagementScore::DECAY_POINTS, 2.0);
current_day += base::TimeDelta::FromDays(7);
test_clock_.SetNow(current_day);
- EXPECT_NEAR(1.0, score_.GetScore(), kMaxRoundingDeviation);
+ EXPECT_NEAR(1.0, score_.GetTotalScore(), kMaxRoundingDeviation);
+}
+
+// Verify that GetDetails fills out all fields correctly.
+TEST_F(SiteEngagementScoreTest, GetDetails) {
+ // Advance the clock, otherwise Now() is the same as the null Time value.
+ test_clock_.Advance(base::TimeDelta::FromDays(365));
+
+ GURL url("http://www.google.com/");
+
+ // Replace |score_| with one with an actual URL, and with a settings map.
+ HostContentSettingsMap* settings_map =
+ HostContentSettingsMapFactory::GetForProfile(profile());
+ score_ = SiteEngagementScore(&test_clock_, url, settings_map);
+
+ // Initially all component scores should be zero.
+ mojom::SiteEngagementDetails details = score_.GetDetails();
+ EXPECT_DOUBLE_EQ(0.0, details.total_score);
+ EXPECT_DOUBLE_EQ(0.0, details.installed_bonus);
+ EXPECT_DOUBLE_EQ(0.0, details.notifications_bonus);
+ EXPECT_DOUBLE_EQ(0.0, details.base_score);
+ EXPECT_EQ(url, details.origin);
+
+ // Add notifications permission and verify that impacts the correct bonus,
+ // and the total.
+ settings_map->SetContentSettingDefaultScope(
+ url, url, CONTENT_SETTINGS_TYPE_NOTIFICATIONS, std::string(),
+ CONTENT_SETTING_ALLOW);
+ details = score_.GetDetails();
+ EXPECT_DOUBLE_EQ(details.notifications_bonus, details.total_score);
+ EXPECT_DOUBLE_EQ(0.0, details.installed_bonus);
+ EXPECT_LT(0.0, details.notifications_bonus);
+ EXPECT_DOUBLE_EQ(0.0, details.base_score);
+
+ // Simulate the app having been launched.
+ score_.set_last_shortcut_launch_time(test_clock_.Now());
+ details = score_.GetDetails();
+ EXPECT_DOUBLE_EQ(details.installed_bonus + details.notifications_bonus,
+ details.total_score);
+ EXPECT_LT(0.0, details.installed_bonus);
+ EXPECT_LT(0.0, details.notifications_bonus);
+ EXPECT_DOUBLE_EQ(0.0, details.base_score);
}

Powered by Google App Engine
This is Rietveld 408576698