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

Side by Side 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 unified diff | Download patch
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 1 // Copyright 2016 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "chrome/browser/engagement/site_engagement_score.h" 5 #include "chrome/browser/engagement/site_engagement_score.h"
6 6
7 #include <utility> 7 #include <utility>
8 8
9 #include "base/macros.h" 9 #include "base/macros.h"
10 #include "base/test/simple_test_clock.h" 10 #include "base/test/simple_test_clock.h"
11 #include "base/values.h" 11 #include "base/values.h"
12 #include "chrome/browser/content_settings/host_content_settings_map_factory.h"
12 #include "chrome/browser/engagement/site_engagement_service.h" 13 #include "chrome/browser/engagement/site_engagement_service.h"
14 #include "chrome/browser/profiles/profile.h"
15 #include "chrome/test/base/chrome_render_view_host_test_harness.h"
16 #include "chrome/test/base/testing_profile.h"
17 #include "components/content_settings/core/browser/host_content_settings_map.h"
13 #include "testing/gtest/include/gtest/gtest.h" 18 #include "testing/gtest/include/gtest/gtest.h"
14 19
15 namespace { 20 namespace {
16 21
17 const int kLessAccumulationsThanNeededToMaxDailyEngagement = 2; 22 const int kLessAccumulationsThanNeededToMaxDailyEngagement = 2;
18 const int kMoreAccumulationsThanNeededToMaxDailyEngagement = 40; 23 const int kMoreAccumulationsThanNeededToMaxDailyEngagement = 40;
19 const int kMoreAccumulationsThanNeededToMaxTotalEngagement = 200; 24 const int kMoreAccumulationsThanNeededToMaxTotalEngagement = 200;
20 const int kLessDaysThanNeededToMaxTotalEngagement = 4; 25 const int kLessDaysThanNeededToMaxTotalEngagement = 4;
21 const int kMoreDaysThanNeededToMaxTotalEngagement = 40; 26 const int kMoreDaysThanNeededToMaxTotalEngagement = 40;
22 const int kLessPeriodsThanNeededToDecayMaxScore = 2; 27 const int kLessPeriodsThanNeededToDecayMaxScore = 2;
(...skipping 12 matching lines...) Expand all
35 exploded_reference_time.millisecond = 0; 40 exploded_reference_time.millisecond = 0;
36 41
37 base::Time out_time; 42 base::Time out_time;
38 EXPECT_TRUE( 43 EXPECT_TRUE(
39 base::Time::FromLocalExploded(exploded_reference_time, &out_time)); 44 base::Time::FromLocalExploded(exploded_reference_time, &out_time));
40 return out_time; 45 return out_time;
41 } 46 }
42 47
43 } // namespace 48 } // namespace
44 49
45 class SiteEngagementScoreTest : public testing::Test { 50 class SiteEngagementScoreTest : public ChromeRenderViewHostTestHarness {
46 public: 51 public:
47 SiteEngagementScoreTest() : score_(&test_clock_, GURL(), nullptr) {} 52 SiteEngagementScoreTest() : score_(&test_clock_, GURL(), nullptr) {}
48 53
49 void SetUp() override { 54 void SetUp() override {
50 testing::Test::SetUp(); 55 ChromeRenderViewHostTestHarness::SetUp();
51 // Disable the first engagement bonus for tests. 56 // Disable the first engagement bonus for tests.
52 SiteEngagementScore::SetParamValuesForTesting(); 57 SiteEngagementScore::SetParamValuesForTesting();
53 } 58 }
54 59
55 protected: 60 protected:
56 void VerifyScore(const SiteEngagementScore& score, 61 void VerifyScore(const SiteEngagementScore& score,
57 double expected_raw_score, 62 double expected_raw_score,
58 double expected_points_added_today, 63 double expected_points_added_today,
59 base::Time expected_last_engagement_time) { 64 base::Time expected_last_engagement_time) {
60 EXPECT_EQ(expected_raw_score, score.raw_score_); 65 EXPECT_EQ(expected_raw_score, score.raw_score_);
(...skipping 46 matching lines...) Expand 10 before | Expand all | Expand 10 after
107 // Accumulate score many times on the same day. Ensure each time the score goes 112 // Accumulate score many times on the same day. Ensure each time the score goes
108 // up, but not more than the maximum per day. 113 // up, but not more than the maximum per day.
109 TEST_F(SiteEngagementScoreTest, AccumulateOnSameDay) { 114 TEST_F(SiteEngagementScoreTest, AccumulateOnSameDay) {
110 base::Time reference_time = GetReferenceTime(); 115 base::Time reference_time = GetReferenceTime();
111 116
112 test_clock_.SetNow(reference_time); 117 test_clock_.SetNow(reference_time);
113 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i) { 118 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i) {
114 score_.AddPoints(SiteEngagementScore::GetNavigationPoints()); 119 score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
115 EXPECT_EQ(std::min(SiteEngagementScore::GetMaxPointsPerDay(), 120 EXPECT_EQ(std::min(SiteEngagementScore::GetMaxPointsPerDay(),
116 (i + 1) * SiteEngagementScore::GetNavigationPoints()), 121 (i + 1) * SiteEngagementScore::GetNavigationPoints()),
117 score_.GetScore()); 122 score_.GetTotalScore());
118 } 123 }
119 124
120 EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetScore()); 125 EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetTotalScore());
121 } 126 }
122 127
123 // Accumulate on the first day to max that day's engagement, then accumulate on 128 // Accumulate on the first day to max that day's engagement, then accumulate on
124 // a different day. 129 // a different day.
125 TEST_F(SiteEngagementScoreTest, AccumulateOnTwoDays) { 130 TEST_F(SiteEngagementScoreTest, AccumulateOnTwoDays) {
126 base::Time reference_time = GetReferenceTime(); 131 base::Time reference_time = GetReferenceTime();
127 base::Time later_date = reference_time + base::TimeDelta::FromDays(2); 132 base::Time later_date = reference_time + base::TimeDelta::FromDays(2);
128 133
129 test_clock_.SetNow(reference_time); 134 test_clock_.SetNow(reference_time);
130 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i) 135 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i)
131 score_.AddPoints(SiteEngagementScore::GetNavigationPoints()); 136 score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
132 137
133 EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetScore()); 138 EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetTotalScore());
134 139
135 test_clock_.SetNow(later_date); 140 test_clock_.SetNow(later_date);
136 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i) { 141 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i) {
137 score_.AddPoints(SiteEngagementScore::GetNavigationPoints()); 142 score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
138 double day_score = 143 double day_score =
139 std::min(SiteEngagementScore::GetMaxPointsPerDay(), 144 std::min(SiteEngagementScore::GetMaxPointsPerDay(),
140 (i + 1) * SiteEngagementScore::GetNavigationPoints()); 145 (i + 1) * SiteEngagementScore::GetNavigationPoints());
141 EXPECT_EQ(day_score + SiteEngagementScore::GetMaxPointsPerDay(), 146 EXPECT_EQ(day_score + SiteEngagementScore::GetMaxPointsPerDay(),
142 score_.GetScore()); 147 score_.GetTotalScore());
143 } 148 }
144 149
145 EXPECT_EQ(2 * SiteEngagementScore::GetMaxPointsPerDay(), score_.GetScore()); 150 EXPECT_EQ(2 * SiteEngagementScore::GetMaxPointsPerDay(),
151 score_.GetTotalScore());
146 } 152 }
147 153
148 // Accumulate score on many consecutive days and ensure the score doesn't exceed 154 // Accumulate score on many consecutive days and ensure the score doesn't exceed
149 // the maximum allowed. 155 // the maximum allowed.
150 TEST_F(SiteEngagementScoreTest, AccumulateALotOnManyDays) { 156 TEST_F(SiteEngagementScoreTest, AccumulateALotOnManyDays) {
151 base::Time current_day = GetReferenceTime(); 157 base::Time current_day = GetReferenceTime();
152 158
153 for (int i = 0; i < kMoreDaysThanNeededToMaxTotalEngagement; ++i) { 159 for (int i = 0; i < kMoreDaysThanNeededToMaxTotalEngagement; ++i) {
154 current_day += base::TimeDelta::FromDays(1); 160 current_day += base::TimeDelta::FromDays(1);
155 test_clock_.SetNow(current_day); 161 test_clock_.SetNow(current_day);
156 for (int j = 0; j < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++j) 162 for (int j = 0; j < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++j)
157 score_.AddPoints(SiteEngagementScore::GetNavigationPoints()); 163 score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
158 164
159 EXPECT_EQ(std::min(SiteEngagementScore::kMaxPoints, 165 EXPECT_EQ(std::min(SiteEngagementScore::kMaxPoints,
160 (i + 1) * SiteEngagementScore::GetMaxPointsPerDay()), 166 (i + 1) * SiteEngagementScore::GetMaxPointsPerDay()),
161 score_.GetScore()); 167 score_.GetTotalScore());
162 } 168 }
163 169
164 EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetScore()); 170 EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetTotalScore());
165 } 171 }
166 172
167 // Accumulate a little on many consecutive days and ensure the score doesn't 173 // Accumulate a little on many consecutive days and ensure the score doesn't
168 // exceed the maximum allowed. 174 // exceed the maximum allowed.
169 TEST_F(SiteEngagementScoreTest, AccumulateALittleOnManyDays) { 175 TEST_F(SiteEngagementScoreTest, AccumulateALittleOnManyDays) {
170 base::Time current_day = GetReferenceTime(); 176 base::Time current_day = GetReferenceTime();
171 177
172 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxTotalEngagement; ++i) { 178 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxTotalEngagement; ++i) {
173 current_day += base::TimeDelta::FromDays(1); 179 current_day += base::TimeDelta::FromDays(1);
174 test_clock_.SetNow(current_day); 180 test_clock_.SetNow(current_day);
175 181
176 for (int j = 0; j < kLessAccumulationsThanNeededToMaxDailyEngagement; ++j) 182 for (int j = 0; j < kLessAccumulationsThanNeededToMaxDailyEngagement; ++j)
177 score_.AddPoints(SiteEngagementScore::GetNavigationPoints()); 183 score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
178 184
179 EXPECT_EQ( 185 EXPECT_EQ(
180 std::min(SiteEngagementScore::kMaxPoints, 186 std::min(SiteEngagementScore::kMaxPoints,
181 (i + 1) * kLessAccumulationsThanNeededToMaxDailyEngagement * 187 (i + 1) * kLessAccumulationsThanNeededToMaxDailyEngagement *
182 SiteEngagementScore::GetNavigationPoints()), 188 SiteEngagementScore::GetNavigationPoints()),
183 score_.GetScore()); 189 score_.GetTotalScore());
184 } 190 }
185 191
186 EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetScore()); 192 EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetTotalScore());
187 } 193 }
188 194
189 // Accumulate a bit, then check the score decays properly for a range of times. 195 // Accumulate a bit, then check the score decays properly for a range of times.
190 TEST_F(SiteEngagementScoreTest, ScoresDecayOverTime) { 196 TEST_F(SiteEngagementScoreTest, ScoresDecayOverTime) {
191 base::Time current_day = GetReferenceTime(); 197 base::Time current_day = GetReferenceTime();
192 198
193 // First max the score. 199 // First max the score.
194 for (int i = 0; i < kMoreDaysThanNeededToMaxTotalEngagement; ++i) { 200 for (int i = 0; i < kMoreDaysThanNeededToMaxTotalEngagement; ++i) {
195 current_day += base::TimeDelta::FromDays(1); 201 current_day += base::TimeDelta::FromDays(1);
196 test_clock_.SetNow(current_day); 202 test_clock_.SetNow(current_day);
197 203
198 for (int j = 0; j < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++j) 204 for (int j = 0; j < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++j)
199 score_.AddPoints(SiteEngagementScore::GetNavigationPoints()); 205 score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
200 } 206 }
201 207
202 EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetScore()); 208 EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetTotalScore());
203 209
204 // The score should not have decayed before the first decay period has 210 // The score should not have decayed before the first decay period has
205 // elapsed. 211 // elapsed.
206 test_clock_.SetNow(current_day + 212 test_clock_.SetNow(current_day +
207 base::TimeDelta::FromHours( 213 base::TimeDelta::FromHours(
208 SiteEngagementScore::GetDecayPeriodInHours() - 1)); 214 SiteEngagementScore::GetDecayPeriodInHours() - 1));
209 EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetScore()); 215 EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetTotalScore());
210 216
211 // The score should have decayed by one chunk after one decay period has 217 // The score should have decayed by one chunk after one decay period has
212 // elapsed. 218 // elapsed.
213 test_clock_.SetNow( 219 test_clock_.SetNow(
214 current_day + 220 current_day +
215 base::TimeDelta::FromHours(SiteEngagementScore::GetDecayPeriodInHours())); 221 base::TimeDelta::FromHours(SiteEngagementScore::GetDecayPeriodInHours()));
216 EXPECT_EQ( 222 EXPECT_EQ(
217 SiteEngagementScore::kMaxPoints - SiteEngagementScore::GetDecayPoints(), 223 SiteEngagementScore::kMaxPoints - SiteEngagementScore::GetDecayPoints(),
218 score_.GetScore()); 224 score_.GetTotalScore());
219 225
220 // The score should have decayed by the right number of chunks after a few 226 // The score should have decayed by the right number of chunks after a few
221 // decay periods have elapsed. 227 // decay periods have elapsed.
222 test_clock_.SetNow( 228 test_clock_.SetNow(
223 current_day + 229 current_day +
224 base::TimeDelta::FromHours(kLessPeriodsThanNeededToDecayMaxScore * 230 base::TimeDelta::FromHours(kLessPeriodsThanNeededToDecayMaxScore *
225 SiteEngagementScore::GetDecayPeriodInHours())); 231 SiteEngagementScore::GetDecayPeriodInHours()));
226 EXPECT_EQ(SiteEngagementScore::kMaxPoints - 232 EXPECT_EQ(SiteEngagementScore::kMaxPoints -
227 kLessPeriodsThanNeededToDecayMaxScore * 233 kLessPeriodsThanNeededToDecayMaxScore *
228 SiteEngagementScore::GetDecayPoints(), 234 SiteEngagementScore::GetDecayPoints(),
229 score_.GetScore()); 235 score_.GetTotalScore());
230 236
231 // The score should not decay below zero. 237 // The score should not decay below zero.
232 test_clock_.SetNow( 238 test_clock_.SetNow(
233 current_day + 239 current_day +
234 base::TimeDelta::FromHours(kMorePeriodsThanNeededToDecayMaxScore * 240 base::TimeDelta::FromHours(kMorePeriodsThanNeededToDecayMaxScore *
235 SiteEngagementScore::GetDecayPeriodInHours())); 241 SiteEngagementScore::GetDecayPeriodInHours()));
236 EXPECT_EQ(0, score_.GetScore()); 242 EXPECT_EQ(0, score_.GetTotalScore());
237 } 243 }
238 244
239 // Test that any expected decays are applied before adding points. 245 // Test that any expected decays are applied before adding points.
240 TEST_F(SiteEngagementScoreTest, DecaysAppliedBeforeAdd) { 246 TEST_F(SiteEngagementScoreTest, DecaysAppliedBeforeAdd) {
241 base::Time current_day = GetReferenceTime(); 247 base::Time current_day = GetReferenceTime();
242 248
243 // Get the score up to something that can handle a bit of decay before 249 // Get the score up to something that can handle a bit of decay before
244 for (int i = 0; i < kLessDaysThanNeededToMaxTotalEngagement; ++i) { 250 for (int i = 0; i < kLessDaysThanNeededToMaxTotalEngagement; ++i) {
245 current_day += base::TimeDelta::FromDays(1); 251 current_day += base::TimeDelta::FromDays(1);
246 test_clock_.SetNow(current_day); 252 test_clock_.SetNow(current_day);
247 253
248 for (int j = 0; j < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++j) 254 for (int j = 0; j < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++j)
249 score_.AddPoints(SiteEngagementScore::GetNavigationPoints()); 255 score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
250 } 256 }
251 257
252 double initial_score = kLessDaysThanNeededToMaxTotalEngagement * 258 double initial_score = kLessDaysThanNeededToMaxTotalEngagement *
253 SiteEngagementScore::GetMaxPointsPerDay(); 259 SiteEngagementScore::GetMaxPointsPerDay();
254 EXPECT_EQ(initial_score, score_.GetScore()); 260 EXPECT_EQ(initial_score, score_.GetTotalScore());
255 261
256 // Go forward a few decay periods. 262 // Go forward a few decay periods.
257 test_clock_.SetNow( 263 test_clock_.SetNow(
258 current_day + 264 current_day +
259 base::TimeDelta::FromHours(kLessPeriodsThanNeededToDecayMaxScore * 265 base::TimeDelta::FromHours(kLessPeriodsThanNeededToDecayMaxScore *
260 SiteEngagementScore::GetDecayPeriodInHours())); 266 SiteEngagementScore::GetDecayPeriodInHours()));
261 267
262 double decayed_score = initial_score - 268 double decayed_score = initial_score -
263 kLessPeriodsThanNeededToDecayMaxScore * 269 kLessPeriodsThanNeededToDecayMaxScore *
264 SiteEngagementScore::GetDecayPoints(); 270 SiteEngagementScore::GetDecayPoints();
265 EXPECT_EQ(decayed_score, score_.GetScore()); 271 EXPECT_EQ(decayed_score, score_.GetTotalScore());
266 272
267 // Now add some points. 273 // Now add some points.
268 score_.AddPoints(SiteEngagementScore::GetNavigationPoints()); 274 score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
269 EXPECT_EQ(decayed_score + SiteEngagementScore::GetNavigationPoints(), 275 EXPECT_EQ(decayed_score + SiteEngagementScore::GetNavigationPoints(),
270 score_.GetScore()); 276 score_.GetTotalScore());
271 } 277 }
272 278
273 // Test that going back in time is handled properly. 279 // Test that going back in time is handled properly.
274 TEST_F(SiteEngagementScoreTest, GoBackInTime) { 280 TEST_F(SiteEngagementScoreTest, GoBackInTime) {
275 base::Time current_day = GetReferenceTime(); 281 base::Time current_day = GetReferenceTime();
276 282
277 test_clock_.SetNow(current_day); 283 test_clock_.SetNow(current_day);
278 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i) 284 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i)
279 score_.AddPoints(SiteEngagementScore::GetNavigationPoints()); 285 score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
280 286
281 EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetScore()); 287 EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetTotalScore());
282 288
283 // Adding to the score on an earlier date should be treated like another day, 289 // Adding to the score on an earlier date should be treated like another day,
284 // and should not cause any decay. 290 // and should not cause any decay.
285 test_clock_.SetNow(current_day - base::TimeDelta::FromDays( 291 test_clock_.SetNow(current_day - base::TimeDelta::FromDays(
286 kMorePeriodsThanNeededToDecayMaxScore * 292 kMorePeriodsThanNeededToDecayMaxScore *
287 SiteEngagementScore::GetDecayPoints())); 293 SiteEngagementScore::GetDecayPoints()));
288 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i) { 294 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i) {
289 score_.AddPoints(SiteEngagementScore::GetNavigationPoints()); 295 score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
290 double day_score = 296 double day_score =
291 std::min(SiteEngagementScore::GetMaxPointsPerDay(), 297 std::min(SiteEngagementScore::GetMaxPointsPerDay(),
292 (i + 1) * SiteEngagementScore::GetNavigationPoints()); 298 (i + 1) * SiteEngagementScore::GetNavigationPoints());
293 EXPECT_EQ(day_score + SiteEngagementScore::GetMaxPointsPerDay(), 299 EXPECT_EQ(day_score + SiteEngagementScore::GetMaxPointsPerDay(),
294 score_.GetScore()); 300 score_.GetTotalScore());
295 } 301 }
296 302
297 EXPECT_EQ(2 * SiteEngagementScore::GetMaxPointsPerDay(), score_.GetScore()); 303 EXPECT_EQ(2 * SiteEngagementScore::GetMaxPointsPerDay(),
304 score_.GetTotalScore());
298 } 305 }
299 306
300 // Test that scores are read / written correctly from / to empty score 307 // Test that scores are read / written correctly from / to empty score
301 // dictionaries. 308 // dictionaries.
302 TEST_F(SiteEngagementScoreTest, EmptyDictionary) { 309 TEST_F(SiteEngagementScoreTest, EmptyDictionary) {
303 std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); 310 std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
304 TestScoreInitializesAndUpdates(std::move(dict), 0, 0, base::Time()); 311 TestScoreInitializesAndUpdates(std::move(dict), 0, 0, base::Time());
305 } 312 }
306 313
307 // Test that scores are read / written correctly from / to partially empty 314 // Test that scores are read / written correctly from / to partially empty
(...skipping 24 matching lines...) Expand all
332 SiteEngagementScore score1(&test_clock_, GURL(), 339 SiteEngagementScore score1(&test_clock_, GURL(),
333 std::unique_ptr<base::DictionaryValue>()); 340 std::unique_ptr<base::DictionaryValue>());
334 SiteEngagementScore score2(&test_clock_, GURL(), 341 SiteEngagementScore score2(&test_clock_, GURL(),
335 std::unique_ptr<base::DictionaryValue>()); 342 std::unique_ptr<base::DictionaryValue>());
336 base::Time current_day = GetReferenceTime(); 343 base::Time current_day = GetReferenceTime();
337 344
338 test_clock_.SetNow(current_day); 345 test_clock_.SetNow(current_day);
339 346
340 // The first engagement event gets the bonus. 347 // The first engagement event gets the bonus.
341 score1.AddPoints(0.5); 348 score1.AddPoints(0.5);
342 EXPECT_EQ(1.0, score1.GetScore()); 349 EXPECT_EQ(1.0, score1.GetTotalScore());
343 350
344 // Subsequent events do not. 351 // Subsequent events do not.
345 score1.AddPoints(0.5); 352 score1.AddPoints(0.5);
346 EXPECT_EQ(1.5, score1.GetScore()); 353 EXPECT_EQ(1.5, score1.GetTotalScore());
347 354
348 // Bonuses are awarded independently between scores. 355 // Bonuses are awarded independently between scores.
349 score2.AddPoints(1.0); 356 score2.AddPoints(1.0);
350 EXPECT_EQ(1.5, score2.GetScore()); 357 EXPECT_EQ(1.5, score2.GetTotalScore());
351 score2.AddPoints(1.0); 358 score2.AddPoints(1.0);
352 EXPECT_EQ(2.5, score2.GetScore()); 359 EXPECT_EQ(2.5, score2.GetTotalScore());
353 360
354 test_clock_.SetNow(current_day + base::TimeDelta::FromDays(1)); 361 test_clock_.SetNow(current_day + base::TimeDelta::FromDays(1));
355 362
356 // The first event for the next day gets the bonus. 363 // The first event for the next day gets the bonus.
357 score1.AddPoints(0.5); 364 score1.AddPoints(0.5);
358 EXPECT_EQ(2.5, score1.GetScore()); 365 EXPECT_EQ(2.5, score1.GetTotalScore());
359 366
360 // Subsequent events do not. 367 // Subsequent events do not.
361 score1.AddPoints(0.5); 368 score1.AddPoints(0.5);
362 EXPECT_EQ(3.0, score1.GetScore()); 369 EXPECT_EQ(3.0, score1.GetTotalScore());
363 370
364 score2.AddPoints(1.0); 371 score2.AddPoints(1.0);
365 EXPECT_EQ(4.0, score2.GetScore()); 372 EXPECT_EQ(4.0, score2.GetTotalScore());
366 score2.AddPoints(1.0); 373 score2.AddPoints(1.0);
367 EXPECT_EQ(5.0, score2.GetScore()); 374 EXPECT_EQ(5.0, score2.GetTotalScore());
368 } 375 }
369 376
370 // Test that resetting a score has the correct properties. 377 // Test that resetting a score has the correct properties.
371 TEST_F(SiteEngagementScoreTest, Reset) { 378 TEST_F(SiteEngagementScoreTest, Reset) {
372 base::Time current_day = GetReferenceTime(); 379 base::Time current_day = GetReferenceTime();
373 380
374 test_clock_.SetNow(current_day); 381 test_clock_.SetNow(current_day);
375 score_.AddPoints(SiteEngagementScore::GetNavigationPoints()); 382 score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
376 EXPECT_EQ(SiteEngagementScore::GetNavigationPoints(), score_.GetScore()); 383 EXPECT_EQ(SiteEngagementScore::GetNavigationPoints(), score_.GetTotalScore());
377 384
378 current_day += base::TimeDelta::FromDays(7); 385 current_day += base::TimeDelta::FromDays(7);
379 test_clock_.SetNow(current_day); 386 test_clock_.SetNow(current_day);
380 387
381 score_.Reset(20.0, current_day); 388 score_.Reset(20.0, current_day);
382 EXPECT_DOUBLE_EQ(20.0, score_.GetScore()); 389 EXPECT_DOUBLE_EQ(20.0, score_.GetTotalScore());
383 EXPECT_DOUBLE_EQ(0, score_.points_added_today_); 390 EXPECT_DOUBLE_EQ(0, score_.points_added_today_);
384 EXPECT_EQ(current_day, score_.last_engagement_time_); 391 EXPECT_EQ(current_day, score_.last_engagement_time_);
385 EXPECT_TRUE(score_.last_shortcut_launch_time_.is_null()); 392 EXPECT_TRUE(score_.last_shortcut_launch_time_.is_null());
386 393
387 // Adding points after the reset should work as normal. 394 // Adding points after the reset should work as normal.
388 score_.AddPoints(5); 395 score_.AddPoints(5);
389 EXPECT_EQ(25.0, score_.GetScore()); 396 EXPECT_EQ(25.0, score_.GetTotalScore());
390 397
391 // The decay should happen one decay period from the current time. 398 // The decay should happen one decay period from the current time.
392 test_clock_.SetNow(current_day + 399 test_clock_.SetNow(current_day +
393 base::TimeDelta::FromHours( 400 base::TimeDelta::FromHours(
394 SiteEngagementScore::GetDecayPeriodInHours() + 1)); 401 SiteEngagementScore::GetDecayPeriodInHours() + 1));
395 EXPECT_EQ(25.0 - SiteEngagementScore::GetDecayPoints(), score_.GetScore()); 402 EXPECT_EQ(25.0 - SiteEngagementScore::GetDecayPoints(),
403 score_.GetTotalScore());
396 404
397 // Ensure that manually setting a time works as expected. 405 // Ensure that manually setting a time works as expected.
398 score_.AddPoints(5); 406 score_.AddPoints(5);
399 test_clock_.SetNow(GetReferenceTime()); 407 test_clock_.SetNow(GetReferenceTime());
400 base::Time now = test_clock_.Now(); 408 base::Time now = test_clock_.Now();
401 score_.Reset(10.0, now); 409 score_.Reset(10.0, now);
402 410
403 EXPECT_DOUBLE_EQ(10.0, score_.GetScore()); 411 EXPECT_DOUBLE_EQ(10.0, score_.GetTotalScore());
404 EXPECT_DOUBLE_EQ(0, score_.points_added_today_); 412 EXPECT_DOUBLE_EQ(0, score_.points_added_today_);
405 EXPECT_EQ(now, score_.last_engagement_time_); 413 EXPECT_EQ(now, score_.last_engagement_time_);
406 EXPECT_TRUE(score_.last_shortcut_launch_time_.is_null()); 414 EXPECT_TRUE(score_.last_shortcut_launch_time_.is_null());
407 415
408 base::Time old_now = test_clock_.Now(); 416 base::Time old_now = test_clock_.Now();
409 417
410 score_.set_last_shortcut_launch_time(test_clock_.Now()); 418 score_.set_last_shortcut_launch_time(test_clock_.Now());
411 test_clock_.SetNow(GetReferenceTime() + base::TimeDelta::FromDays(3)); 419 test_clock_.SetNow(GetReferenceTime() + base::TimeDelta::FromDays(3));
412 now = test_clock_.Now(); 420 now = test_clock_.Now();
413 score_.Reset(15.0, now); 421 score_.Reset(15.0, now);
414 422
415 // 5 bonus from the last shortcut launch. 423 // 5 bonus from the last shortcut launch.
416 EXPECT_DOUBLE_EQ(20.0, score_.GetScore()); 424 EXPECT_DOUBLE_EQ(20.0, score_.GetTotalScore());
417 EXPECT_DOUBLE_EQ(0, score_.points_added_today_); 425 EXPECT_DOUBLE_EQ(0, score_.points_added_today_);
418 EXPECT_EQ(now, score_.last_engagement_time_); 426 EXPECT_EQ(now, score_.last_engagement_time_);
419 EXPECT_EQ(old_now, score_.last_shortcut_launch_time_); 427 EXPECT_EQ(old_now, score_.last_shortcut_launch_time_);
420 } 428 }
421 429
422 // Test proportional decay. 430 // Test proportional decay.
423 TEST_F(SiteEngagementScoreTest, ProportionalDecay) { 431 TEST_F(SiteEngagementScoreTest, ProportionalDecay) {
424 SetParamValue(SiteEngagementScore::DECAY_PROPORTION, 0.5); 432 SetParamValue(SiteEngagementScore::DECAY_PROPORTION, 0.5);
425 SetParamValue(SiteEngagementScore::DECAY_POINTS, 0); 433 SetParamValue(SiteEngagementScore::DECAY_POINTS, 0);
426 SetParamValue(SiteEngagementScore::MAX_POINTS_PER_DAY, 20); 434 SetParamValue(SiteEngagementScore::MAX_POINTS_PER_DAY, 20);
427 base::Time current_day = GetReferenceTime(); 435 base::Time current_day = GetReferenceTime();
428 test_clock_.SetNow(current_day); 436 test_clock_.SetNow(current_day);
429 437
430 // Single decay period, expect the score to be halved once. 438 // Single decay period, expect the score to be halved once.
431 score_.AddPoints(2.0); 439 score_.AddPoints(2.0);
432 current_day += base::TimeDelta::FromDays(7); 440 current_day += base::TimeDelta::FromDays(7);
433 test_clock_.SetNow(current_day); 441 test_clock_.SetNow(current_day);
434 EXPECT_DOUBLE_EQ(1.0, score_.GetScore()); 442 EXPECT_DOUBLE_EQ(1.0, score_.GetTotalScore());
435 443
436 // 3 decay periods, expect the score to be halved 3 times. 444 // 3 decay periods, expect the score to be halved 3 times.
437 score_.AddPoints(15.0); 445 score_.AddPoints(15.0);
438 current_day += base::TimeDelta::FromDays(21); 446 current_day += base::TimeDelta::FromDays(21);
439 test_clock_.SetNow(current_day); 447 test_clock_.SetNow(current_day);
440 EXPECT_DOUBLE_EQ(2.0, score_.GetScore()); 448 EXPECT_DOUBLE_EQ(2.0, score_.GetTotalScore());
441 449
442 // Ensure point removal happens after proportional decay. 450 // Ensure point removal happens after proportional decay.
443 score_.AddPoints(4.0); 451 score_.AddPoints(4.0);
444 EXPECT_DOUBLE_EQ(6.0, score_.GetScore()); 452 EXPECT_DOUBLE_EQ(6.0, score_.GetTotalScore());
445 SetParamValue(SiteEngagementScore::DECAY_POINTS, 2.0); 453 SetParamValue(SiteEngagementScore::DECAY_POINTS, 2.0);
446 current_day += base::TimeDelta::FromDays(7); 454 current_day += base::TimeDelta::FromDays(7);
447 test_clock_.SetNow(current_day); 455 test_clock_.SetNow(current_day);
448 EXPECT_NEAR(1.0, score_.GetScore(), kMaxRoundingDeviation); 456 EXPECT_NEAR(1.0, score_.GetTotalScore(), kMaxRoundingDeviation);
449 } 457 }
458
459 // Verify that GetDetails fills out all fields correctly.
460 TEST_F(SiteEngagementScoreTest, GetDetails) {
461 // Advance the clock, otherwise Now() is the same as the null Time value.
462 test_clock_.Advance(base::TimeDelta::FromDays(365));
463
464 GURL url("http://www.google.com/");
465
466 // Replace |score_| with one with an actual URL, and with a settings map.
467 HostContentSettingsMap* settings_map =
468 HostContentSettingsMapFactory::GetForProfile(profile());
469 score_ = SiteEngagementScore(&test_clock_, url, settings_map);
470
471 // Initially all component scores should be zero.
472 mojom::SiteEngagementDetails details = score_.GetDetails();
473 EXPECT_DOUBLE_EQ(0.0, details.total_score);
474 EXPECT_DOUBLE_EQ(0.0, details.installed_bonus);
475 EXPECT_DOUBLE_EQ(0.0, details.notifications_bonus);
476 EXPECT_DOUBLE_EQ(0.0, details.base_score);
477 EXPECT_EQ(url, details.origin);
478
479 // Add notifications permission and verify that impacts the correct bonus,
480 // and the total.
481 settings_map->SetContentSettingDefaultScope(
482 url, url, CONTENT_SETTINGS_TYPE_NOTIFICATIONS, std::string(),
483 CONTENT_SETTING_ALLOW);
484 details = score_.GetDetails();
485 EXPECT_DOUBLE_EQ(details.notifications_bonus, details.total_score);
486 EXPECT_DOUBLE_EQ(0.0, details.installed_bonus);
487 EXPECT_LT(0.0, details.notifications_bonus);
488 EXPECT_DOUBLE_EQ(0.0, details.base_score);
489
490 // Simulate the app having been launched.
491 score_.set_last_shortcut_launch_time(test_clock_.Now());
492 details = score_.GetDetails();
493 EXPECT_DOUBLE_EQ(details.installed_bonus + details.notifications_bonus,
494 details.total_score);
495 EXPECT_LT(0.0, details.installed_bonus);
496 EXPECT_LT(0.0, details.notifications_bonus);
497 EXPECT_DOUBLE_EQ(0.0, details.base_score);
498 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698