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

Unified Diff: components/ntp_snippets/remote/remote_suggestions_provider_impl_unittest.cc

Issue 2774663002: [Remote suggestions] Refactor the scheduler (Closed)
Patch Set: Marc's nits #2 Created 3 years, 9 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: components/ntp_snippets/remote/remote_suggestions_provider_impl_unittest.cc
diff --git a/components/ntp_snippets/remote/remote_suggestions_provider_impl_unittest.cc b/components/ntp_snippets/remote/remote_suggestions_provider_impl_unittest.cc
index dbbba36473a0d1886471c0747ab9eded46dd24fb..015e9ca9aa4a91fa133e1b93dcd5cec3d4ecdf3c 100644
--- a/components/ntp_snippets/remote/remote_suggestions_provider_impl_unittest.cc
+++ b/components/ntp_snippets/remote/remote_suggestions_provider_impl_unittest.cc
@@ -380,10 +380,13 @@ class FakeImageDecoder : public image_fetcher::ImageDecoder {
class MockScheduler : public RemoteSuggestionsScheduler {
public:
+ MOCK_METHOD1(SetProvider, void(RemoteSuggestionsProvider* provider));
MOCK_METHOD0(OnProviderActivated, void());
MOCK_METHOD0(OnProviderDeactivated, void());
MOCK_METHOD0(OnSuggestionsCleared, void());
MOCK_METHOD0(OnHistoryCleared, void());
+ MOCK_METHOD0(AcquireQuotaForInteractiveFetch, bool());
+ MOCK_METHOD1(OnInteractiveFetchFinished, void(Status fetch_status));
MOCK_METHOD0(OnBrowserForegrounded, void());
MOCK_METHOD0(OnBrowserColdStart, void());
MOCK_METHOD0(OnNTPOpened, void());
@@ -408,6 +411,7 @@ class RemoteSuggestionsProviderImplTest : public ::testing::Test {
base::MakeUnique<base::DefaultClock>()),
suggestions_fetcher_(nullptr),
image_fetcher_(nullptr),
+ scheduler_(base::MakeUnique<NiceMock<MockScheduler>>()),
database_(nullptr) {
RemoteSuggestionsProviderImpl::RegisterProfilePrefs(
utils_.pref_service()->registry());
@@ -460,12 +464,18 @@ class RemoteSuggestionsProviderImplTest : public ::testing::Test {
database_ = database.get();
return base::MakeUnique<RemoteSuggestionsProviderImpl>(
observer_.get(), utils_.pref_service(), "fr", category_ranker_.get(),
- std::move(suggestions_fetcher), std::move(image_fetcher),
- std::move(database),
+ scheduler_.get(), std::move(suggestions_fetcher),
+ std::move(image_fetcher), std::move(database),
base::MakeUnique<RemoteSuggestionsStatusService>(
utils_.fake_signin_manager(), utils_.pref_service()));
}
+ std::unique_ptr<RemoteSuggestionsProviderImpl>
+ MakeSuggestionsProviderWithoutInitializationWithStrictScheduler() {
+ scheduler_ = base::MakeUnique<StrictMock<MockScheduler>>();
+ return MakeSuggestionsProviderWithoutInitialization();
+ }
+
void WaitForSuggestionsProviderInitialization(
RemoteSuggestionsProviderImpl* service,
bool set_empty_response) {
@@ -528,6 +538,7 @@ class RemoteSuggestionsProviderImplTest : public ::testing::Test {
FakeImageDecoder* image_decoder() { return &image_decoder_; }
PrefService* pref_service() { return utils_.pref_service(); }
RemoteSuggestionsDatabase* database() { return database_; }
+ MockScheduler* scheduler() { return scheduler_.get(); }
// Provide the json to be returned by the fake fetcher.
void SetUpFetchResponse(const std::string& json) {
@@ -556,6 +567,9 @@ class RemoteSuggestionsProviderImplTest : public ::testing::Test {
const std::set<std::string>& known_ids,
FetchDoneCallback callback) {
SetUpFetchResponse(json);
+ EXPECT_CALL(*scheduler(), AcquireQuotaForInteractiveFetch())
+ .WillOnce(Return(true))
+ .RetiresOnSaturation();
service->Fetch(category, known_ids, callback);
base::RunLoop().RunUntilIdle();
}
@@ -574,6 +588,7 @@ class RemoteSuggestionsProviderImplTest : public ::testing::Test {
RemoteSuggestionsFetcher* suggestions_fetcher_;
NiceMock<MockImageFetcher>* image_fetcher_;
FakeImageDecoder image_decoder_;
+ std::unique_ptr<MockScheduler> scheduler_;
base::ScopedTempDir database_dir_;
RemoteSuggestionsDatabase* database_;
@@ -1726,100 +1741,78 @@ TEST_F(RemoteSuggestionsProviderImplTest,
// scheduler refactoring is done (crbug.com/672434).
}
-TEST_F(RemoteSuggestionsProviderImplTest, CallsSchedulerIfInited) {
- // Initiate the service so that it is already READY.
- auto service = MakeSuggestionsProvider();
- StrictMock<MockScheduler> scheduler;
- // The scheduler should be notified of activation of the provider.
- EXPECT_CALL(scheduler, OnProviderActivated());
- service->SetRemoteSuggestionsScheduler(&scheduler);
-}
-
-TEST_F(RemoteSuggestionsProviderImplTest, DoesNotCallSchedulerIfNotInited) {
- auto service = MakeSuggestionsProviderWithoutInitialization();
- StrictMock<MockScheduler> scheduler;
- // The provider is not initialized yet, no callback should be called on
- // registering.
- service->SetRemoteSuggestionsScheduler(&scheduler);
-}
-
TEST_F(RemoteSuggestionsProviderImplTest, CallsSchedulerWhenReady) {
- auto service = MakeSuggestionsProviderWithoutInitialization();
- StrictMock<MockScheduler> scheduler;
- // The provider is not initialized yet, no callback should be called yet.
- service->SetRemoteSuggestionsScheduler(&scheduler);
+ auto service =
+ MakeSuggestionsProviderWithoutInitializationWithStrictScheduler();
// Should be called when becoming ready.
- EXPECT_CALL(scheduler, OnProviderActivated());
+ EXPECT_CALL(*scheduler(), OnProviderActivated());
WaitForSuggestionsProviderInitialization(service.get(),
/*set_empty_response=*/true);
}
TEST_F(RemoteSuggestionsProviderImplTest, CallsSchedulerOnError) {
- auto service = MakeSuggestionsProviderWithoutInitialization();
- StrictMock<MockScheduler> scheduler;
- // The provider is not initialized yet, no callback should be called yet.
- service->SetRemoteSuggestionsScheduler(&scheduler);
+ auto service =
+ MakeSuggestionsProviderWithoutInitializationWithStrictScheduler();
// Should be called on error.
- EXPECT_CALL(scheduler, OnProviderDeactivated());
+ EXPECT_CALL(*scheduler(), OnProviderDeactivated());
service->EnterState(RemoteSuggestionsProviderImpl::State::ERROR_OCCURRED);
}
TEST_F(RemoteSuggestionsProviderImplTest, CallsSchedulerWhenDisabled) {
- auto service = MakeSuggestionsProviderWithoutInitialization();
- StrictMock<MockScheduler> scheduler;
- // The provider is not initialized yet, no callback should be called yet.
- service->SetRemoteSuggestionsScheduler(&scheduler);
+ auto service =
+ MakeSuggestionsProviderWithoutInitializationWithStrictScheduler();
// Should be called when becoming disabled. First deactivate and only after
// that clear the suggestions so that they are not fetched again.
{
InSequence s;
- EXPECT_CALL(scheduler, OnProviderDeactivated());
+ EXPECT_CALL(*scheduler(), OnProviderDeactivated());
ASSERT_THAT(service->ready(), Eq(false));
- EXPECT_CALL(scheduler, OnSuggestionsCleared());
+ EXPECT_CALL(*scheduler(), OnSuggestionsCleared());
}
service->EnterState(RemoteSuggestionsProviderImpl::State::DISABLED);
}
TEST_F(RemoteSuggestionsProviderImplTest, CallsSchedulerWhenHistoryCleared) {
+ auto service =
+ MakeSuggestionsProviderWithoutInitializationWithStrictScheduler();
// Initiate the service so that it is already READY.
- auto service = MakeSuggestionsProvider();
- StrictMock<MockScheduler> scheduler;
- // The scheduler should be notified of activation of the provider.
- EXPECT_CALL(scheduler, OnProviderActivated());
+ EXPECT_CALL(*scheduler(), OnProviderActivated());
+ WaitForSuggestionsProviderInitialization(service.get(),
+ /*set_empty_response=*/true);
+
// The scheduler should be notified of clearing the history.
- EXPECT_CALL(scheduler, OnHistoryCleared());
- service->SetRemoteSuggestionsScheduler(&scheduler);
+ EXPECT_CALL(*scheduler(), OnHistoryCleared());
service->ClearHistory(GetDefaultCreationTime(), GetDefaultExpirationTime(),
base::Callback<bool(const GURL& url)>());
}
TEST_F(RemoteSuggestionsProviderImplTest, CallsSchedulerWhenSignedIn) {
+ auto service =
+ MakeSuggestionsProviderWithoutInitializationWithStrictScheduler();
// Initiate the service so that it is already READY.
- auto service = MakeSuggestionsProvider();
- StrictMock<MockScheduler> scheduler;
- // The scheduler should be notified of activation of the provider.
- EXPECT_CALL(scheduler, OnProviderActivated());
- // The scheduler should be notified of clearing the history.
- EXPECT_CALL(scheduler, OnSuggestionsCleared());
+ EXPECT_CALL(*scheduler(), OnProviderActivated());
+ WaitForSuggestionsProviderInitialization(service.get(),
+ /*set_empty_response=*/true);
- service->SetRemoteSuggestionsScheduler(&scheduler);
+ // The scheduler should be notified of clearing the history.
+ EXPECT_CALL(*scheduler(), OnSuggestionsCleared());
service->OnStatusChanged(RemoteSuggestionsStatus::ENABLED_AND_SIGNED_IN,
RemoteSuggestionsStatus::ENABLED_AND_SIGNED_OUT);
}
TEST_F(RemoteSuggestionsProviderImplTest, CallsSchedulerWhenSignedOut) {
+ auto service =
+ MakeSuggestionsProviderWithoutInitializationWithStrictScheduler();
// Initiate the service so that it is already READY.
- auto service = MakeSuggestionsProvider();
- StrictMock<MockScheduler> scheduler;
- // The scheduler should be notified of activation of the provider.
- EXPECT_CALL(scheduler, OnProviderActivated());
- // The scheduler should be notified of clearing the history.
- EXPECT_CALL(scheduler, OnSuggestionsCleared());
+ EXPECT_CALL(*scheduler(), OnProviderActivated());
+ WaitForSuggestionsProviderInitialization(service.get(),
+ /*set_empty_response=*/true);
- service->SetRemoteSuggestionsScheduler(&scheduler);
+ // The scheduler should be notified of clearing the history.
+ EXPECT_CALL(*scheduler(), OnSuggestionsCleared());
service->OnStatusChanged(RemoteSuggestionsStatus::ENABLED_AND_SIGNED_OUT,
RemoteSuggestionsStatus::ENABLED_AND_SIGNED_IN);
}

Powered by Google App Engine
This is Rietveld 408576698