Chromium Code Reviews| Index: components/ntp_snippets/ntp_snippets_service_unittest.cc | 
| diff --git a/components/ntp_snippets/ntp_snippets_service_unittest.cc b/components/ntp_snippets/ntp_snippets_service_unittest.cc | 
| index fac43c445ef9a5c64085345bbd062289c8f7e571..2a158822fcb8b3667a0b15796af45aef0f1c3630 100644 | 
| --- a/components/ntp_snippets/ntp_snippets_service_unittest.cc | 
| +++ b/components/ntp_snippets/ntp_snippets_service_unittest.cc | 
| @@ -27,13 +27,11 @@ | 
| #include "components/ntp_snippets/ntp_snippets_database.h" | 
| #include "components/ntp_snippets/ntp_snippets_fetcher.h" | 
| #include "components/ntp_snippets/ntp_snippets_scheduler.h" | 
| +#include "components/ntp_snippets/ntp_snippets_test_utils.h" | 
| #include "components/ntp_snippets/switches.h" | 
| #include "components/prefs/testing_pref_service.h" | 
| -#include "components/signin/core/browser/account_tracker_service.h" | 
| #include "components/signin/core/browser/fake_profile_oauth2_token_service.h" | 
| #include "components/signin/core/browser/fake_signin_manager.h" | 
| -#include "components/signin/core/browser/test_signin_client.h" | 
| -#include "components/sync_driver/fake_sync_service.h" | 
| #include "google_apis/google_api_keys.h" | 
| #include "net/url_request/test_url_fetcher_factory.h" | 
| #include "net/url_request/url_request_test_util.h" | 
| @@ -223,21 +221,12 @@ class MockScheduler : public NTPSnippetsScheduler { | 
| MOCK_METHOD0(Unschedule, bool()); | 
| }; | 
| -class MockSyncService : public sync_driver::FakeSyncService { | 
| - public: | 
| - MockSyncService() {} | 
| - virtual ~MockSyncService() {} | 
| - MOCK_CONST_METHOD0(CanSyncStart, bool()); | 
| - MOCK_CONST_METHOD0(IsSyncActive, bool()); | 
| - MOCK_CONST_METHOD0(ConfigurationDone, bool()); | 
| - MOCK_CONST_METHOD0(GetActiveDataTypes, syncer::ModelTypeSet()); | 
| -}; | 
| - | 
| class MockServiceObserver : public NTPSnippetsServiceObserver { | 
| public: | 
| MOCK_METHOD0(NTPSnippetsServiceLoaded, void()); | 
| MOCK_METHOD0(NTPSnippetsServiceShutdown, void()); | 
| - MOCK_METHOD0(NTPSnippetsServiceDisabled, void()); | 
| + MOCK_METHOD1(NTPSnippetsServiceDisabledReasonChanged, | 
| + void(DisabledReason disabled_reason)); | 
| }; | 
| class WaitForDBLoad : public NTPSnippetsServiceObserver { | 
| @@ -259,7 +248,8 @@ class WaitForDBLoad : public NTPSnippetsServiceObserver { | 
| } | 
| void NTPSnippetsServiceShutdown() override {} | 
| - void NTPSnippetsServiceDisabled() override {} | 
| + void NTPSnippetsServiceDisabledReasonChanged( | 
| + DisabledReason disabled_reason) override {} | 
| NTPSnippetsService* service_; | 
| base::RunLoop run_loop_; | 
| @@ -269,20 +259,15 @@ class WaitForDBLoad : public NTPSnippetsServiceObserver { | 
| } // namespace | 
| -class NTPSnippetsServiceTest : public testing::Test { | 
| +class NTPSnippetsServiceTest : public test::NTPSnippetsTestBase { | 
| public: | 
| NTPSnippetsServiceTest() | 
| : fake_url_fetcher_factory_( | 
| /*default_factory=*/&failing_url_fetcher_factory_), | 
| test_url_(base::StringPrintf(kTestContentSnippetsServerFormat, | 
| - google_apis::GetAPIKey().c_str())), | 
| - pref_service_(new TestingPrefServiceSimple()), | 
| - signin_client_(new TestSigninClient(nullptr)), | 
| - account_tracker_(new AccountTrackerService()), | 
| - fake_signin_manager_(new FakeSigninManagerBase(signin_client_.get(), | 
| - account_tracker_.get())), | 
| - fake_token_service_(new FakeProfileOAuth2TokenService()) { | 
| - NTPSnippetsService::RegisterProfilePrefs(pref_service_->registry()); | 
| + google_apis::GetAPIKey().c_str())) { | 
| + NTPSnippetsService::RegisterProfilePrefs(pref_service()->registry()); | 
| + | 
| // Since no SuggestionsService is injected in tests, we need to force the | 
| // service to fetch from all hosts. | 
| base::CommandLine::ForCurrentProcess()->AppendSwitch( | 
| @@ -302,7 +287,7 @@ class NTPSnippetsServiceTest : public testing::Test { | 
| } | 
| void SetUp() override { | 
| - ResetSyncServiceMock(); | 
| + test::NTPSnippetsTestBase::SetUp(); | 
| EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1); | 
| CreateSnippetsService(/*enabled=*/true); | 
| } | 
| @@ -320,16 +305,24 @@ class NTPSnippetsServiceTest : public testing::Test { | 
| // create the new one, otherwise opening the new database will fail. | 
| service_.reset(); | 
| + ResetSigninManager(); | 
| + NTPSnippetsFetcher* snippets_fetcher = new NTPSnippetsFetcher( | 
| 
 
Bernhard Bauer
2016/06/28 13:47:39
FWIW, I would probably put this into a unique_ptr
 
dgn
2016/06/28 16:38:57
Done.
 
 | 
| + fake_signin_manager(), fake_token_service_.get(), | 
| + std::move(request_context_getter), base::Bind(&ParseJson), | 
| + /*is_stable_channel=*/true); | 
| + | 
| + fake_signin_manager()->SignIn("foo@bar.com"); | 
| + snippets_fetcher->SetPersonalizationForTesting( | 
| + NTPSnippetsFetcher::Personalization::kNonPersonal); | 
| + | 
| service_.reset(new NTPSnippetsService( | 
| - enabled, pref_service_.get(), mock_sync_service_.get(), nullptr, | 
| - std::string("fr"), &scheduler_, | 
| - base::WrapUnique(new NTPSnippetsFetcher( | 
| - fake_signin_manager_.get(), fake_token_service_.get(), | 
| - std::move(request_context_getter), base::Bind(&ParseJson), | 
| - /*is_stable_channel=*/true)), | 
| - /*image_fetcher=*/nullptr, /*image_decoder=*/nullptr, | 
| - base::WrapUnique(new NTPSnippetsDatabase(database_dir_.path(), | 
| - task_runner)))); | 
| + enabled, pref_service(), nullptr, std::string("fr"), &scheduler_, | 
| 
 
Bernhard Bauer
2016/06/28 13:47:39
std::string has an implicit constructor, so you do
 
dgn
2016/06/28 16:38:57
Done.
 
 | 
| + base::WrapUnique(snippets_fetcher), /*image_fetcher=*/nullptr, | 
| + /*image_fetcher=*/nullptr, base::WrapUnique(new NTPSnippetsDatabase( | 
| + database_dir_.path(), task_runner)), | 
| + base::WrapUnique(new NTPSnippetsStatusService(fake_signin_manager(), | 
| + mock_sync_service())))); | 
| + | 
| if (enabled) | 
| WaitForDBLoad(service_.get()); | 
| } | 
| @@ -338,7 +331,6 @@ class NTPSnippetsServiceTest : public testing::Test { | 
| const GURL& test_url() { return test_url_; } | 
| NTPSnippetsService* service() { return service_.get(); } | 
| MockScheduler& mock_scheduler() { return scheduler_; } | 
| - MockSyncService* mock_sync_service() { return mock_sync_service_.get(); } | 
| // Provide the json to be returned by the fake fetcher. | 
| void SetUpFetchResponse(const std::string& json) { | 
| @@ -352,34 +344,12 @@ class NTPSnippetsServiceTest : public testing::Test { | 
| base::RunLoop().RunUntilIdle(); | 
| } | 
| - // Call before the service is set up to initialize a sync service. | 
| - // Subsequent calls reset the return values of the mocked methods. | 
| - void ResetSyncServiceMock() { | 
| - if (!mock_sync_service_) { | 
| - // Use a NiceMock to avoid the "uninteresting call" warnings. | 
| - mock_sync_service_.reset(new testing::NiceMock<MockSyncService>); | 
| - } | 
| - | 
| - ON_CALL(*mock_sync_service_, CanSyncStart()).WillByDefault(Return(true)); | 
| - ON_CALL(*mock_sync_service_, IsSyncActive()).WillByDefault(Return(true)); | 
| - ON_CALL(*mock_sync_service_, ConfigurationDone()) | 
| - .WillByDefault(Return(true)); | 
| - ON_CALL(*mock_sync_service_, GetActiveDataTypes()) | 
| - .WillByDefault( | 
| - Return(syncer::ModelTypeSet(syncer::HISTORY_DELETE_DIRECTIVES))); | 
| - } | 
| - | 
| private: | 
| base::MessageLoop message_loop_; | 
| FailingFakeURLFetcherFactory failing_url_fetcher_factory_; | 
| // Instantiation of factory automatically sets itself as URLFetcher's factory. | 
| net::FakeURLFetcherFactory fake_url_fetcher_factory_; | 
| const GURL test_url_; | 
| - std::unique_ptr<TestingPrefServiceSimple> pref_service_; | 
| - std::unique_ptr<TestSigninClient> signin_client_; | 
| - std::unique_ptr<AccountTrackerService> account_tracker_; | 
| - std::unique_ptr<MockSyncService> mock_sync_service_; // Null by default. | 
| - std::unique_ptr<SigninManagerBase> fake_signin_manager_; | 
| std::unique_ptr<OAuth2TokenService> fake_token_service_; | 
| MockScheduler scheduler_; | 
| // Last so that the dependencies are deleted after the service. | 
| @@ -393,6 +363,7 @@ class NTPSnippetsServiceTest : public testing::Test { | 
| class NTPSnippetsServiceDisabledTest : public NTPSnippetsServiceTest { | 
| public: | 
| void SetUp() override { | 
| + test::NTPSnippetsTestBase::SetUp(); | 
| EXPECT_CALL(mock_scheduler(), Unschedule()).Times(1); | 
| CreateSnippetsService(/*enabled=*/false); | 
| } | 
| @@ -875,59 +846,25 @@ TEST_F(NTPSnippetsServiceTest, DiscardShouldRespectAllKnownUrls) { | 
| ASSERT_THAT(service()->snippets(), IsEmpty()); | 
| } | 
| -TEST_F(NTPSnippetsServiceTest, SyncStateCompatibility) { | 
| - // The default test setup has a compatible sync state. | 
| - EXPECT_EQ(DisabledReason::NONE, service()->GetDisabledReason()); | 
| - | 
| - // History sync disabled. | 
| - ON_CALL(*mock_sync_service(), GetActiveDataTypes()) | 
| - .WillByDefault(Return(syncer::ModelTypeSet())); | 
| - EXPECT_EQ(DisabledReason::HISTORY_SYNC_DISABLED, | 
| - service()->GetDisabledReason()); | 
| - ResetSyncServiceMock(); | 
| - | 
| - // Not done loading. | 
| - ON_CALL(*mock_sync_service(), ConfigurationDone()) | 
| - .WillByDefault(Return(false)); | 
| - ON_CALL(*mock_sync_service(), GetActiveDataTypes()) | 
| - .WillByDefault(Return(syncer::ModelTypeSet())); | 
| - EXPECT_EQ(DisabledReason::HISTORY_SYNC_STATE_UNKNOWN, | 
| - service()->GetDisabledReason()); | 
| - ResetSyncServiceMock(); | 
| - | 
| - // Sync disabled. | 
| - ON_CALL(*mock_sync_service(), CanSyncStart()).WillByDefault(Return(false)); | 
| - EXPECT_EQ(DisabledReason::HISTORY_SYNC_DISABLED, | 
| - service()->GetDisabledReason()); | 
| - ResetSyncServiceMock(); | 
| - | 
| - // No service. | 
| - service()->sync_service_ = nullptr; | 
| - EXPECT_EQ(DisabledReason::HISTORY_SYNC_DISABLED, | 
| - service()->GetDisabledReason()); | 
| -} | 
| - | 
| TEST_F(NTPSnippetsServiceTest, HistorySyncStateChanges) { | 
| MockServiceObserver mock_observer; | 
| service()->AddObserver(&mock_observer); | 
| - // Simulate user disabled sync. | 
| - ON_CALL(*mock_sync_service(), CanSyncStart()).WillByDefault(Return(false)); | 
| - // The service should notify observers it's been disabled and clear the | 
| - // snippets instead of pulling new ones. | 
| - EXPECT_CALL(mock_observer, NTPSnippetsServiceDisabled()); | 
| + // Simulate user signed out | 
| SetUpFetchResponse(GetTestJson({GetSnippet()})); | 
| - service()->OnStateChanged(); | 
| + EXPECT_CALL(mock_observer, NTPSnippetsServiceDisabledReasonChanged( | 
| + DisabledReason::SIGNED_OUT)); | 
| + service()->UpdateStateForStatus(DisabledReason::SIGNED_OUT); | 
| base::RunLoop().RunUntilIdle(); | 
| EXPECT_EQ(NTPSnippetsService::State::DISABLED, service()->state_); | 
| EXPECT_THAT(service()->snippets(), IsEmpty()); // No fetch should be made. | 
| - // Simulate user sign in. | 
| - ResetSyncServiceMock(); | 
| - // The service should be ready again and load snippets. | 
| - EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1); | 
| + // Simulate user sign in. The service should be ready again and load snippets. | 
| SetUpFetchResponse(GetTestJson({GetSnippet()})); | 
| - service()->OnStateChanged(); | 
| + EXPECT_CALL(mock_observer, | 
| + NTPSnippetsServiceDisabledReasonChanged(DisabledReason::NONE)); | 
| + EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1); | 
| + service()->UpdateStateForStatus(DisabledReason::NONE); | 
| base::RunLoop().RunUntilIdle(); | 
| EXPECT_EQ(NTPSnippetsService::State::READY, service()->state_); | 
| EXPECT_FALSE(service()->snippets().empty()); |