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

Side by Side Diff: chrome/browser/engagement/site_engagement_score_unittest.cc

Issue 2788413003: Add SiteEngagementService::GetAllDetails(), to return detailed scores. (Closed)
Patch Set: Rename score->total_score and GetScore->GetTotal 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"
(...skipping 96 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 107 // Accumulate score many times on the same day. Ensure each time the score goes
108 // up, but not more than the maximum per day. 108 // up, but not more than the maximum per day.
109 TEST_F(SiteEngagementScoreTest, AccumulateOnSameDay) { 109 TEST_F(SiteEngagementScoreTest, AccumulateOnSameDay) {
110 base::Time reference_time = GetReferenceTime(); 110 base::Time reference_time = GetReferenceTime();
111 111
112 test_clock_.SetNow(reference_time); 112 test_clock_.SetNow(reference_time);
113 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i) { 113 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i) {
114 score_.AddPoints(SiteEngagementScore::GetNavigationPoints()); 114 score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
115 EXPECT_EQ(std::min(SiteEngagementScore::GetMaxPointsPerDay(), 115 EXPECT_EQ(std::min(SiteEngagementScore::GetMaxPointsPerDay(),
116 (i + 1) * SiteEngagementScore::GetNavigationPoints()), 116 (i + 1) * SiteEngagementScore::GetNavigationPoints()),
117 score_.GetScore()); 117 score_.GetTotal());
118 } 118 }
119 119
120 EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetScore()); 120 EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetTotal());
121 } 121 }
122 122
123 // Accumulate on the first day to max that day's engagement, then accumulate on 123 // Accumulate on the first day to max that day's engagement, then accumulate on
124 // a different day. 124 // a different day.
125 TEST_F(SiteEngagementScoreTest, AccumulateOnTwoDays) { 125 TEST_F(SiteEngagementScoreTest, AccumulateOnTwoDays) {
126 base::Time reference_time = GetReferenceTime(); 126 base::Time reference_time = GetReferenceTime();
127 base::Time later_date = reference_time + base::TimeDelta::FromDays(2); 127 base::Time later_date = reference_time + base::TimeDelta::FromDays(2);
128 128
129 test_clock_.SetNow(reference_time); 129 test_clock_.SetNow(reference_time);
130 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i) 130 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i)
131 score_.AddPoints(SiteEngagementScore::GetNavigationPoints()); 131 score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
132 132
133 EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetScore()); 133 EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetTotal());
134 134
135 test_clock_.SetNow(later_date); 135 test_clock_.SetNow(later_date);
136 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i) { 136 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i) {
137 score_.AddPoints(SiteEngagementScore::GetNavigationPoints()); 137 score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
138 double day_score = 138 double day_score =
139 std::min(SiteEngagementScore::GetMaxPointsPerDay(), 139 std::min(SiteEngagementScore::GetMaxPointsPerDay(),
140 (i + 1) * SiteEngagementScore::GetNavigationPoints()); 140 (i + 1) * SiteEngagementScore::GetNavigationPoints());
141 EXPECT_EQ(day_score + SiteEngagementScore::GetMaxPointsPerDay(), 141 EXPECT_EQ(day_score + SiteEngagementScore::GetMaxPointsPerDay(),
142 score_.GetScore()); 142 score_.GetTotal());
143 } 143 }
144 144
145 EXPECT_EQ(2 * SiteEngagementScore::GetMaxPointsPerDay(), score_.GetScore()); 145 EXPECT_EQ(2 * SiteEngagementScore::GetMaxPointsPerDay(), score_.GetTotal());
146 } 146 }
147 147
148 // Accumulate score on many consecutive days and ensure the score doesn't exceed 148 // Accumulate score on many consecutive days and ensure the score doesn't exceed
149 // the maximum allowed. 149 // the maximum allowed.
150 TEST_F(SiteEngagementScoreTest, AccumulateALotOnManyDays) { 150 TEST_F(SiteEngagementScoreTest, AccumulateALotOnManyDays) {
151 base::Time current_day = GetReferenceTime(); 151 base::Time current_day = GetReferenceTime();
152 152
153 for (int i = 0; i < kMoreDaysThanNeededToMaxTotalEngagement; ++i) { 153 for (int i = 0; i < kMoreDaysThanNeededToMaxTotalEngagement; ++i) {
154 current_day += base::TimeDelta::FromDays(1); 154 current_day += base::TimeDelta::FromDays(1);
155 test_clock_.SetNow(current_day); 155 test_clock_.SetNow(current_day);
156 for (int j = 0; j < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++j) 156 for (int j = 0; j < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++j)
157 score_.AddPoints(SiteEngagementScore::GetNavigationPoints()); 157 score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
158 158
159 EXPECT_EQ(std::min(SiteEngagementScore::kMaxPoints, 159 EXPECT_EQ(std::min(SiteEngagementScore::kMaxPoints,
160 (i + 1) * SiteEngagementScore::GetMaxPointsPerDay()), 160 (i + 1) * SiteEngagementScore::GetMaxPointsPerDay()),
161 score_.GetScore()); 161 score_.GetTotal());
162 } 162 }
163 163
164 EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetScore()); 164 EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetTotal());
165 } 165 }
166 166
167 // Accumulate a little on many consecutive days and ensure the score doesn't 167 // Accumulate a little on many consecutive days and ensure the score doesn't
168 // exceed the maximum allowed. 168 // exceed the maximum allowed.
169 TEST_F(SiteEngagementScoreTest, AccumulateALittleOnManyDays) { 169 TEST_F(SiteEngagementScoreTest, AccumulateALittleOnManyDays) {
170 base::Time current_day = GetReferenceTime(); 170 base::Time current_day = GetReferenceTime();
171 171
172 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxTotalEngagement; ++i) { 172 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxTotalEngagement; ++i) {
173 current_day += base::TimeDelta::FromDays(1); 173 current_day += base::TimeDelta::FromDays(1);
174 test_clock_.SetNow(current_day); 174 test_clock_.SetNow(current_day);
175 175
176 for (int j = 0; j < kLessAccumulationsThanNeededToMaxDailyEngagement; ++j) 176 for (int j = 0; j < kLessAccumulationsThanNeededToMaxDailyEngagement; ++j)
177 score_.AddPoints(SiteEngagementScore::GetNavigationPoints()); 177 score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
178 178
179 EXPECT_EQ( 179 EXPECT_EQ(
180 std::min(SiteEngagementScore::kMaxPoints, 180 std::min(SiteEngagementScore::kMaxPoints,
181 (i + 1) * kLessAccumulationsThanNeededToMaxDailyEngagement * 181 (i + 1) * kLessAccumulationsThanNeededToMaxDailyEngagement *
182 SiteEngagementScore::GetNavigationPoints()), 182 SiteEngagementScore::GetNavigationPoints()),
183 score_.GetScore()); 183 score_.GetTotal());
184 } 184 }
185 185
186 EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetScore()); 186 EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetTotal());
187 } 187 }
188 188
189 // Accumulate a bit, then check the score decays properly for a range of times. 189 // Accumulate a bit, then check the score decays properly for a range of times.
190 TEST_F(SiteEngagementScoreTest, ScoresDecayOverTime) { 190 TEST_F(SiteEngagementScoreTest, ScoresDecayOverTime) {
191 base::Time current_day = GetReferenceTime(); 191 base::Time current_day = GetReferenceTime();
192 192
193 // First max the score. 193 // First max the score.
194 for (int i = 0; i < kMoreDaysThanNeededToMaxTotalEngagement; ++i) { 194 for (int i = 0; i < kMoreDaysThanNeededToMaxTotalEngagement; ++i) {
195 current_day += base::TimeDelta::FromDays(1); 195 current_day += base::TimeDelta::FromDays(1);
196 test_clock_.SetNow(current_day); 196 test_clock_.SetNow(current_day);
197 197
198 for (int j = 0; j < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++j) 198 for (int j = 0; j < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++j)
199 score_.AddPoints(SiteEngagementScore::GetNavigationPoints()); 199 score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
200 } 200 }
201 201
202 EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetScore()); 202 EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetTotal());
203 203
204 // The score should not have decayed before the first decay period has 204 // The score should not have decayed before the first decay period has
205 // elapsed. 205 // elapsed.
206 test_clock_.SetNow(current_day + 206 test_clock_.SetNow(current_day +
207 base::TimeDelta::FromHours( 207 base::TimeDelta::FromHours(
208 SiteEngagementScore::GetDecayPeriodInHours() - 1)); 208 SiteEngagementScore::GetDecayPeriodInHours() - 1));
209 EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetScore()); 209 EXPECT_EQ(SiteEngagementScore::kMaxPoints, score_.GetTotal());
210 210
211 // The score should have decayed by one chunk after one decay period has 211 // The score should have decayed by one chunk after one decay period has
212 // elapsed. 212 // elapsed.
213 test_clock_.SetNow( 213 test_clock_.SetNow(
214 current_day + 214 current_day +
215 base::TimeDelta::FromHours(SiteEngagementScore::GetDecayPeriodInHours())); 215 base::TimeDelta::FromHours(SiteEngagementScore::GetDecayPeriodInHours()));
216 EXPECT_EQ( 216 EXPECT_EQ(
217 SiteEngagementScore::kMaxPoints - SiteEngagementScore::GetDecayPoints(), 217 SiteEngagementScore::kMaxPoints - SiteEngagementScore::GetDecayPoints(),
218 score_.GetScore()); 218 score_.GetTotal());
219 219
220 // The score should have decayed by the right number of chunks after a few 220 // The score should have decayed by the right number of chunks after a few
221 // decay periods have elapsed. 221 // decay periods have elapsed.
222 test_clock_.SetNow( 222 test_clock_.SetNow(
223 current_day + 223 current_day +
224 base::TimeDelta::FromHours(kLessPeriodsThanNeededToDecayMaxScore * 224 base::TimeDelta::FromHours(kLessPeriodsThanNeededToDecayMaxScore *
225 SiteEngagementScore::GetDecayPeriodInHours())); 225 SiteEngagementScore::GetDecayPeriodInHours()));
226 EXPECT_EQ(SiteEngagementScore::kMaxPoints - 226 EXPECT_EQ(SiteEngagementScore::kMaxPoints -
227 kLessPeriodsThanNeededToDecayMaxScore * 227 kLessPeriodsThanNeededToDecayMaxScore *
228 SiteEngagementScore::GetDecayPoints(), 228 SiteEngagementScore::GetDecayPoints(),
229 score_.GetScore()); 229 score_.GetTotal());
230 230
231 // The score should not decay below zero. 231 // The score should not decay below zero.
232 test_clock_.SetNow( 232 test_clock_.SetNow(
233 current_day + 233 current_day +
234 base::TimeDelta::FromHours(kMorePeriodsThanNeededToDecayMaxScore * 234 base::TimeDelta::FromHours(kMorePeriodsThanNeededToDecayMaxScore *
235 SiteEngagementScore::GetDecayPeriodInHours())); 235 SiteEngagementScore::GetDecayPeriodInHours()));
236 EXPECT_EQ(0, score_.GetScore()); 236 EXPECT_EQ(0, score_.GetTotal());
237 } 237 }
238 238
239 // Test that any expected decays are applied before adding points. 239 // Test that any expected decays are applied before adding points.
240 TEST_F(SiteEngagementScoreTest, DecaysAppliedBeforeAdd) { 240 TEST_F(SiteEngagementScoreTest, DecaysAppliedBeforeAdd) {
241 base::Time current_day = GetReferenceTime(); 241 base::Time current_day = GetReferenceTime();
242 242
243 // Get the score up to something that can handle a bit of decay before 243 // Get the score up to something that can handle a bit of decay before
244 for (int i = 0; i < kLessDaysThanNeededToMaxTotalEngagement; ++i) { 244 for (int i = 0; i < kLessDaysThanNeededToMaxTotalEngagement; ++i) {
245 current_day += base::TimeDelta::FromDays(1); 245 current_day += base::TimeDelta::FromDays(1);
246 test_clock_.SetNow(current_day); 246 test_clock_.SetNow(current_day);
247 247
248 for (int j = 0; j < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++j) 248 for (int j = 0; j < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++j)
249 score_.AddPoints(SiteEngagementScore::GetNavigationPoints()); 249 score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
250 } 250 }
251 251
252 double initial_score = kLessDaysThanNeededToMaxTotalEngagement * 252 double initial_score = kLessDaysThanNeededToMaxTotalEngagement *
253 SiteEngagementScore::GetMaxPointsPerDay(); 253 SiteEngagementScore::GetMaxPointsPerDay();
254 EXPECT_EQ(initial_score, score_.GetScore()); 254 EXPECT_EQ(initial_score, score_.GetTotal());
255 255
256 // Go forward a few decay periods. 256 // Go forward a few decay periods.
257 test_clock_.SetNow( 257 test_clock_.SetNow(
258 current_day + 258 current_day +
259 base::TimeDelta::FromHours(kLessPeriodsThanNeededToDecayMaxScore * 259 base::TimeDelta::FromHours(kLessPeriodsThanNeededToDecayMaxScore *
260 SiteEngagementScore::GetDecayPeriodInHours())); 260 SiteEngagementScore::GetDecayPeriodInHours()));
261 261
262 double decayed_score = initial_score - 262 double decayed_score = initial_score -
263 kLessPeriodsThanNeededToDecayMaxScore * 263 kLessPeriodsThanNeededToDecayMaxScore *
264 SiteEngagementScore::GetDecayPoints(); 264 SiteEngagementScore::GetDecayPoints();
265 EXPECT_EQ(decayed_score, score_.GetScore()); 265 EXPECT_EQ(decayed_score, score_.GetTotal());
266 266
267 // Now add some points. 267 // Now add some points.
268 score_.AddPoints(SiteEngagementScore::GetNavigationPoints()); 268 score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
269 EXPECT_EQ(decayed_score + SiteEngagementScore::GetNavigationPoints(), 269 EXPECT_EQ(decayed_score + SiteEngagementScore::GetNavigationPoints(),
270 score_.GetScore()); 270 score_.GetTotal());
271 } 271 }
272 272
273 // Test that going back in time is handled properly. 273 // Test that going back in time is handled properly.
274 TEST_F(SiteEngagementScoreTest, GoBackInTime) { 274 TEST_F(SiteEngagementScoreTest, GoBackInTime) {
275 base::Time current_day = GetReferenceTime(); 275 base::Time current_day = GetReferenceTime();
276 276
277 test_clock_.SetNow(current_day); 277 test_clock_.SetNow(current_day);
278 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i) 278 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i)
279 score_.AddPoints(SiteEngagementScore::GetNavigationPoints()); 279 score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
280 280
281 EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetScore()); 281 EXPECT_EQ(SiteEngagementScore::GetMaxPointsPerDay(), score_.GetTotal());
282 282
283 // Adding to the score on an earlier date should be treated like another day, 283 // Adding to the score on an earlier date should be treated like another day,
284 // and should not cause any decay. 284 // and should not cause any decay.
285 test_clock_.SetNow(current_day - base::TimeDelta::FromDays( 285 test_clock_.SetNow(current_day - base::TimeDelta::FromDays(
286 kMorePeriodsThanNeededToDecayMaxScore * 286 kMorePeriodsThanNeededToDecayMaxScore *
287 SiteEngagementScore::GetDecayPoints())); 287 SiteEngagementScore::GetDecayPoints()));
288 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i) { 288 for (int i = 0; i < kMoreAccumulationsThanNeededToMaxDailyEngagement; ++i) {
289 score_.AddPoints(SiteEngagementScore::GetNavigationPoints()); 289 score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
290 double day_score = 290 double day_score =
291 std::min(SiteEngagementScore::GetMaxPointsPerDay(), 291 std::min(SiteEngagementScore::GetMaxPointsPerDay(),
292 (i + 1) * SiteEngagementScore::GetNavigationPoints()); 292 (i + 1) * SiteEngagementScore::GetNavigationPoints());
293 EXPECT_EQ(day_score + SiteEngagementScore::GetMaxPointsPerDay(), 293 EXPECT_EQ(day_score + SiteEngagementScore::GetMaxPointsPerDay(),
294 score_.GetScore()); 294 score_.GetTotal());
295 } 295 }
296 296
297 EXPECT_EQ(2 * SiteEngagementScore::GetMaxPointsPerDay(), score_.GetScore()); 297 EXPECT_EQ(2 * SiteEngagementScore::GetMaxPointsPerDay(), score_.GetTotal());
298 } 298 }
299 299
300 // Test that scores are read / written correctly from / to empty score 300 // Test that scores are read / written correctly from / to empty score
301 // dictionaries. 301 // dictionaries.
302 TEST_F(SiteEngagementScoreTest, EmptyDictionary) { 302 TEST_F(SiteEngagementScoreTest, EmptyDictionary) {
303 std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue()); 303 std::unique_ptr<base::DictionaryValue> dict(new base::DictionaryValue());
304 TestScoreInitializesAndUpdates(std::move(dict), 0, 0, base::Time()); 304 TestScoreInitializesAndUpdates(std::move(dict), 0, 0, base::Time());
305 } 305 }
306 306
307 // Test that scores are read / written correctly from / to partially empty 307 // Test that scores are read / written correctly from / to partially empty
(...skipping 24 matching lines...) Expand all
332 SiteEngagementScore score1(&test_clock_, GURL(), 332 SiteEngagementScore score1(&test_clock_, GURL(),
333 std::unique_ptr<base::DictionaryValue>()); 333 std::unique_ptr<base::DictionaryValue>());
334 SiteEngagementScore score2(&test_clock_, GURL(), 334 SiteEngagementScore score2(&test_clock_, GURL(),
335 std::unique_ptr<base::DictionaryValue>()); 335 std::unique_ptr<base::DictionaryValue>());
336 base::Time current_day = GetReferenceTime(); 336 base::Time current_day = GetReferenceTime();
337 337
338 test_clock_.SetNow(current_day); 338 test_clock_.SetNow(current_day);
339 339
340 // The first engagement event gets the bonus. 340 // The first engagement event gets the bonus.
341 score1.AddPoints(0.5); 341 score1.AddPoints(0.5);
342 EXPECT_EQ(1.0, score1.GetScore()); 342 EXPECT_EQ(1.0, score1.GetTotal());
343 343
344 // Subsequent events do not. 344 // Subsequent events do not.
345 score1.AddPoints(0.5); 345 score1.AddPoints(0.5);
346 EXPECT_EQ(1.5, score1.GetScore()); 346 EXPECT_EQ(1.5, score1.GetTotal());
347 347
348 // Bonuses are awarded independently between scores. 348 // Bonuses are awarded independently between scores.
349 score2.AddPoints(1.0); 349 score2.AddPoints(1.0);
350 EXPECT_EQ(1.5, score2.GetScore()); 350 EXPECT_EQ(1.5, score2.GetTotal());
351 score2.AddPoints(1.0); 351 score2.AddPoints(1.0);
352 EXPECT_EQ(2.5, score2.GetScore()); 352 EXPECT_EQ(2.5, score2.GetTotal());
353 353
354 test_clock_.SetNow(current_day + base::TimeDelta::FromDays(1)); 354 test_clock_.SetNow(current_day + base::TimeDelta::FromDays(1));
355 355
356 // The first event for the next day gets the bonus. 356 // The first event for the next day gets the bonus.
357 score1.AddPoints(0.5); 357 score1.AddPoints(0.5);
358 EXPECT_EQ(2.5, score1.GetScore()); 358 EXPECT_EQ(2.5, score1.GetTotal());
359 359
360 // Subsequent events do not. 360 // Subsequent events do not.
361 score1.AddPoints(0.5); 361 score1.AddPoints(0.5);
362 EXPECT_EQ(3.0, score1.GetScore()); 362 EXPECT_EQ(3.0, score1.GetTotal());
363 363
364 score2.AddPoints(1.0); 364 score2.AddPoints(1.0);
365 EXPECT_EQ(4.0, score2.GetScore()); 365 EXPECT_EQ(4.0, score2.GetTotal());
366 score2.AddPoints(1.0); 366 score2.AddPoints(1.0);
367 EXPECT_EQ(5.0, score2.GetScore()); 367 EXPECT_EQ(5.0, score2.GetTotal());
368 } 368 }
369 369
370 // Test that resetting a score has the correct properties. 370 // Test that resetting a score has the correct properties.
371 TEST_F(SiteEngagementScoreTest, Reset) { 371 TEST_F(SiteEngagementScoreTest, Reset) {
372 base::Time current_day = GetReferenceTime(); 372 base::Time current_day = GetReferenceTime();
373 373
374 test_clock_.SetNow(current_day); 374 test_clock_.SetNow(current_day);
375 score_.AddPoints(SiteEngagementScore::GetNavigationPoints()); 375 score_.AddPoints(SiteEngagementScore::GetNavigationPoints());
376 EXPECT_EQ(SiteEngagementScore::GetNavigationPoints(), score_.GetScore()); 376 EXPECT_EQ(SiteEngagementScore::GetNavigationPoints(), score_.GetTotal());
377 377
378 current_day += base::TimeDelta::FromDays(7); 378 current_day += base::TimeDelta::FromDays(7);
379 test_clock_.SetNow(current_day); 379 test_clock_.SetNow(current_day);
380 380
381 score_.Reset(20.0, current_day); 381 score_.Reset(20.0, current_day);
382 EXPECT_DOUBLE_EQ(20.0, score_.GetScore()); 382 EXPECT_DOUBLE_EQ(20.0, score_.GetTotal());
383 EXPECT_DOUBLE_EQ(0, score_.points_added_today_); 383 EXPECT_DOUBLE_EQ(0, score_.points_added_today_);
384 EXPECT_EQ(current_day, score_.last_engagement_time_); 384 EXPECT_EQ(current_day, score_.last_engagement_time_);
385 EXPECT_TRUE(score_.last_shortcut_launch_time_.is_null()); 385 EXPECT_TRUE(score_.last_shortcut_launch_time_.is_null());
386 386
387 // Adding points after the reset should work as normal. 387 // Adding points after the reset should work as normal.
388 score_.AddPoints(5); 388 score_.AddPoints(5);
389 EXPECT_EQ(25.0, score_.GetScore()); 389 EXPECT_EQ(25.0, score_.GetTotal());
390 390
391 // The decay should happen one decay period from the current time. 391 // The decay should happen one decay period from the current time.
392 test_clock_.SetNow(current_day + 392 test_clock_.SetNow(current_day +
393 base::TimeDelta::FromHours( 393 base::TimeDelta::FromHours(
394 SiteEngagementScore::GetDecayPeriodInHours() + 1)); 394 SiteEngagementScore::GetDecayPeriodInHours() + 1));
395 EXPECT_EQ(25.0 - SiteEngagementScore::GetDecayPoints(), score_.GetScore()); 395 EXPECT_EQ(25.0 - SiteEngagementScore::GetDecayPoints(), score_.GetTotal());
396 396
397 // Ensure that manually setting a time works as expected. 397 // Ensure that manually setting a time works as expected.
398 score_.AddPoints(5); 398 score_.AddPoints(5);
399 test_clock_.SetNow(GetReferenceTime()); 399 test_clock_.SetNow(GetReferenceTime());
400 base::Time now = test_clock_.Now(); 400 base::Time now = test_clock_.Now();
401 score_.Reset(10.0, now); 401 score_.Reset(10.0, now);
402 402
403 EXPECT_DOUBLE_EQ(10.0, score_.GetScore()); 403 EXPECT_DOUBLE_EQ(10.0, score_.GetTotal());
404 EXPECT_DOUBLE_EQ(0, score_.points_added_today_); 404 EXPECT_DOUBLE_EQ(0, score_.points_added_today_);
405 EXPECT_EQ(now, score_.last_engagement_time_); 405 EXPECT_EQ(now, score_.last_engagement_time_);
406 EXPECT_TRUE(score_.last_shortcut_launch_time_.is_null()); 406 EXPECT_TRUE(score_.last_shortcut_launch_time_.is_null());
407 407
408 base::Time old_now = test_clock_.Now(); 408 base::Time old_now = test_clock_.Now();
409 409
410 score_.set_last_shortcut_launch_time(test_clock_.Now()); 410 score_.set_last_shortcut_launch_time(test_clock_.Now());
411 test_clock_.SetNow(GetReferenceTime() + base::TimeDelta::FromDays(3)); 411 test_clock_.SetNow(GetReferenceTime() + base::TimeDelta::FromDays(3));
412 now = test_clock_.Now(); 412 now = test_clock_.Now();
413 score_.Reset(15.0, now); 413 score_.Reset(15.0, now);
414 414
415 // 5 bonus from the last shortcut launch. 415 // 5 bonus from the last shortcut launch.
416 EXPECT_DOUBLE_EQ(20.0, score_.GetScore()); 416 EXPECT_DOUBLE_EQ(20.0, score_.GetTotal());
417 EXPECT_DOUBLE_EQ(0, score_.points_added_today_); 417 EXPECT_DOUBLE_EQ(0, score_.points_added_today_);
418 EXPECT_EQ(now, score_.last_engagement_time_); 418 EXPECT_EQ(now, score_.last_engagement_time_);
419 EXPECT_EQ(old_now, score_.last_shortcut_launch_time_); 419 EXPECT_EQ(old_now, score_.last_shortcut_launch_time_);
420 } 420 }
421 421
422 // Test proportional decay. 422 // Test proportional decay.
423 TEST_F(SiteEngagementScoreTest, ProportionalDecay) { 423 TEST_F(SiteEngagementScoreTest, ProportionalDecay) {
424 SetParamValue(SiteEngagementScore::DECAY_PROPORTION, 0.5); 424 SetParamValue(SiteEngagementScore::DECAY_PROPORTION, 0.5);
425 SetParamValue(SiteEngagementScore::DECAY_POINTS, 0); 425 SetParamValue(SiteEngagementScore::DECAY_POINTS, 0);
426 SetParamValue(SiteEngagementScore::MAX_POINTS_PER_DAY, 20); 426 SetParamValue(SiteEngagementScore::MAX_POINTS_PER_DAY, 20);
427 base::Time current_day = GetReferenceTime(); 427 base::Time current_day = GetReferenceTime();
428 test_clock_.SetNow(current_day); 428 test_clock_.SetNow(current_day);
429 429
430 // Single decay period, expect the score to be halved once. 430 // Single decay period, expect the score to be halved once.
431 score_.AddPoints(2.0); 431 score_.AddPoints(2.0);
432 current_day += base::TimeDelta::FromDays(7); 432 current_day += base::TimeDelta::FromDays(7);
433 test_clock_.SetNow(current_day); 433 test_clock_.SetNow(current_day);
434 EXPECT_DOUBLE_EQ(1.0, score_.GetScore()); 434 EXPECT_DOUBLE_EQ(1.0, score_.GetTotal());
435 435
436 // 3 decay periods, expect the score to be halved 3 times. 436 // 3 decay periods, expect the score to be halved 3 times.
437 score_.AddPoints(15.0); 437 score_.AddPoints(15.0);
438 current_day += base::TimeDelta::FromDays(21); 438 current_day += base::TimeDelta::FromDays(21);
439 test_clock_.SetNow(current_day); 439 test_clock_.SetNow(current_day);
440 EXPECT_DOUBLE_EQ(2.0, score_.GetScore()); 440 EXPECT_DOUBLE_EQ(2.0, score_.GetTotal());
441 441
442 // Ensure point removal happens after proportional decay. 442 // Ensure point removal happens after proportional decay.
443 score_.AddPoints(4.0); 443 score_.AddPoints(4.0);
444 EXPECT_DOUBLE_EQ(6.0, score_.GetScore()); 444 EXPECT_DOUBLE_EQ(6.0, score_.GetTotal());
445 SetParamValue(SiteEngagementScore::DECAY_POINTS, 2.0); 445 SetParamValue(SiteEngagementScore::DECAY_POINTS, 2.0);
446 current_day += base::TimeDelta::FromDays(7); 446 current_day += base::TimeDelta::FromDays(7);
447 test_clock_.SetNow(current_day); 447 test_clock_.SetNow(current_day);
448 EXPECT_NEAR(1.0, score_.GetScore(), kMaxRoundingDeviation); 448 EXPECT_NEAR(1.0, score_.GetTotal(), kMaxRoundingDeviation);
449 } 449 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698