| Index: components/ntp_snippets/offline_pages/offline_page_suggestions_provider_unittest.cc
|
| diff --git a/components/ntp_snippets/offline_pages/offline_page_suggestions_provider_unittest.cc b/components/ntp_snippets/offline_pages/offline_page_suggestions_provider_unittest.cc
|
| index bdceafd23489f3695232dba18db693e0f91036ba..039ac5b9869cb720d987cbf5314fd4d462041c44 100644
|
| --- a/components/ntp_snippets/offline_pages/offline_page_suggestions_provider_unittest.cc
|
| +++ b/components/ntp_snippets/offline_pages/offline_page_suggestions_provider_unittest.cc
|
| @@ -75,17 +75,25 @@ OfflinePageItem CreateDummyDownload(int id) {
|
| return CreateDummyItem(offline_pages::kAsyncNamespace, id);
|
| }
|
|
|
| +void CaptureDismissedSuggestions(
|
| + std::vector<ContentSuggestion>* captured_suggestions,
|
| + std::vector<ContentSuggestion> dismissed_suggestions) {
|
| + std::move(dismissed_suggestions.begin(), dismissed_suggestions.end(),
|
| + std::back_inserter(*captured_suggestions));
|
| +}
|
| +
|
| } // namespace
|
|
|
| -class MockOfflinePageModel : public StubOfflinePageModel {
|
| +class FakeOfflinePageModel : public StubOfflinePageModel {
|
| public:
|
| - MockOfflinePageModel() {}
|
| + FakeOfflinePageModel() {}
|
|
|
| void GetAllPages(const MultipleOfflinePageItemCallback& callback) override {
|
| callback.Run(items_);
|
| }
|
|
|
| - std::vector<OfflinePageItem>* items() { return &items_; }
|
| + const std::vector<OfflinePageItem>& items() { return items_; }
|
| + std::vector<OfflinePageItem>* mutable_items() { return &items_; }
|
|
|
| private:
|
| std::vector<OfflinePageItem> items_;
|
| @@ -126,8 +134,6 @@ class OfflinePageSuggestionsProviderTest : public testing::Test {
|
| return category_factory_.FromKnownCategory(KnownCategories::DOWNLOADS);
|
| }
|
|
|
| - void AddItem(OfflinePageItem item) { model()->items()->push_back(item); }
|
| -
|
| std::string GetDummySuggestionId(Category category, int id) {
|
| return provider_->MakeUniqueID(category, base::IntToString(id));
|
| }
|
| @@ -153,24 +159,13 @@ class OfflinePageSuggestionsProviderTest : public testing::Test {
|
| return provider_->ReadDismissedIDsFromPrefs(category);
|
| }
|
|
|
| - // Workaround to realize a DismissedSuggestionsCallback. Because gMock can't
|
| - // handle non-movable parameters, a helper method is needed to forward the
|
| - // call to the actual MOCK_METHOD.
|
| - void DismissedSuggestionsHelper(
|
| - std::vector<ContentSuggestion> dismissed_suggestions) {
|
| - ReceivedDismissedSuggestions(dismissed_suggestions);
|
| - }
|
| - MOCK_METHOD1(
|
| - ReceivedDismissedSuggestions,
|
| - void(const std::vector<ContentSuggestion>& dismissed_suggestions));
|
| -
|
| ContentSuggestionsProvider* provider() { return provider_.get(); }
|
| - MockOfflinePageModel* model() { return &model_; }
|
| + FakeOfflinePageModel* model() { return &model_; }
|
| MockContentSuggestionsProviderObserver* observer() { return &observer_; }
|
| TestingPrefServiceSimple* pref_service() { return pref_service_.get(); }
|
|
|
| private:
|
| - MockOfflinePageModel model_;
|
| + FakeOfflinePageModel model_;
|
| MockContentSuggestionsProviderObserver observer_;
|
| CategoryFactory category_factory_;
|
| std::unique_ptr<TestingPrefServiceSimple> pref_service_;
|
| @@ -181,10 +176,10 @@ class OfflinePageSuggestionsProviderTest : public testing::Test {
|
| };
|
|
|
| TEST_F(OfflinePageSuggestionsProviderTest, ShouldSplitAndConvertToSuggestions) {
|
| - AddItem(CreateDummyRecentTab(1));
|
| - AddItem(CreateDummyRecentTab(2));
|
| - AddItem(CreateDummyRecentTab(3));
|
| - AddItem(CreateDummyDownload(101));
|
| + model()->mutable_items()->push_back(CreateDummyRecentTab(1));
|
| + model()->mutable_items()->push_back(CreateDummyRecentTab(2));
|
| + model()->mutable_items()->push_back(CreateDummyRecentTab(3));
|
| + model()->mutable_items()->push_back(CreateDummyDownload(101));
|
|
|
| EXPECT_CALL(
|
| *observer(),
|
| @@ -210,10 +205,10 @@ TEST_F(OfflinePageSuggestionsProviderTest, ShouldSplitAndConvertToSuggestions) {
|
| }
|
|
|
| TEST_F(OfflinePageSuggestionsProviderTest, ShouldIgnoreDisabledCategories) {
|
| - AddItem(CreateDummyRecentTab(1));
|
| - AddItem(CreateDummyRecentTab(2));
|
| - AddItem(CreateDummyRecentTab(3));
|
| - AddItem(CreateDummyDownload(101));
|
| + model()->mutable_items()->push_back(CreateDummyRecentTab(1));
|
| + model()->mutable_items()->push_back(CreateDummyRecentTab(2));
|
| + model()->mutable_items()->push_back(CreateDummyRecentTab(3));
|
| + model()->mutable_items()->push_back(CreateDummyDownload(101));
|
|
|
| // Disable recent tabs, enable downloads.
|
| EXPECT_CALL(*observer(), OnNewSuggestions(_, recent_tabs_category(), _))
|
| @@ -248,9 +243,9 @@ TEST_F(OfflinePageSuggestionsProviderTest, ShouldSortByMostRecentlyVisited) {
|
| base::Time now = base::Time::Now();
|
| base::Time yesterday = now - base::TimeDelta::FromDays(1);
|
| base::Time tomorrow = now + base::TimeDelta::FromDays(1);
|
| - AddItem(CreateDummyRecentTab(1, now));
|
| - AddItem(CreateDummyRecentTab(2, yesterday));
|
| - AddItem(CreateDummyRecentTab(3, tomorrow));
|
| + model()->mutable_items()->push_back(CreateDummyRecentTab(1, now));
|
| + model()->mutable_items()->push_back(CreateDummyRecentTab(2, yesterday));
|
| + model()->mutable_items()->push_back(CreateDummyRecentTab(3, tomorrow));
|
|
|
| EXPECT_CALL(
|
| *observer(),
|
| @@ -279,10 +274,10 @@ TEST_F(OfflinePageSuggestionsProviderTest, ShouldDeliverCorrectCategoryInfo) {
|
| }
|
|
|
| TEST_F(OfflinePageSuggestionsProviderTest, ShouldDismiss) {
|
| - AddItem(CreateDummyRecentTab(1));
|
| - AddItem(CreateDummyRecentTab(2));
|
| - AddItem(CreateDummyRecentTab(3));
|
| - AddItem(CreateDummyRecentTab(4));
|
| + model()->mutable_items()->push_back(CreateDummyRecentTab(1));
|
| + model()->mutable_items()->push_back(CreateDummyRecentTab(2));
|
| + model()->mutable_items()->push_back(CreateDummyRecentTab(3));
|
| + model()->mutable_items()->push_back(CreateDummyRecentTab(4));
|
| FireOfflinePageModelChanged();
|
|
|
| // Dismiss 2 and 3.
|
| @@ -308,38 +303,33 @@ TEST_F(OfflinePageSuggestionsProviderTest, ShouldDismiss) {
|
| Mock::VerifyAndClearExpectations(observer());
|
|
|
| // And appear in the dismissed suggestions for the right category.
|
| - EXPECT_CALL(*this, ReceivedDismissedSuggestions(UnorderedElementsAre(
|
| - Property(&ContentSuggestion::url,
|
| - GURL("file:///some/folder/test2.mhtml")),
|
| - Property(&ContentSuggestion::url,
|
| - GURL("file:///some/folder/test3.mhtml")))));
|
| + std::vector<ContentSuggestion> dismissed_suggestions;
|
| provider()->GetDismissedSuggestionsForDebugging(
|
| recent_tabs_category(),
|
| - base::Bind(
|
| - &OfflinePageSuggestionsProviderTest::DismissedSuggestionsHelper,
|
| - base::Unretained(this)));
|
| - Mock::VerifyAndClearExpectations(this);
|
| + base::Bind(&CaptureDismissedSuggestions, &dismissed_suggestions));
|
| + EXPECT_THAT(
|
| + dismissed_suggestions,
|
| + UnorderedElementsAre(Property(&ContentSuggestion::url,
|
| + GURL("file:///some/folder/test2.mhtml")),
|
| + Property(&ContentSuggestion::url,
|
| + GURL("file:///some/folder/test3.mhtml"))));
|
|
|
| // The other category should have no dismissed suggestions.
|
| - EXPECT_CALL(*this, ReceivedDismissedSuggestions(IsEmpty()));
|
| + dismissed_suggestions.clear();
|
| provider()->GetDismissedSuggestionsForDebugging(
|
| downloads_category(),
|
| - base::Bind(
|
| - &OfflinePageSuggestionsProviderTest::DismissedSuggestionsHelper,
|
| - base::Unretained(this)));
|
| - Mock::VerifyAndClearExpectations(this);
|
| + base::Bind(&CaptureDismissedSuggestions, &dismissed_suggestions));
|
| + EXPECT_THAT(dismissed_suggestions, IsEmpty());
|
|
|
| // Clear dismissed suggestions.
|
| provider()->ClearDismissedSuggestionsForDebugging(recent_tabs_category());
|
|
|
| // They should be gone from the dismissed suggestions.
|
| - EXPECT_CALL(*this, ReceivedDismissedSuggestions(IsEmpty()));
|
| + dismissed_suggestions.clear();
|
| provider()->GetDismissedSuggestionsForDebugging(
|
| recent_tabs_category(),
|
| - base::Bind(
|
| - &OfflinePageSuggestionsProviderTest::DismissedSuggestionsHelper,
|
| - base::Unretained(this)));
|
| - Mock::VerifyAndClearExpectations(this);
|
| + base::Bind(&CaptureDismissedSuggestions, &dismissed_suggestions));
|
| + EXPECT_THAT(dismissed_suggestions, IsEmpty());
|
|
|
| // And appear in the reported suggestions for the category again.
|
| EXPECT_CALL(*observer(),
|
| @@ -352,9 +342,9 @@ TEST_F(OfflinePageSuggestionsProviderTest, ShouldDismiss) {
|
|
|
| TEST_F(OfflinePageSuggestionsProviderTest,
|
| ShouldInvalidateWhenOfflinePageDeleted) {
|
| - AddItem(CreateDummyRecentTab(1));
|
| - AddItem(CreateDummyRecentTab(2));
|
| - AddItem(CreateDummyRecentTab(3));
|
| + model()->mutable_items()->push_back(CreateDummyRecentTab(1));
|
| + model()->mutable_items()->push_back(CreateDummyRecentTab(2));
|
| + model()->mutable_items()->push_back(CreateDummyRecentTab(3));
|
| FireOfflinePageModelChanged();
|
|
|
| // Invalidation of suggestion 2 should be forwarded.
|
| @@ -362,13 +352,13 @@ TEST_F(OfflinePageSuggestionsProviderTest,
|
| *observer(),
|
| OnSuggestionInvalidated(_, recent_tabs_category(),
|
| GetDummySuggestionId(recent_tabs_category(), 2)));
|
| - FireOfflinePageDeleted(model()->items()->at(1));
|
| + FireOfflinePageDeleted(model()->items().at(1));
|
| }
|
|
|
| TEST_F(OfflinePageSuggestionsProviderTest, ShouldClearDismissedOnInvalidate) {
|
| - AddItem(CreateDummyRecentTab(1));
|
| - AddItem(CreateDummyRecentTab(2));
|
| - AddItem(CreateDummyRecentTab(3));
|
| + model()->mutable_items()->push_back(CreateDummyRecentTab(1));
|
| + model()->mutable_items()->push_back(CreateDummyRecentTab(2));
|
| + model()->mutable_items()->push_back(CreateDummyRecentTab(3));
|
| FireOfflinePageModelChanged();
|
| EXPECT_THAT(ReadDismissedIDsFromPrefs(recent_tabs_category()), IsEmpty());
|
| EXPECT_THAT(ReadDismissedIDsFromPrefs(downloads_category()), IsEmpty());
|
| @@ -378,15 +368,15 @@ TEST_F(OfflinePageSuggestionsProviderTest, ShouldClearDismissedOnInvalidate) {
|
| EXPECT_THAT(ReadDismissedIDsFromPrefs(recent_tabs_category()), SizeIs(1));
|
| EXPECT_THAT(ReadDismissedIDsFromPrefs(downloads_category()), IsEmpty());
|
|
|
| - FireOfflinePageDeleted(model()->items()->at(1));
|
| + FireOfflinePageDeleted(model()->items().at(1));
|
| EXPECT_THAT(ReadDismissedIDsFromPrefs(recent_tabs_category()), IsEmpty());
|
| EXPECT_THAT(ReadDismissedIDsFromPrefs(downloads_category()), IsEmpty());
|
| }
|
|
|
| TEST_F(OfflinePageSuggestionsProviderTest, ShouldClearDismissedOnFetch) {
|
| - AddItem(CreateDummyDownload(1));
|
| - AddItem(CreateDummyDownload(2));
|
| - AddItem(CreateDummyDownload(3));
|
| + model()->mutable_items()->push_back(CreateDummyDownload(1));
|
| + model()->mutable_items()->push_back(CreateDummyDownload(2));
|
| + model()->mutable_items()->push_back(CreateDummyDownload(3));
|
| FireOfflinePageModelChanged();
|
|
|
| provider()->DismissSuggestion(GetDummySuggestionId(downloads_category(), 2));
|
| @@ -394,13 +384,13 @@ TEST_F(OfflinePageSuggestionsProviderTest, ShouldClearDismissedOnFetch) {
|
| EXPECT_THAT(ReadDismissedIDsFromPrefs(recent_tabs_category()), IsEmpty());
|
| EXPECT_THAT(ReadDismissedIDsFromPrefs(downloads_category()), SizeIs(2));
|
|
|
| - model()->items()->clear();
|
| - AddItem(CreateDummyDownload(2));
|
| + model()->mutable_items()->clear();
|
| + model()->mutable_items()->push_back(CreateDummyDownload(2));
|
| FireOfflinePageModelChanged();
|
| EXPECT_THAT(ReadDismissedIDsFromPrefs(recent_tabs_category()), IsEmpty());
|
| EXPECT_THAT(ReadDismissedIDsFromPrefs(downloads_category()), SizeIs(1));
|
|
|
| - model()->items()->clear();
|
| + model()->mutable_items()->clear();
|
| FireOfflinePageModelChanged();
|
| EXPECT_THAT(ReadDismissedIDsFromPrefs(recent_tabs_category()), IsEmpty());
|
| EXPECT_THAT(ReadDismissedIDsFromPrefs(downloads_category()), IsEmpty());
|
|
|