| 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 0141584b4fcd151e524693a5ea8e584807859773..7e7bb52efe685c4f8e4fe8164a9da1e4eaf68e37 100644
|
| --- a/components/ntp_snippets/ntp_snippets_service_unittest.cc
|
| +++ b/components/ntp_snippets/ntp_snippets_service_unittest.cc
|
| @@ -8,6 +8,8 @@
|
| #include <vector>
|
|
|
| #include "base/command_line.h"
|
| +#include "base/files/file_path.h"
|
| +#include "base/files/scoped_temp_dir.h"
|
| #include "base/json/json_reader.h"
|
| #include "base/macros.h"
|
| #include "base/memory/ptr_util.h"
|
| @@ -21,6 +23,7 @@
|
| #include "base/time/time.h"
|
| #include "components/image_fetcher/image_fetcher.h"
|
| #include "components/ntp_snippets/ntp_snippet.h"
|
| +#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/switches.h"
|
| @@ -236,6 +239,33 @@ class MockServiceObserver : public NTPSnippetsServiceObserver {
|
| MOCK_METHOD0(NTPSnippetsServiceDisabled, void());
|
| };
|
|
|
| +class WaitForDBLoad : public NTPSnippetsServiceObserver {
|
| + public:
|
| + WaitForDBLoad(NTPSnippetsService* service) : service_(service) {
|
| + EXPECT_TRUE(!service_->loaded());
|
| + service_->AddObserver(this);
|
| + run_loop_.Run();
|
| + }
|
| +
|
| + ~WaitForDBLoad() override {
|
| + service_->RemoveObserver(this);
|
| + }
|
| +
|
| + private:
|
| + void NTPSnippetsServiceLoaded() override {
|
| + EXPECT_TRUE(service_->loaded());
|
| + run_loop_.Quit();
|
| + }
|
| +
|
| + void NTPSnippetsServiceShutdown() override {};
|
| + void NTPSnippetsServiceDisabled() override {};
|
| +
|
| + NTPSnippetsService* service_;
|
| + base::RunLoop run_loop_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(WaitForDBLoad);
|
| +};
|
| +
|
| } // namespace
|
|
|
| class NTPSnippetsServiceTest : public testing::Test {
|
| @@ -256,6 +286,7 @@ class NTPSnippetsServiceTest : public testing::Test {
|
| // service to fetch from all hosts.
|
| base::CommandLine::ForCurrentProcess()->AppendSwitch(
|
| switches::kDontRestrict);
|
| + EXPECT_TRUE(database_dir_.CreateUniqueTempDir());
|
| }
|
|
|
| ~NTPSnippetsServiceTest() override {
|
| @@ -264,6 +295,7 @@ class NTPSnippetsServiceTest : public testing::Test {
|
| }
|
|
|
| void SetUp() override {
|
| + ResetSyncServiceMock();
|
| EXPECT_CALL(mock_scheduler(), Schedule(_, _, _, _)).Times(1);
|
| CreateSnippetsService(/*enabled=*/true);
|
| }
|
| @@ -277,15 +309,23 @@ class NTPSnippetsServiceTest : public testing::Test {
|
| scoped_refptr<net::TestURLRequestContextGetter> request_context_getter =
|
| new net::TestURLRequestContextGetter(task_runner.get());
|
|
|
| + // Delete the current service, so that the database is destroyed before we
|
| + // create the new one, otherwise opening the new database will fail.
|
| + service_.reset();
|
| +
|
| service_.reset(new NTPSnippetsService(
|
| - pref_service_.get(), mock_sync_service_.get(), nullptr, task_runner,
|
| + 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_fetcher=*/nullptr,
|
| + base::WrapUnique(new NTPSnippetsDatabase(database_dir_.path(),
|
| + task_runner))));
|
| service_->Init(enabled);
|
| + if (enabled)
|
| + WaitForDBLoad(service_.get());
|
| }
|
|
|
| protected:
|
| @@ -339,13 +379,15 @@ class NTPSnippetsServiceTest : public testing::Test {
|
| // Last so that the dependencies are deleted after the service.
|
| std::unique_ptr<NTPSnippetsService> service_;
|
|
|
| + base::ScopedTempDir database_dir_;
|
| +
|
| DISALLOW_COPY_AND_ASSIGN(NTPSnippetsServiceTest);
|
| };
|
|
|
| class NTPSnippetsServiceWithSyncTest : public NTPSnippetsServiceTest {
|
| public:
|
| void SetUp() override {
|
| - ResetSyncServiceMock();
|
| + // ResetSyncServiceMock();
|
| NTPSnippetsServiceTest::SetUp();
|
| }
|
| };
|
| @@ -837,12 +879,12 @@ TEST_F(NTPSnippetsServiceTest, DiscardShouldRespectAllKnownUrls) {
|
|
|
| TEST_F(NTPSnippetsServiceWithSyncTest, SyncStateCompatibility) {
|
| // The default test setup has a compatible sync state.
|
| - EXPECT_FALSE(service()->IsSyncStateIncompatible());
|
| + EXPECT_EQ(DisabledReason::NONE, service()->GetDisabledReason());
|
|
|
| // History sync disabled.
|
| ON_CALL(*mock_sync_service(), GetActiveDataTypes())
|
| .WillByDefault(Return(syncer::ModelTypeSet()));
|
| - EXPECT_TRUE(service()->IsSyncStateIncompatible());
|
| + EXPECT_EQ(DisabledReason::HISTORY_SYNC_DISABLED, service()->GetDisabledReason());
|
| ResetSyncServiceMock();
|
|
|
| // Not done loading.
|
| @@ -850,17 +892,17 @@ TEST_F(NTPSnippetsServiceWithSyncTest, SyncStateCompatibility) {
|
| .WillByDefault(Return(false));
|
| ON_CALL(*mock_sync_service(), GetActiveDataTypes())
|
| .WillByDefault(Return(syncer::ModelTypeSet()));
|
| - EXPECT_FALSE(service()->IsSyncStateIncompatible());
|
| + EXPECT_EQ(DisabledReason::HISTORY_SYNC_DISABLED, service()->GetDisabledReason());
|
| ResetSyncServiceMock();
|
|
|
| // Sync disabled.
|
| ON_CALL(*mock_sync_service(), CanSyncStart()).WillByDefault(Return(false));
|
| - EXPECT_TRUE(service()->IsSyncStateIncompatible());
|
| + EXPECT_EQ(DisabledReason::HISTORY_SYNC_DISABLED, service()->GetDisabledReason());
|
| ResetSyncServiceMock();
|
|
|
| // No service.
|
| service()->sync_service_ = nullptr;
|
| - EXPECT_TRUE(service()->IsSyncStateIncompatible());
|
| + EXPECT_EQ(DisabledReason::HISTORY_SYNC_DISABLED, service()->GetDisabledReason());
|
| }
|
|
|
| TEST_F(NTPSnippetsServiceWithSyncTest, HistorySyncStateChanges) {
|
| @@ -875,6 +917,7 @@ TEST_F(NTPSnippetsServiceWithSyncTest, HistorySyncStateChanges) {
|
| SetUpFetchResponse(GetTestJson({GetSnippet()}));
|
| service()->OnStateChanged();
|
| base::RunLoop().RunUntilIdle();
|
| + EXPECT_EQ(NTPSnippetsService::State::DISABLED, service()->state_);
|
| EXPECT_THAT(service()->snippets(), IsEmpty()); // No fetch should be made.
|
|
|
| // Simulate user sign in.
|
| @@ -883,6 +926,7 @@ TEST_F(NTPSnippetsServiceWithSyncTest, HistorySyncStateChanges) {
|
| SetUpFetchResponse(GetTestJson({GetSnippet()}));
|
| service()->OnStateChanged();
|
| base::RunLoop().RunUntilIdle();
|
| + EXPECT_EQ(NTPSnippetsService::State::READY, service()->state_);
|
| EXPECT_FALSE(service()->snippets().empty());
|
|
|
| service()->RemoveObserver(&mock_observer);
|
|
|