| 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 e578f179c819884813bbfa4c8a28cf3a9d4f3e7d..6c551c44b47b2b26dae18c2a2fddb40023ff2cf2 100644
|
| --- a/components/ntp_snippets/ntp_snippets_service_unittest.cc
|
| +++ b/components/ntp_snippets/ntp_snippets_service_unittest.cc
|
| @@ -64,10 +64,6 @@
|
| return arg->id() == value;
|
| }
|
|
|
| -MATCHER_P(IsCategory, id, "") {
|
| - return arg.id() == static_cast<int>(id);
|
| -}
|
| -
|
| const base::Time::Exploded kDefaultCreationTime = {2015, 11, 4, 25, 13, 46, 45};
|
| const char kTestContentSnippetsServerFormat[] =
|
| "https://chromereader-pa.googleapis.com/v1/fetch?key=%s";
|
| @@ -246,18 +242,32 @@
|
| MOCK_METHOD0(Unschedule, bool());
|
| };
|
|
|
| -void WaitForDBLoad(MockContentSuggestionsProviderObserver* observer,
|
| - NTPSnippetsService* service) {
|
| - if (service->ready())
|
| - return;
|
| - base::RunLoop run_loop;
|
| - EXPECT_CALL(*observer,
|
| - OnCategoryStatusChanged(_, IsCategory(KnownCategories::ARTICLES),
|
| - CategoryStatus::AVAILABLE_LOADING))
|
| - .WillOnce(testing::InvokeWithoutArgs(&run_loop, &base::RunLoop::Quit));
|
| - run_loop.Run();
|
| - Mock::VerifyAndClearExpectations(observer);
|
| -}
|
| +class WaitForDBLoad {
|
| + public:
|
| + WaitForDBLoad(MockContentSuggestionsProviderObserver* observer,
|
| + NTPSnippetsService* service)
|
| + : observer_(observer) {
|
| + EXPECT_CALL(*observer_, OnCategoryStatusChanged(_, _, _))
|
| + .WillOnce(Invoke(this, &WaitForDBLoad::OnCategoryStatusChanged));
|
| + if (!service->ready())
|
| + run_loop_.Run();
|
| + }
|
| +
|
| + ~WaitForDBLoad() { Mock::VerifyAndClearExpectations(observer_); }
|
| +
|
| + private:
|
| + void OnCategoryStatusChanged(ContentSuggestionsProvider* provider,
|
| + Category category,
|
| + CategoryStatus new_status) {
|
| + EXPECT_EQ(new_status, CategoryStatus::AVAILABLE_LOADING);
|
| + run_loop_.Quit();
|
| + }
|
| +
|
| + MockContentSuggestionsProviderObserver* observer_;
|
| + base::RunLoop run_loop_;
|
| +
|
| + DISALLOW_COPY_AND_ASSIGN(WaitForDBLoad);
|
| +};
|
|
|
| class MockImageFetcher : public ImageFetcher {
|
| public:
|
| @@ -424,9 +434,8 @@
|
| std::string json_str(GetTestJson({GetSnippet()}));
|
|
|
| LoadFromJSONString(json_str);
|
| - ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1));
|
| - const NTPSnippet& snippet =
|
| - *service()->GetSnippetsForTesting(articles_category()).front();
|
| + ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1));
|
| + const NTPSnippet& snippet = *service()->GetSnippetsForTesting().front();
|
|
|
| EXPECT_EQ(snippet.id(), kSnippetUrl);
|
| EXPECT_EQ(snippet.title(), kSnippetTitle);
|
| @@ -441,22 +450,21 @@
|
| std::string json_str(GetTestJson({GetSnippet()}));
|
|
|
| LoadFromJSONString(json_str);
|
| - EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1));
|
| + EXPECT_THAT(service()->GetSnippetsForTesting(), SizeIs(1));
|
|
|
| service()->ClearCachedSuggestions(articles_category());
|
| - EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty());
|
| + EXPECT_THAT(service()->GetSnippetsForTesting(), IsEmpty());
|
| }
|
|
|
| TEST_F(NTPSnippetsServiceTest, InsertAtFront) {
|
| std::string first("http://first");
|
| LoadFromJSONString(GetTestJson({GetSnippetWithUrl(first)}));
|
| - EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()),
|
| - ElementsAre(IdEq(first)));
|
| + EXPECT_THAT(service()->GetSnippetsForTesting(), ElementsAre(IdEq(first)));
|
|
|
| std::string second("http://second");
|
| LoadFromJSONString(GetTestJson({GetSnippetWithUrl(second)}));
|
| // The snippet loaded last should be at the first position in the list now.
|
| - EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()),
|
| + EXPECT_THAT(service()->GetSnippetsForTesting(),
|
| ElementsAre(IdEq(second), IdEq(first)));
|
| }
|
|
|
| @@ -474,49 +482,47 @@
|
| }
|
|
|
| LoadFromJSONString(GetTestJson(snippets1));
|
| - ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()),
|
| - SizeIs(snippets1.size()));
|
| + ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(snippets1.size()));
|
|
|
| LoadFromJSONString(GetTestJson(snippets2));
|
| - EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()),
|
| - SizeIs(max_snippet_count));
|
| + EXPECT_THAT(service()->GetSnippetsForTesting(), SizeIs(max_snippet_count));
|
| }
|
|
|
| TEST_F(NTPSnippetsServiceTest, LoadInvalidJson) {
|
| LoadFromJSONString(GetTestJson({GetInvalidSnippet()}));
|
| EXPECT_THAT(service()->snippets_fetcher()->last_status(),
|
| StartsWith("Received invalid JSON"));
|
| - EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty());
|
| + EXPECT_THAT(service()->GetSnippetsForTesting(), IsEmpty());
|
| }
|
|
|
| TEST_F(NTPSnippetsServiceTest, LoadInvalidJsonWithExistingSnippets) {
|
| LoadFromJSONString(GetTestJson({GetSnippet()}));
|
| - ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1));
|
| + ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1));
|
| ASSERT_EQ("OK", service()->snippets_fetcher()->last_status());
|
|
|
| LoadFromJSONString(GetTestJson({GetInvalidSnippet()}));
|
| EXPECT_THAT(service()->snippets_fetcher()->last_status(),
|
| StartsWith("Received invalid JSON"));
|
| // This should not have changed the existing snippets.
|
| - EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1));
|
| + EXPECT_THAT(service()->GetSnippetsForTesting(), SizeIs(1));
|
| }
|
|
|
| TEST_F(NTPSnippetsServiceTest, LoadIncompleteJson) {
|
| LoadFromJSONString(GetTestJson({GetIncompleteSnippet()}));
|
| EXPECT_EQ("Invalid / empty list.",
|
| service()->snippets_fetcher()->last_status());
|
| - EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty());
|
| + EXPECT_THAT(service()->GetSnippetsForTesting(), IsEmpty());
|
| }
|
|
|
| TEST_F(NTPSnippetsServiceTest, LoadIncompleteJsonWithExistingSnippets) {
|
| LoadFromJSONString(GetTestJson({GetSnippet()}));
|
| - ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1));
|
| + ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1));
|
|
|
| LoadFromJSONString(GetTestJson({GetIncompleteSnippet()}));
|
| EXPECT_EQ("Invalid / empty list.",
|
| service()->snippets_fetcher()->last_status());
|
| // This should not have changed the existing snippets.
|
| - EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1));
|
| + EXPECT_THAT(service()->GetSnippetsForTesting(), SizeIs(1));
|
| }
|
|
|
| TEST_F(NTPSnippetsServiceTest, Dismiss) {
|
| @@ -529,30 +535,30 @@
|
|
|
| LoadFromJSONString(json_str);
|
|
|
| - ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1));
|
| + ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1));
|
|
|
| // Dismissing a non-existent snippet shouldn't do anything.
|
| service()->DismissSuggestion(MakeUniqueID("http://othersite.com"));
|
| - EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1));
|
| + EXPECT_THAT(service()->GetSnippetsForTesting(), SizeIs(1));
|
|
|
| // Dismiss the snippet.
|
| service()->DismissSuggestion(MakeUniqueID(kSnippetUrl));
|
| - EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty());
|
| + EXPECT_THAT(service()->GetSnippetsForTesting(), IsEmpty());
|
|
|
| // Make sure that fetching the same snippet again does not re-add it.
|
| LoadFromJSONString(json_str);
|
| - EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty());
|
| + EXPECT_THAT(service()->GetSnippetsForTesting(), IsEmpty());
|
|
|
| // The snippet should stay dismissed even after re-creating the service.
|
| RecreateSnippetsService();
|
| LoadFromJSONString(json_str);
|
| - EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty());
|
| + EXPECT_THAT(service()->GetSnippetsForTesting(), IsEmpty());
|
|
|
| // The snippet can be added again after clearing dismissed snippets.
|
| service()->ClearDismissedSuggestionsForDebugging(articles_category());
|
| - EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty());
|
| - LoadFromJSONString(json_str);
|
| - EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1));
|
| + EXPECT_THAT(service()->GetSnippetsForTesting(), IsEmpty());
|
| + LoadFromJSONString(json_str);
|
| + EXPECT_THAT(service()->GetSnippetsForTesting(), SizeIs(1));
|
| }
|
|
|
| TEST_F(NTPSnippetsServiceTest, GetDismissed) {
|
| @@ -597,9 +603,8 @@
|
| NTPSnippet::TimeToJsonString(GetDefaultExpirationTime()))}));
|
|
|
| LoadFromJSONString(json_str);
|
| - ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1));
|
| - const NTPSnippet& snippet =
|
| - *service()->GetSnippetsForTesting(articles_category()).front();
|
| + ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1));
|
| + const NTPSnippet& snippet = *service()->GetSnippetsForTesting().front();
|
| EXPECT_EQ(snippet.id(), kSnippetUrl);
|
| EXPECT_EQ(snippet.title(), kSnippetTitle);
|
| EXPECT_EQ(snippet.snippet(), kSnippetText);
|
| @@ -610,7 +615,7 @@
|
| std::string json_str(GetTestJson({GetExpiredSnippet()}));
|
|
|
| LoadFromJSONString(json_str);
|
| - EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty());
|
| + EXPECT_THAT(service()->GetSnippetsForTesting(), IsEmpty());
|
| }
|
|
|
| TEST_F(NTPSnippetsServiceTest, TestSingleSource) {
|
| @@ -622,9 +627,8 @@
|
| GetTestJson({GetSnippetWithSources(source_urls, publishers, amp_urls)}));
|
|
|
| LoadFromJSONString(json_str);
|
| - ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1));
|
| - const NTPSnippet& snippet =
|
| - *service()->GetSnippetsForTesting(articles_category()).front();
|
| + ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1));
|
| + const NTPSnippet& snippet = *service()->GetSnippetsForTesting().front();
|
| EXPECT_EQ(snippet.sources().size(), 1u);
|
| EXPECT_EQ(snippet.id(), kSnippetUrl);
|
| EXPECT_EQ(snippet.best_source().url, GURL("http://source1.com"));
|
| @@ -641,7 +645,7 @@
|
| GetTestJson({GetSnippetWithSources(source_urls, publishers, amp_urls)}));
|
|
|
| LoadFromJSONString(json_str);
|
| - EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty());
|
| + EXPECT_THAT(service()->GetSnippetsForTesting(), IsEmpty());
|
| }
|
|
|
| TEST_F(NTPSnippetsServiceTest, TestSingleSourceWithMissingData) {
|
| @@ -653,7 +657,7 @@
|
| GetTestJson({GetSnippetWithSources(source_urls, publishers, amp_urls)}));
|
|
|
| LoadFromJSONString(json_str);
|
| - EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty());
|
| + EXPECT_THAT(service()->GetSnippetsForTesting(), IsEmpty());
|
| }
|
|
|
| TEST_F(NTPSnippetsServiceTest, TestMultipleSources) {
|
| @@ -668,9 +672,8 @@
|
| GetTestJson({GetSnippetWithSources(source_urls, publishers, amp_urls)}));
|
|
|
| LoadFromJSONString(json_str);
|
| - ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1));
|
| - const NTPSnippet& snippet =
|
| - *service()->GetSnippetsForTesting(articles_category()).front();
|
| + ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1));
|
| + const NTPSnippet& snippet = *service()->GetSnippetsForTesting().front();
|
| // Expect the first source to be chosen
|
| EXPECT_EQ(snippet.sources().size(), 2u);
|
| EXPECT_EQ(snippet.id(), kSnippetUrl);
|
| @@ -693,10 +696,9 @@
|
| GetTestJson({GetSnippetWithSources(source_urls, publishers, amp_urls)}));
|
|
|
| LoadFromJSONString(json_str);
|
| - ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1));
|
| + ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1));
|
| {
|
| - const NTPSnippet& snippet =
|
| - *service()->GetSnippetsForTesting(articles_category()).front();
|
| + const NTPSnippet& snippet = *service()->GetSnippetsForTesting().front();
|
| EXPECT_EQ(snippet.sources().size(), 2u);
|
| EXPECT_EQ(snippet.id(), kSnippetUrl);
|
| EXPECT_EQ(snippet.best_source().url, GURL("http://source2.com"));
|
| @@ -720,10 +722,9 @@
|
| GetTestJson({GetSnippetWithSources(source_urls, publishers, amp_urls)});
|
|
|
| LoadFromJSONString(json_str);
|
| - ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1));
|
| + ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1));
|
| {
|
| - const NTPSnippet& snippet =
|
| - *service()->GetSnippetsForTesting(articles_category()).front();
|
| + const NTPSnippet& snippet = *service()->GetSnippetsForTesting().front();
|
| EXPECT_EQ(snippet.sources().size(), 2u);
|
| EXPECT_EQ(snippet.id(), kSnippetUrl);
|
| EXPECT_EQ(snippet.best_source().url, GURL("http://source1.com"));
|
| @@ -748,7 +749,7 @@
|
| GetTestJson({GetSnippetWithSources(source_urls, publishers, amp_urls)});
|
|
|
| LoadFromJSONString(json_str);
|
| - EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty());
|
| + EXPECT_THAT(service()->GetSnippetsForTesting(), IsEmpty());
|
| }
|
|
|
| TEST_F(NTPSnippetsServiceTest, TestMultipleCompleteSources) {
|
| @@ -767,10 +768,9 @@
|
| GetTestJson({GetSnippetWithSources(source_urls, publishers, amp_urls)}));
|
|
|
| LoadFromJSONString(json_str);
|
| - ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1));
|
| + ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1));
|
| {
|
| - const NTPSnippet& snippet =
|
| - *service()->GetSnippetsForTesting(articles_category()).front();
|
| + const NTPSnippet& snippet = *service()->GetSnippetsForTesting().front();
|
| EXPECT_EQ(snippet.sources().size(), 3u);
|
| EXPECT_EQ(snippet.id(), kSnippetUrl);
|
| EXPECT_EQ(snippet.best_source().url, GURL("http://source1.com"));
|
| @@ -796,10 +796,9 @@
|
| GetTestJson({GetSnippetWithSources(source_urls, publishers, amp_urls)});
|
|
|
| LoadFromJSONString(json_str);
|
| - ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1));
|
| + ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1));
|
| {
|
| - const NTPSnippet& snippet =
|
| - *service()->GetSnippetsForTesting(articles_category()).front();
|
| + const NTPSnippet& snippet = *service()->GetSnippetsForTesting().front();
|
| EXPECT_EQ(snippet.sources().size(), 3u);
|
| EXPECT_EQ(snippet.id(), kSnippetUrl);
|
| EXPECT_EQ(snippet.best_source().url, GURL("http://source2.com"));
|
| @@ -825,10 +824,9 @@
|
| GetTestJson({GetSnippetWithSources(source_urls, publishers, amp_urls)});
|
|
|
| LoadFromJSONString(json_str);
|
| - ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1));
|
| + ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1));
|
| {
|
| - const NTPSnippet& snippet =
|
| - *service()->GetSnippetsForTesting(articles_category()).front();
|
| + const NTPSnippet& snippet = *service()->GetSnippetsForTesting().front();
|
| EXPECT_EQ(snippet.sources().size(), 3u);
|
| EXPECT_EQ(snippet.id(), kSnippetUrl);
|
| EXPECT_EQ(snippet.best_source().url, GURL("http://source2.com"));
|
| @@ -909,15 +907,15 @@
|
| // Add the snippet from the mashable domain.
|
| LoadFromJSONString(GetTestJson({GetSnippetWithUrlAndTimesAndSources(
|
| source_urls[0], creation, expiry, source_urls, publishers, amp_urls)}));
|
| - ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1));
|
| + ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1));
|
| // Dismiss the snippet via the mashable source corpus ID.
|
| service()->DismissSuggestion(MakeUniqueID(source_urls[0]));
|
| - EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty());
|
| + EXPECT_THAT(service()->GetSnippetsForTesting(), IsEmpty());
|
|
|
| // The same article from the AOL domain should now be detected as dismissed.
|
| LoadFromJSONString(GetTestJson({GetSnippetWithUrlAndTimesAndSources(
|
| source_urls[1], creation, expiry, source_urls, publishers, amp_urls)}));
|
| - ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty());
|
| + ASSERT_THAT(service()->GetSnippetsForTesting(), IsEmpty());
|
| }
|
|
|
| TEST_F(NTPSnippetsServiceTest, StatusChanges) {
|
| @@ -928,7 +926,7 @@
|
| service()->OnDisabledReasonChanged(DisabledReason::SIGNED_OUT);
|
| base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(NTPSnippetsService::State::DISABLED, service()->state_);
|
| - EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()),
|
| + EXPECT_THAT(service()->GetSnippetsForTesting(),
|
| IsEmpty()); // No fetch should be made.
|
|
|
| // Simulate user sign in. The service should be ready again and load snippets.
|
| @@ -941,7 +939,7 @@
|
| OnCategoryStatusChanged(_, _, CategoryStatus::AVAILABLE));
|
| base::RunLoop().RunUntilIdle();
|
| EXPECT_EQ(NTPSnippetsService::State::READY, service()->state_);
|
| - EXPECT_FALSE(service()->GetSnippetsForTesting(articles_category()).empty());
|
| + EXPECT_FALSE(service()->GetSnippetsForTesting().empty());
|
| }
|
|
|
| TEST_F(NTPSnippetsServiceTest, ImageReturnedWithTheSameId) {
|
|
|