Index: components/ntp_snippets/reading_list/reading_list_suggestions_provider_unittest.cc |
diff --git a/components/ntp_snippets/reading_list/reading_list_suggestions_provider_unittest.cc b/components/ntp_snippets/reading_list/reading_list_suggestions_provider_unittest.cc |
index 907a5c377eb5974c9df98433fa77e388533e7310..6f91ed2ef8b244c5c9aeea090885910f9dcf47db 100644 |
--- a/components/ntp_snippets/reading_list/reading_list_suggestions_provider_unittest.cc |
+++ b/components/ntp_snippets/reading_list/reading_list_suggestions_provider_unittest.cc |
@@ -15,17 +15,29 @@ namespace ntp_snippets { |
namespace { |
+using ::testing::_; |
+using ::testing::ElementsAre; |
+using ::testing::IsEmpty; |
+using ::testing::Property; |
+ |
class ReadingListSuggestionsProviderTest : public ::testing::Test { |
public: |
ReadingListSuggestionsProviderTest() { |
+ std::unique_ptr<base::SimpleTestClock> clock = |
+ base::MakeUnique<base::SimpleTestClock>(); |
+ clock_ = clock.get(); |
model_ = base::MakeUnique<ReadingListModelImpl>( |
- /*storage_layer=*/nullptr, /*pref_service=*/nullptr, |
- base::MakeUnique<base::SimpleTestClock>()); |
+ /*storage_layer=*/nullptr, /*pref_service=*/nullptr, std::move(clock)); |
+ } |
+ |
+ void CreateProvider() { |
EXPECT_CALL(observer_, |
- OnCategoryStatusChanged(testing::_, ReadingListCategory(), |
+ OnCategoryStatusChanged(_, ReadingListCategory(), |
CategoryStatus::AVAILABLE_LOADING)) |
.RetiresOnSaturation(); |
- |
+ EXPECT_CALL(observer_, OnCategoryStatusChanged(_, ReadingListCategory(), |
+ CategoryStatus::AVAILABLE)) |
+ .RetiresOnSaturation(); |
provider_ = base::MakeUnique<ReadingListSuggestionsProvider>(&observer_, |
model_.get()); |
} |
@@ -35,16 +47,79 @@ class ReadingListSuggestionsProviderTest : public ::testing::Test { |
} |
protected: |
+ base::SimpleTestClock* clock_; |
std::unique_ptr<ReadingListModelImpl> model_; |
testing::StrictMock<MockContentSuggestionsProviderObserver> observer_; |
std::unique_ptr<ReadingListSuggestionsProvider> provider_; |
}; |
TEST_F(ReadingListSuggestionsProviderTest, CategoryInfo) { |
+ EXPECT_CALL(observer_, OnNewSuggestions(_, ReadingListCategory(), IsEmpty())) |
+ .RetiresOnSaturation(); |
+ CreateProvider(); |
+ |
CategoryInfo categoryInfo = provider_->GetCategoryInfo(ReadingListCategory()); |
EXPECT_EQ(ContentSuggestionsAdditionalAction::VIEW_ALL, |
categoryInfo.additional_action()); |
} |
+TEST_F(ReadingListSuggestionsProviderTest, ReturnsThreeLatestUnreadSuggestion) { |
+ GURL url_unread1 = GURL("http://www.foo1.bar"); |
+ GURL url_unread2 = GURL("http://www.foo2.bar"); |
+ GURL url_unread3 = GURL("http://www.foo3.bar"); |
+ GURL url_unread4 = GURL("http://www.foo4.bar"); |
+ GURL url_read1 = GURL("http://www.bar.foor"); |
+ std::string title_unread1 = "title1"; |
+ std::string title_unread2 = "title2"; |
+ std::string title_unread3 = "title3"; |
+ std::string title_unread4 = "title4"; |
+ std::string title_read1 = "title_read1"; |
+ model_->AddEntry(url_unread1, title_unread1, |
+ reading_list::ADDED_VIA_CURRENT_APP); |
+ clock_->Advance(base::TimeDelta::FromMilliseconds(10)); |
+ model_->AddEntry(url_unread2, title_unread2, |
+ reading_list::ADDED_VIA_CURRENT_APP); |
+ clock_->Advance(base::TimeDelta::FromMilliseconds(10)); |
+ model_->AddEntry(url_read1, title_read1, reading_list::ADDED_VIA_CURRENT_APP); |
+ model_->SetReadStatus(url_read1, true); |
+ clock_->Advance(base::TimeDelta::FromMilliseconds(10)); |
+ model_->AddEntry(url_unread3, title_unread3, |
+ reading_list::ADDED_VIA_CURRENT_APP); |
+ clock_->Advance(base::TimeDelta::FromMilliseconds(10)); |
+ model_->AddEntry(url_unread4, title_unread4, |
+ reading_list::ADDED_VIA_CURRENT_APP); |
+ |
+ EXPECT_CALL(observer_, |
+ OnNewSuggestions( |
+ _, ReadingListCategory(), |
+ ElementsAre(Property(&ContentSuggestion::url, url_unread4), |
+ Property(&ContentSuggestion::url, url_unread3), |
+ Property(&ContentSuggestion::url, url_unread2)))); |
+ |
+ CreateProvider(); |
+} |
+ |
+// Tests that the provider returns only unread suggestions even if there is less |
+// unread suggestions than the maximum number of suggestions. |
+TEST_F(ReadingListSuggestionsProviderTest, ReturnsOnlyUnreadSuggestion) { |
+ GURL url_unread1 = GURL("http://www.foo1.bar"); |
+ GURL url_read1 = GURL("http://www.bar.foor"); |
+ std::string title_unread1 = "title1"; |
+ std::string title_read1 = "title_read1"; |
+ model_->AddEntry(url_unread1, title_unread1, |
+ reading_list::ADDED_VIA_CURRENT_APP); |
+ clock_->Advance(base::TimeDelta::FromMilliseconds(10)); |
+ model_->AddEntry(url_read1, title_read1, reading_list::ADDED_VIA_CURRENT_APP); |
+ model_->SetReadStatus(url_read1, true); |
+ |
+ EXPECT_CALL(observer_, |
+ OnNewSuggestions( |
+ _, ReadingListCategory(), |
+ ElementsAre(Property(&ContentSuggestion::url, url_unread1)))); |
+ |
+ CreateProvider(); |
+} |
+ |
} // namespace |
+ |
} // namespace ntp_snippets |