| OLD | NEW |
| 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 26 matching lines...) Expand all Loading... |
| 37 base::Time out_time; | 37 base::Time out_time; |
| 38 EXPECT_TRUE( | 38 EXPECT_TRUE( |
| 39 base::Time::FromLocalExploded(exploded_reference_time, &out_time)); | 39 base::Time::FromLocalExploded(exploded_reference_time, &out_time)); |
| 40 return out_time; | 40 return out_time; |
| 41 } | 41 } |
| 42 | 42 |
| 43 } // namespace | 43 } // namespace |
| 44 | 44 |
| 45 class SiteEngagementScoreTest : public testing::Test { | 45 class SiteEngagementScoreTest : public testing::Test { |
| 46 public: | 46 public: |
| 47 SiteEngagementScoreTest() : score_(&test_clock_, nullptr) {} | 47 SiteEngagementScoreTest() : score_(&test_clock_, GURL(), nullptr) {} |
| 48 | 48 |
| 49 void SetUp() override { | 49 void SetUp() override { |
| 50 testing::Test::SetUp(); | 50 testing::Test::SetUp(); |
| 51 // Disable the first engagement bonus for tests. | 51 // Disable the first engagement bonus for tests. |
| 52 SiteEngagementScore::SetParamValuesForTesting(); | 52 SiteEngagementScore::SetParamValuesForTesting(); |
| 53 } | 53 } |
| 54 | 54 |
| 55 protected: | 55 protected: |
| 56 void VerifyScore(const SiteEngagementScore& score, | 56 void VerifyScore(const SiteEngagementScore& score, |
| 57 double expected_raw_score, | 57 double expected_raw_score, |
| (...skipping 12 matching lines...) Expand all Loading... |
| 70 score->points_added_today_ = points_added_today; | 70 score->points_added_today_ = points_added_today; |
| 71 score->last_engagement_time_ = last_engagement_time; | 71 score->last_engagement_time_ = last_engagement_time; |
| 72 } | 72 } |
| 73 | 73 |
| 74 void TestScoreInitializesAndUpdates( | 74 void TestScoreInitializesAndUpdates( |
| 75 std::unique_ptr<base::DictionaryValue> score_dict, | 75 std::unique_ptr<base::DictionaryValue> score_dict, |
| 76 double expected_raw_score, | 76 double expected_raw_score, |
| 77 double expected_points_added_today, | 77 double expected_points_added_today, |
| 78 base::Time expected_last_engagement_time) { | 78 base::Time expected_last_engagement_time) { |
| 79 std::unique_ptr<base::DictionaryValue> copy(score_dict->DeepCopy()); | 79 std::unique_ptr<base::DictionaryValue> copy(score_dict->DeepCopy()); |
| 80 SiteEngagementScore initial_score(&test_clock_, std::move(score_dict)); | 80 SiteEngagementScore initial_score(&test_clock_, GURL(), |
| 81 std::move(score_dict)); |
| 81 VerifyScore(initial_score, expected_raw_score, expected_points_added_today, | 82 VerifyScore(initial_score, expected_raw_score, expected_points_added_today, |
| 82 expected_last_engagement_time); | 83 expected_last_engagement_time); |
| 83 | 84 |
| 84 // Updating the score dict should return false, as the score shouldn't | 85 // Updating the score dict should return false, as the score shouldn't |
| 85 // have changed at this point. | 86 // have changed at this point. |
| 86 EXPECT_FALSE(initial_score.UpdateScoreDict(copy.get())); | 87 EXPECT_FALSE(initial_score.UpdateScoreDict(copy.get())); |
| 87 | 88 |
| 88 // Update the score to new values and verify it updates the score dict | 89 // Update the score to new values and verify it updates the score dict |
| 89 // correctly. | 90 // correctly. |
| 90 base::Time different_day = | 91 base::Time different_day = |
| 91 GetReferenceTime() + base::TimeDelta::FromDays(1); | 92 GetReferenceTime() + base::TimeDelta::FromDays(1); |
| 92 UpdateScore(&initial_score, 5, 10, different_day); | 93 UpdateScore(&initial_score, 5, 10, different_day); |
| 93 EXPECT_TRUE(initial_score.UpdateScoreDict(copy.get())); | 94 EXPECT_TRUE(initial_score.UpdateScoreDict(copy.get())); |
| 94 SiteEngagementScore updated_score(&test_clock_, std::move(copy)); | 95 SiteEngagementScore updated_score(&test_clock_, GURL(), std::move(copy)); |
| 95 VerifyScore(updated_score, 5, 10, different_day); | 96 VerifyScore(updated_score, 5, 10, different_day); |
| 96 } | 97 } |
| 97 | 98 |
| 98 void SetParamValue(SiteEngagementScore::Variation variation, double value) { | 99 void SetParamValue(SiteEngagementScore::Variation variation, double value) { |
| 99 SiteEngagementScore::GetParamValues()[variation].second = value; | 100 SiteEngagementScore::GetParamValues()[variation].second = value; |
| 100 } | 101 } |
| 101 | 102 |
| 102 base::SimpleTestClock test_clock_; | 103 base::SimpleTestClock test_clock_; |
| 103 SiteEngagementScore score_; | 104 SiteEngagementScore score_; |
| 104 }; | 105 }; |
| (...skipping 216 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 321 dict->SetDouble(SiteEngagementScore::kLastEngagementTimeKey, | 322 dict->SetDouble(SiteEngagementScore::kLastEngagementTimeKey, |
| 322 GetReferenceTime().ToInternalValue()); | 323 GetReferenceTime().ToInternalValue()); |
| 323 | 324 |
| 324 TestScoreInitializesAndUpdates(std::move(dict), 1, 2, GetReferenceTime()); | 325 TestScoreInitializesAndUpdates(std::move(dict), 1, 2, GetReferenceTime()); |
| 325 } | 326 } |
| 326 | 327 |
| 327 // Ensure bonus engagement is awarded for the first engagement of a day. | 328 // Ensure bonus engagement is awarded for the first engagement of a day. |
| 328 TEST_F(SiteEngagementScoreTest, FirstDailyEngagementBonus) { | 329 TEST_F(SiteEngagementScoreTest, FirstDailyEngagementBonus) { |
| 329 SetParamValue(SiteEngagementScore::FIRST_DAILY_ENGAGEMENT, 0.5); | 330 SetParamValue(SiteEngagementScore::FIRST_DAILY_ENGAGEMENT, 0.5); |
| 330 | 331 |
| 331 SiteEngagementScore score1(&test_clock_, | 332 SiteEngagementScore score1(&test_clock_, GURL(), |
| 332 std::unique_ptr<base::DictionaryValue>()); | 333 std::unique_ptr<base::DictionaryValue>()); |
| 333 SiteEngagementScore score2(&test_clock_, | 334 SiteEngagementScore score2(&test_clock_, GURL(), |
| 334 std::unique_ptr<base::DictionaryValue>()); | 335 std::unique_ptr<base::DictionaryValue>()); |
| 335 base::Time current_day = GetReferenceTime(); | 336 base::Time current_day = GetReferenceTime(); |
| 336 | 337 |
| 337 test_clock_.SetNow(current_day); | 338 test_clock_.SetNow(current_day); |
| 338 | 339 |
| 339 // The first engagement event gets the bonus. | 340 // The first engagement event gets the bonus. |
| 340 score1.AddPoints(0.5); | 341 score1.AddPoints(0.5); |
| 341 EXPECT_EQ(1.0, score1.GetScore()); | 342 EXPECT_EQ(1.0, score1.GetScore()); |
| 342 | 343 |
| 343 // Subsequent events do not. | 344 // Subsequent events do not. |
| (...skipping 95 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 439 EXPECT_DOUBLE_EQ(2.0, score_.GetScore()); | 440 EXPECT_DOUBLE_EQ(2.0, score_.GetScore()); |
| 440 | 441 |
| 441 // Ensure point removal happens after proportional decay. | 442 // Ensure point removal happens after proportional decay. |
| 442 score_.AddPoints(4.0); | 443 score_.AddPoints(4.0); |
| 443 EXPECT_DOUBLE_EQ(6.0, score_.GetScore()); | 444 EXPECT_DOUBLE_EQ(6.0, score_.GetScore()); |
| 444 SetParamValue(SiteEngagementScore::DECAY_POINTS, 2.0); | 445 SetParamValue(SiteEngagementScore::DECAY_POINTS, 2.0); |
| 445 current_day += base::TimeDelta::FromDays(7); | 446 current_day += base::TimeDelta::FromDays(7); |
| 446 test_clock_.SetNow(current_day); | 447 test_clock_.SetNow(current_day); |
| 447 EXPECT_NEAR(1.0, score_.GetScore(), kMaxRoundingDeviation); | 448 EXPECT_NEAR(1.0, score_.GetScore(), kMaxRoundingDeviation); |
| 448 } | 449 } |
| OLD | NEW |