Index: components/ntp_snippets/remote/scheduling_remote_suggestions_provider_unittest.cc |
diff --git a/components/ntp_snippets/remote/scheduling_remote_suggestions_provider_unittest.cc b/components/ntp_snippets/remote/scheduling_remote_suggestions_provider_unittest.cc |
index d5ee169b57c9c6e76a53ce9db5ddf1780e231fd0..a65c61ef2b038fc709bcc66a59af677e5ca881d0 100644 |
--- a/components/ntp_snippets/remote/scheduling_remote_suggestions_provider_unittest.cc |
+++ b/components/ntp_snippets/remote/scheduling_remote_suggestions_provider_unittest.cc |
@@ -120,12 +120,22 @@ class SchedulingRemoteSuggestionsProviderTest |
: public ::testing::Test { |
public: |
SchedulingRemoteSuggestionsProviderTest() |
- : underlying_provider_(nullptr), |
+ : // For the test we enabled all trigger types. |
+ default_variation_params_{{"scheduler_trigger_types", |
+ "persistent_scheduler_wake_up,ntp_opened," |
+ "browser_foregrounded,browser_cold_start"}}, |
+ params_manager_(ntp_snippets::kStudyName, |
+ default_variation_params_, |
+ {kArticleSuggestionsFeature.name}), |
+ underlying_provider_(nullptr), |
scheduling_provider_(nullptr), |
user_classifier_(/*pref_service=*/nullptr) { |
SchedulingRemoteSuggestionsProvider::RegisterProfilePrefs( |
utils_.pref_service()->registry()); |
+ ResetProvider(); |
+ } |
+ void ResetProvider() { |
auto underlying_provider = |
base::MakeUnique<StrictMock<MockRemoteSuggestionsProvider>>( |
/*observer=*/nullptr); |
@@ -147,7 +157,20 @@ class SchedulingRemoteSuggestionsProviderTest |
std::move(test_clock)); |
} |
+ void SetVariationParameter(const std::string& param_name, |
+ const std::string& param_value) { |
+ std::map<std::string, std::string> params = default_variation_params_; |
+ params[param_name] = param_value; |
+ |
+ params_manager_.ClearAllVariationParams(); |
+ params_manager_.SetVariationParamsWithFeatureAssociations( |
+ ntp_snippets::kStudyName, params, |
+ {ntp_snippets::kArticleSuggestionsFeature.name}); |
+ } |
+ |
protected: |
+ std::map<std::string, std::string> default_variation_params_; |
+ variations::testing::VariationParamsManager params_manager_; |
StrictMock<MockPersistentScheduler> persistent_scheduler_; |
StrictMock<MockRemoteSuggestionsProvider>* underlying_provider_; |
std::unique_ptr<SchedulingRemoteSuggestionsProvider> scheduling_provider_; |
@@ -170,11 +193,68 @@ TEST_F(SchedulingRemoteSuggestionsProviderTest, |
ShouldIgnoreSignalsWhenNotEnabled) { |
scheduling_provider_->OnPersistentSchedulerWakeUp(); |
scheduling_provider_->OnNTPOpened(); |
+ scheduling_provider_->OnBrowserForegrounded(); |
+ scheduling_provider_->OnBrowserColdStart(); |
+} |
+ |
+TEST_F(SchedulingRemoteSuggestionsProviderTest, |
+ ShouldIgnoreSignalsWhenDisabledByParam) { |
+ // First set an empty list of allowed trigger types. |
+ SetVariationParameter("scheduler_trigger_types", "-"); |
+ ResetProvider(); |
+ |
+ // Then enable the scheduler. |
+ EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); |
+ ChangeStatusOfUnderlyingProvider( |
+ RemoteSuggestionsProvider::ProviderStatus::ACTIVE); |
+ |
+ scheduling_provider_->OnPersistentSchedulerWakeUp(); |
+ scheduling_provider_->OnNTPOpened(); |
+ scheduling_provider_->OnBrowserForegrounded(); |
+ scheduling_provider_->OnBrowserColdStart(); |
+} |
+ |
+TEST_F(SchedulingRemoteSuggestionsProviderTest, |
+ ShouldHandleEmptyParamForTriggerTypes) { |
+ // First set an empty param for allowed trigger types -> should result in the |
+ // default list. |
+ SetVariationParameter("scheduler_trigger_types", ""); |
+ ResetProvider(); |
+ |
+ // Then enable the scheduler. |
+ EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); |
+ ChangeStatusOfUnderlyingProvider( |
+ RemoteSuggestionsProvider::ProviderStatus::ACTIVE); |
+ |
+ // For instance, persistent scheduler wake up should be enabled by default. |
+ EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)); |
+ scheduling_provider_->OnPersistentSchedulerWakeUp(); |
+} |
+ |
+TEST_F(SchedulingRemoteSuggestionsProviderTest, |
+ ShouldHandleIncorrentParamForTriggerTypes) { |
+ // First set an invalid list of allowed trigger types. |
+ SetVariationParameter("scheduler_trigger_types", "ntp_opened,foo;"); |
+ ResetProvider(); |
+ |
+ // Then enable the scheduler. |
+ EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); |
+ ChangeStatusOfUnderlyingProvider( |
+ RemoteSuggestionsProvider::ProviderStatus::ACTIVE); |
+ |
+ // For instance, persistent scheduler wake up should be enabled by default. |
+ EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)); |
+ scheduling_provider_->OnPersistentSchedulerWakeUp(); |
} |
TEST_F(SchedulingRemoteSuggestionsProviderTest, |
ShouldFetchOnPersistentSchedulerWakeUp) { |
- // First enable the scheduler. |
+ // First set only this type to be allowed. |
+ SetVariationParameter("scheduler_trigger_types", |
+ "persistent_scheduler_wake_up"); |
+ ResetProvider(); |
+ |
+ // Then enable the scheduler. |
EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); |
ChangeStatusOfUnderlyingProvider( |
RemoteSuggestionsProvider::ProviderStatus::ACTIVE); |
@@ -223,7 +303,11 @@ TEST_F(SchedulingRemoteSuggestionsProviderTest, |
TEST_F(SchedulingRemoteSuggestionsProviderTest, |
ShouldFetchOnNTPOpenedForTheFirstTime) { |
- // First enable the scheduler. |
+ // First set only this type to be allowed. |
+ SetVariationParameter("scheduler_trigger_types", "ntp_opened"); |
+ ResetProvider(); |
+ |
+ // Then enable the scheduler. |
EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); |
ChangeStatusOfUnderlyingProvider( |
RemoteSuggestionsProvider::ProviderStatus::ACTIVE); |
@@ -233,6 +317,36 @@ TEST_F(SchedulingRemoteSuggestionsProviderTest, |
} |
TEST_F(SchedulingRemoteSuggestionsProviderTest, |
+ ShouldFetchOnBrowserForegroundedForTheFirstTime) { |
+ // First set only this type to be allowed. |
+ SetVariationParameter("scheduler_trigger_types", "browser_foregrounded"); |
+ ResetProvider(); |
+ |
+ // Then enable the scheduler. |
+ EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); |
+ ChangeStatusOfUnderlyingProvider( |
+ RemoteSuggestionsProvider::ProviderStatus::ACTIVE); |
+ |
+ EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)); |
+ scheduling_provider_->OnBrowserForegrounded(); |
+} |
+ |
+TEST_F(SchedulingRemoteSuggestionsProviderTest, |
+ ShouldFetchOnBrowserColdStartForTheFirstTime) { |
+ // First set only this type to be allowed. |
+ SetVariationParameter("scheduler_trigger_types", "browser_cold_start"); |
+ ResetProvider(); |
+ |
+ // Then enable the scheduler. |
+ EXPECT_CALL(persistent_scheduler_, Schedule(_, _)); |
+ ChangeStatusOfUnderlyingProvider( |
+ RemoteSuggestionsProvider::ProviderStatus::ACTIVE); |
+ |
+ EXPECT_CALL(*underlying_provider_, RefetchInTheBackground(_)); |
+ scheduling_provider_->OnBrowserColdStart(); |
+} |
+ |
+TEST_F(SchedulingRemoteSuggestionsProviderTest, |
ShouldNotFetchOnNTPOpenedAfterSuccessfulSoftFetch) { |
// First enable the scheduler; the second Schedule is called after the |
// successful fetch. |
@@ -433,10 +547,7 @@ TEST_F(SchedulingRemoteSuggestionsProviderTest, |
// UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is |
// null. Change the wifi interval for this class. |
- variations::testing::VariationParamsManager params_manager( |
- ntp_snippets::kStudyName, |
- {{"fetching_interval_hours-wifi-active_ntp_user", "1.5"}}, |
- {kArticleSuggestionsFeature.name}); |
+ SetVariationParameter("fetching_interval_hours-wifi-active_ntp_user", "1.5"); |
// Schedule() should get called for the second time after params have changed. |
ChangeStatusOfUnderlyingProvider( |
@@ -450,11 +561,9 @@ TEST_F(SchedulingRemoteSuggestionsProviderTest, |
RemoteSuggestionsProvider::ProviderStatus::ACTIVE); |
// UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is |
- // null. Change the wifi interval for this class. |
- variations::testing::VariationParamsManager params_manager( |
- ntp_snippets::kStudyName, |
- {{"fetching_interval_hours-fallback-active_ntp_user", "1.5"}}, |
- {kArticleSuggestionsFeature.name}); |
+ // null. Change the fallback interval for this class. |
+ SetVariationParameter("fetching_interval_hours-fallback-active_ntp_user", |
+ "1.5"); |
// Schedule() should get called for the second time after params have changed. |
ChangeStatusOfUnderlyingProvider( |
@@ -468,11 +577,9 @@ TEST_F(SchedulingRemoteSuggestionsProviderTest, |
RemoteSuggestionsProvider::ProviderStatus::ACTIVE); |
// UserClassifier defaults to UserClass::ACTIVE_NTP_USER if PrefService is |
- // null. Change the wifi interval for this class. |
- variations::testing::VariationParamsManager params_manager( |
- ntp_snippets::kStudyName, |
- {{"soft_fetching_interval_hours-active-active_ntp_user", "1.5"}}, |
- {kArticleSuggestionsFeature.name}); |
+ // null. Change the on usage interval for this class. |
+ SetVariationParameter("soft_fetching_interval_hours-active-active_ntp_user", |
+ "1.5"); |
// Schedule() should get called for the second time after params have changed. |
ChangeStatusOfUnderlyingProvider( |