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 4a988657369bbb8487d8ba821dc535fed552207b..b20d0c2be463fb9f0da51f16ff41cd4d0ee1a657 100644 |
| --- a/components/ntp_snippets/ntp_snippets_service_unittest.cc |
| +++ b/components/ntp_snippets/ntp_snippets_service_unittest.cc |
| @@ -64,6 +64,10 @@ MATCHER_P(IdEq, value, "") { |
| return arg->id() == value; |
| } |
| +MATCHER_P(IsCategory, id, "") { |
| + return arg.id() == static_cast<int>(id); |
|
Marc Treib
2016/08/22 15:06:47
return arg.IsKnownCategory(id);
?
sfiera
2016/08/24 14:35:57
This way is usable with server-categories (e.g. Is
|
| +} |
| + |
| const base::Time::Exploded kDefaultCreationTime = {2015, 11, 4, 25, 13, 46, 45}; |
| const char kTestContentSnippetsServerFormat[] = |
| "https://chromereader-pa.googleapis.com/v1/fetch?key=%s"; |
| @@ -242,32 +246,18 @@ class MockScheduler : public NTPSnippetsScheduler { |
| MOCK_METHOD0(Unschedule, bool()); |
| }; |
| -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(); |
|
Marc Treib
2016/08/22 15:06:47
Wait, did this even work? Looks like if |service|
sfiera
2016/08/24 14:35:57
I doubt it. Probably, this was never used when the
|
| - } |
| - |
| - ~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); |
| -}; |
| +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 MockImageFetcher : public ImageFetcher { |
| public: |
| @@ -422,8 +412,9 @@ TEST_F(NTPSnippetsServiceTest, Full) { |
| std::string json_str(GetTestJson({GetSnippet()})); |
| LoadFromJSONString(json_str); |
| - ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1)); |
| - const NTPSnippet& snippet = *service()->GetSnippetsForTesting().front(); |
| + ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1)); |
| + const NTPSnippet& snippet = |
| + *service()->GetSnippetsForTesting(articles_category()).front(); |
| EXPECT_EQ(snippet.id(), kSnippetUrl); |
| EXPECT_EQ(snippet.title(), kSnippetTitle); |
| @@ -438,21 +429,22 @@ TEST_F(NTPSnippetsServiceTest, Clear) { |
| std::string json_str(GetTestJson({GetSnippet()})); |
| LoadFromJSONString(json_str); |
| - EXPECT_THAT(service()->GetSnippetsForTesting(), SizeIs(1)); |
| + EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1)); |
| service()->ClearCachedSuggestionsForDebugging(articles_category()); |
| - EXPECT_THAT(service()->GetSnippetsForTesting(), IsEmpty()); |
| + EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty()); |
| } |
| TEST_F(NTPSnippetsServiceTest, InsertAtFront) { |
| std::string first("http://first"); |
| LoadFromJSONString(GetTestJson({GetSnippetWithUrl(first)})); |
| - EXPECT_THAT(service()->GetSnippetsForTesting(), ElementsAre(IdEq(first))); |
| + EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), |
| + 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(), |
| + EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), |
| ElementsAre(IdEq(second), IdEq(first))); |
| } |
| @@ -470,47 +462,49 @@ TEST_F(NTPSnippetsServiceTest, LimitNumSnippets) { |
| } |
| LoadFromJSONString(GetTestJson(snippets1)); |
| - ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(snippets1.size())); |
| + ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), |
| + SizeIs(snippets1.size())); |
| LoadFromJSONString(GetTestJson(snippets2)); |
| - EXPECT_THAT(service()->GetSnippetsForTesting(), SizeIs(max_snippet_count)); |
| + EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), |
| + 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(), IsEmpty()); |
| + EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty()); |
| } |
| TEST_F(NTPSnippetsServiceTest, LoadInvalidJsonWithExistingSnippets) { |
| LoadFromJSONString(GetTestJson({GetSnippet()})); |
| - ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1)); |
| + ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), 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(), SizeIs(1)); |
| + EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1)); |
| } |
| TEST_F(NTPSnippetsServiceTest, LoadIncompleteJson) { |
| LoadFromJSONString(GetTestJson({GetIncompleteSnippet()})); |
| EXPECT_EQ("Invalid / empty list.", |
| service()->snippets_fetcher()->last_status()); |
| - EXPECT_THAT(service()->GetSnippetsForTesting(), IsEmpty()); |
| + EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty()); |
| } |
| TEST_F(NTPSnippetsServiceTest, LoadIncompleteJsonWithExistingSnippets) { |
| LoadFromJSONString(GetTestJson({GetSnippet()})); |
| - ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1)); |
| + ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), 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(), SizeIs(1)); |
| + EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1)); |
| } |
| TEST_F(NTPSnippetsServiceTest, Dismiss) { |
| @@ -523,30 +517,30 @@ TEST_F(NTPSnippetsServiceTest, Dismiss) { |
| LoadFromJSONString(json_str); |
| - ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1)); |
| + ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1)); |
| // Dismissing a non-existent snippet shouldn't do anything. |
| service()->DismissSuggestion(MakeUniqueID("http://othersite.com")); |
| - EXPECT_THAT(service()->GetSnippetsForTesting(), SizeIs(1)); |
| + EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1)); |
| // Dismiss the snippet. |
| service()->DismissSuggestion(MakeUniqueID(kSnippetUrl)); |
| - EXPECT_THAT(service()->GetSnippetsForTesting(), IsEmpty()); |
| + EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty()); |
| // Make sure that fetching the same snippet again does not re-add it. |
| LoadFromJSONString(json_str); |
| - EXPECT_THAT(service()->GetSnippetsForTesting(), IsEmpty()); |
| + EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty()); |
| // The snippet should stay dismissed even after re-creating the service. |
| RecreateSnippetsService(); |
| LoadFromJSONString(json_str); |
| - EXPECT_THAT(service()->GetSnippetsForTesting(), IsEmpty()); |
| + EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty()); |
| // The snippet can be added again after clearing dismissed snippets. |
| service()->ClearDismissedSuggestionsForDebugging(articles_category()); |
| - EXPECT_THAT(service()->GetSnippetsForTesting(), IsEmpty()); |
| + EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty()); |
| LoadFromJSONString(json_str); |
| - EXPECT_THAT(service()->GetSnippetsForTesting(), SizeIs(1)); |
| + EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1)); |
| } |
| TEST_F(NTPSnippetsServiceTest, GetDismissed) { |
| @@ -573,8 +567,9 @@ TEST_F(NTPSnippetsServiceTest, CreationTimestampParseFail) { |
| NTPSnippet::TimeToJsonString(GetDefaultExpirationTime()))})); |
| LoadFromJSONString(json_str); |
| - ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1)); |
| - const NTPSnippet& snippet = *service()->GetSnippetsForTesting().front(); |
| + ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1)); |
| + const NTPSnippet& snippet = |
| + *service()->GetSnippetsForTesting(articles_category()).front(); |
| EXPECT_EQ(snippet.id(), kSnippetUrl); |
| EXPECT_EQ(snippet.title(), kSnippetTitle); |
| EXPECT_EQ(snippet.snippet(), kSnippetText); |
| @@ -585,7 +580,7 @@ TEST_F(NTPSnippetsServiceTest, RemoveExpiredContent) { |
| std::string json_str(GetTestJson({GetExpiredSnippet()})); |
| LoadFromJSONString(json_str); |
| - EXPECT_THAT(service()->GetSnippetsForTesting(), IsEmpty()); |
| + EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty()); |
| } |
| TEST_F(NTPSnippetsServiceTest, TestSingleSource) { |
| @@ -597,8 +592,9 @@ TEST_F(NTPSnippetsServiceTest, TestSingleSource) { |
| GetTestJson({GetSnippetWithSources(source_urls, publishers, amp_urls)})); |
| LoadFromJSONString(json_str); |
| - ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1)); |
| - const NTPSnippet& snippet = *service()->GetSnippetsForTesting().front(); |
| + ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1)); |
| + const NTPSnippet& snippet = |
| + *service()->GetSnippetsForTesting(articles_category()).front(); |
| EXPECT_EQ(snippet.sources().size(), 1u); |
| EXPECT_EQ(snippet.id(), kSnippetUrl); |
| EXPECT_EQ(snippet.best_source().url, GURL("http://source1.com")); |
| @@ -615,7 +611,7 @@ TEST_F(NTPSnippetsServiceTest, TestSingleSourceWithMalformedUrl) { |
| GetTestJson({GetSnippetWithSources(source_urls, publishers, amp_urls)})); |
| LoadFromJSONString(json_str); |
| - EXPECT_THAT(service()->GetSnippetsForTesting(), IsEmpty()); |
| + EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty()); |
| } |
| TEST_F(NTPSnippetsServiceTest, TestSingleSourceWithMissingData) { |
| @@ -627,7 +623,7 @@ TEST_F(NTPSnippetsServiceTest, TestSingleSourceWithMissingData) { |
| GetTestJson({GetSnippetWithSources(source_urls, publishers, amp_urls)})); |
| LoadFromJSONString(json_str); |
| - EXPECT_THAT(service()->GetSnippetsForTesting(), IsEmpty()); |
| + EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty()); |
| } |
| TEST_F(NTPSnippetsServiceTest, TestMultipleSources) { |
| @@ -642,8 +638,9 @@ TEST_F(NTPSnippetsServiceTest, TestMultipleSources) { |
| GetTestJson({GetSnippetWithSources(source_urls, publishers, amp_urls)})); |
| LoadFromJSONString(json_str); |
| - ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1)); |
| - const NTPSnippet& snippet = *service()->GetSnippetsForTesting().front(); |
| + ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1)); |
| + const NTPSnippet& snippet = |
| + *service()->GetSnippetsForTesting(articles_category()).front(); |
| // Expect the first source to be chosen |
| EXPECT_EQ(snippet.sources().size(), 2u); |
| EXPECT_EQ(snippet.id(), kSnippetUrl); |
| @@ -666,9 +663,10 @@ TEST_F(NTPSnippetsServiceTest, TestMultipleIncompleteSources) { |
| GetTestJson({GetSnippetWithSources(source_urls, publishers, amp_urls)})); |
| LoadFromJSONString(json_str); |
| - ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1)); |
| + ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1)); |
| { |
| - const NTPSnippet& snippet = *service()->GetSnippetsForTesting().front(); |
| + const NTPSnippet& snippet = |
| + *service()->GetSnippetsForTesting(articles_category()).front(); |
| EXPECT_EQ(snippet.sources().size(), 2u); |
| EXPECT_EQ(snippet.id(), kSnippetUrl); |
| EXPECT_EQ(snippet.best_source().url, GURL("http://source2.com")); |
| @@ -692,9 +690,10 @@ TEST_F(NTPSnippetsServiceTest, TestMultipleIncompleteSources) { |
| GetTestJson({GetSnippetWithSources(source_urls, publishers, amp_urls)}); |
| LoadFromJSONString(json_str); |
| - ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1)); |
| + ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1)); |
| { |
| - const NTPSnippet& snippet = *service()->GetSnippetsForTesting().front(); |
| + const NTPSnippet& snippet = |
| + *service()->GetSnippetsForTesting(articles_category()).front(); |
| EXPECT_EQ(snippet.sources().size(), 2u); |
| EXPECT_EQ(snippet.id(), kSnippetUrl); |
| EXPECT_EQ(snippet.best_source().url, GURL("http://source1.com")); |
| @@ -719,7 +718,7 @@ TEST_F(NTPSnippetsServiceTest, TestMultipleIncompleteSources) { |
| GetTestJson({GetSnippetWithSources(source_urls, publishers, amp_urls)}); |
| LoadFromJSONString(json_str); |
| - EXPECT_THAT(service()->GetSnippetsForTesting(), IsEmpty()); |
| + EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty()); |
| } |
| TEST_F(NTPSnippetsServiceTest, TestMultipleCompleteSources) { |
| @@ -738,9 +737,10 @@ TEST_F(NTPSnippetsServiceTest, TestMultipleCompleteSources) { |
| GetTestJson({GetSnippetWithSources(source_urls, publishers, amp_urls)})); |
| LoadFromJSONString(json_str); |
| - ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1)); |
| + ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1)); |
| { |
| - const NTPSnippet& snippet = *service()->GetSnippetsForTesting().front(); |
| + const NTPSnippet& snippet = |
| + *service()->GetSnippetsForTesting(articles_category()).front(); |
| EXPECT_EQ(snippet.sources().size(), 3u); |
| EXPECT_EQ(snippet.id(), kSnippetUrl); |
| EXPECT_EQ(snippet.best_source().url, GURL("http://source1.com")); |
| @@ -766,9 +766,10 @@ TEST_F(NTPSnippetsServiceTest, TestMultipleCompleteSources) { |
| GetTestJson({GetSnippetWithSources(source_urls, publishers, amp_urls)}); |
| LoadFromJSONString(json_str); |
| - ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1)); |
| + ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1)); |
| { |
| - const NTPSnippet& snippet = *service()->GetSnippetsForTesting().front(); |
| + const NTPSnippet& snippet = |
| + *service()->GetSnippetsForTesting(articles_category()).front(); |
| EXPECT_EQ(snippet.sources().size(), 3u); |
| EXPECT_EQ(snippet.id(), kSnippetUrl); |
| EXPECT_EQ(snippet.best_source().url, GURL("http://source2.com")); |
| @@ -794,9 +795,10 @@ TEST_F(NTPSnippetsServiceTest, TestMultipleCompleteSources) { |
| GetTestJson({GetSnippetWithSources(source_urls, publishers, amp_urls)}); |
| LoadFromJSONString(json_str); |
| - ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1)); |
| + ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1)); |
| { |
| - const NTPSnippet& snippet = *service()->GetSnippetsForTesting().front(); |
| + const NTPSnippet& snippet = |
| + *service()->GetSnippetsForTesting(articles_category()).front(); |
| EXPECT_EQ(snippet.sources().size(), 3u); |
| EXPECT_EQ(snippet.id(), kSnippetUrl); |
| EXPECT_EQ(snippet.best_source().url, GURL("http://source2.com")); |
| @@ -877,15 +879,15 @@ TEST_F(NTPSnippetsServiceTest, DismissShouldRespectAllKnownUrls) { |
| // Add the snippet from the mashable domain. |
| LoadFromJSONString(GetTestJson({GetSnippetWithUrlAndTimesAndSources( |
| source_urls[0], creation, expiry, source_urls, publishers, amp_urls)})); |
| - ASSERT_THAT(service()->GetSnippetsForTesting(), SizeIs(1)); |
| + ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), SizeIs(1)); |
| // Dismiss the snippet via the mashable source corpus ID. |
| service()->DismissSuggestion(MakeUniqueID(source_urls[0])); |
| - EXPECT_THAT(service()->GetSnippetsForTesting(), IsEmpty()); |
| + EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), 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(), IsEmpty()); |
| + ASSERT_THAT(service()->GetSnippetsForTesting(articles_category()), IsEmpty()); |
| } |
| TEST_F(NTPSnippetsServiceTest, StatusChanges) { |
| @@ -896,7 +898,7 @@ TEST_F(NTPSnippetsServiceTest, StatusChanges) { |
| service()->OnDisabledReasonChanged(DisabledReason::SIGNED_OUT); |
| base::RunLoop().RunUntilIdle(); |
| EXPECT_EQ(NTPSnippetsService::State::DISABLED, service()->state_); |
| - EXPECT_THAT(service()->GetSnippetsForTesting(), |
| + EXPECT_THAT(service()->GetSnippetsForTesting(articles_category()), |
| IsEmpty()); // No fetch should be made. |
| // Simulate user sign in. The service should be ready again and load snippets. |
| @@ -909,7 +911,7 @@ TEST_F(NTPSnippetsServiceTest, StatusChanges) { |
| OnCategoryStatusChanged(_, _, CategoryStatus::AVAILABLE)); |
| base::RunLoop().RunUntilIdle(); |
| EXPECT_EQ(NTPSnippetsService::State::READY, service()->state_); |
| - EXPECT_FALSE(service()->GetSnippetsForTesting().empty()); |
| + EXPECT_FALSE(service()->GetSnippetsForTesting(articles_category()).empty()); |
| } |
| TEST_F(NTPSnippetsServiceTest, ImageReturnedWithTheSameId) { |