| OLD | NEW |
| 1 // Copyright 2016 The Chromium Authors. All rights reserved. | 1 // Copyright 2016 The Chromium Authors. All rights reserved. |
| 2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
| 3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
| 4 | 4 |
| 5 #include "components/ntp_snippets/content_suggestions_service.h" | 5 #include "components/ntp_snippets/content_suggestions_service.h" |
| 6 | 6 |
| 7 #include <memory> | 7 #include <memory> |
| 8 #include <utility> | 8 #include <utility> |
| 9 #include <vector> | 9 #include <vector> |
| 10 | 10 |
| 11 #include "base/bind.h" | 11 #include "base/bind.h" |
| 12 #include "base/macros.h" | 12 #include "base/macros.h" |
| 13 #include "base/memory/ptr_util.h" | 13 #include "base/memory/ptr_util.h" |
| 14 #include "base/message_loop/message_loop.h" | 14 #include "base/message_loop/message_loop.h" |
| 15 #include "base/run_loop.h" | 15 #include "base/run_loop.h" |
| 16 #include "base/strings/string_number_conversions.h" | 16 #include "base/strings/string_number_conversions.h" |
| 17 #include "base/strings/utf_string_conversions.h" | |
| 18 #include "components/ntp_snippets/category_info.h" | 17 #include "components/ntp_snippets/category_info.h" |
| 19 #include "components/ntp_snippets/category_rankers/constant_category_ranker.h" | 18 #include "components/ntp_snippets/category_rankers/constant_category_ranker.h" |
| 20 #include "components/ntp_snippets/category_rankers/fake_category_ranker.h" | 19 #include "components/ntp_snippets/category_rankers/fake_category_ranker.h" |
| 21 #include "components/ntp_snippets/category_rankers/mock_category_ranker.h" | 20 #include "components/ntp_snippets/category_rankers/mock_category_ranker.h" |
| 22 #include "components/ntp_snippets/category_status.h" | 21 #include "components/ntp_snippets/category_status.h" |
| 23 #include "components/ntp_snippets/content_suggestion.h" | 22 #include "components/ntp_snippets/content_suggestion.h" |
| 24 #include "components/ntp_snippets/content_suggestions_provider.h" | 23 #include "components/ntp_snippets/content_suggestions_provider.h" |
| 24 #include "components/ntp_snippets/mock_content_suggestions_provider.h" |
| 25 #include "components/ntp_snippets/user_classifier.h" | 25 #include "components/ntp_snippets/user_classifier.h" |
| 26 #include "components/prefs/testing_pref_service.h" | 26 #include "components/prefs/testing_pref_service.h" |
| 27 #include "testing/gmock/include/gmock/gmock.h" | 27 #include "testing/gmock/include/gmock/gmock.h" |
| 28 #include "testing/gtest/include/gtest/gtest.h" | 28 #include "testing/gtest/include/gtest/gtest.h" |
| 29 #include "ui/gfx/image/image.h" | 29 #include "ui/gfx/image/image.h" |
| 30 | 30 |
| 31 using testing::_; | 31 using testing::_; |
| 32 using testing::ElementsAre; | 32 using testing::ElementsAre; |
| 33 using testing::Eq; | 33 using testing::Eq; |
| 34 using testing::InvokeWithoutArgs; | 34 using testing::InvokeWithoutArgs; |
| 35 using testing::IsEmpty; | 35 using testing::IsEmpty; |
| 36 using testing::Mock; | 36 using testing::Mock; |
| 37 using testing::Property; | 37 using testing::Property; |
| 38 using testing::Return; | 38 using testing::Return; |
| 39 using testing::StrictMock; | 39 using testing::StrictMock; |
| 40 using testing::UnorderedElementsAre; | 40 using testing::UnorderedElementsAre; |
| 41 | 41 |
| 42 namespace ntp_snippets { | 42 namespace ntp_snippets { |
| 43 | 43 |
| 44 namespace { | 44 namespace { |
| 45 | 45 |
| 46 // TODO(treib): This is a weird combination of a mock and a fake. Fix this. | |
| 47 class MockProvider : public ContentSuggestionsProvider { | |
| 48 public: | |
| 49 MockProvider(Observer* observer, | |
| 50 const std::vector<Category>& provided_categories) | |
| 51 : ContentSuggestionsProvider(observer) { | |
| 52 SetProvidedCategories(provided_categories); | |
| 53 } | |
| 54 | |
| 55 void SetProvidedCategories(const std::vector<Category>& provided_categories) { | |
| 56 statuses_.clear(); | |
| 57 provided_categories_ = provided_categories; | |
| 58 for (Category category : provided_categories) { | |
| 59 statuses_[category.id()] = CategoryStatus::AVAILABLE; | |
| 60 } | |
| 61 } | |
| 62 | |
| 63 CategoryStatus GetCategoryStatus(Category category) override { | |
| 64 return statuses_[category.id()]; | |
| 65 } | |
| 66 | |
| 67 CategoryInfo GetCategoryInfo(Category category) override { | |
| 68 return CategoryInfo(base::ASCIIToUTF16("Section title"), | |
| 69 ContentSuggestionsCardLayout::FULL_CARD, true, false, | |
| 70 true, false, | |
| 71 base::ASCIIToUTF16("No suggestions message")); | |
| 72 } | |
| 73 | |
| 74 void FireSuggestionsChanged( | |
| 75 Category category, | |
| 76 std::vector<ContentSuggestion> suggestions) { | |
| 77 observer()->OnNewSuggestions(this, category, std::move(suggestions)); | |
| 78 } | |
| 79 | |
| 80 void FireCategoryStatusChanged(Category category, CategoryStatus new_status) { | |
| 81 statuses_[category.id()] = new_status; | |
| 82 observer()->OnCategoryStatusChanged(this, category, new_status); | |
| 83 } | |
| 84 | |
| 85 void FireCategoryStatusChangedWithCurrentStatus(Category category) { | |
| 86 observer()->OnCategoryStatusChanged(this, category, | |
| 87 statuses_[category.id()]); | |
| 88 } | |
| 89 | |
| 90 void FireSuggestionInvalidated(const ContentSuggestion::ID& suggestion_id) { | |
| 91 observer()->OnSuggestionInvalidated(this, suggestion_id); | |
| 92 } | |
| 93 | |
| 94 MOCK_METHOD3(ClearHistory, | |
| 95 void(base::Time begin, | |
| 96 base::Time end, | |
| 97 const base::Callback<bool(const GURL& url)>& filter)); | |
| 98 MOCK_METHOD3(Fetch, | |
| 99 void(const Category&, | |
| 100 const std::set<std::string>&, | |
| 101 const FetchDoneCallback&)); | |
| 102 MOCK_METHOD1(ClearCachedSuggestions, void(Category category)); | |
| 103 MOCK_METHOD2(GetDismissedSuggestionsForDebugging, | |
| 104 void(Category category, | |
| 105 const DismissedSuggestionsCallback& callback)); | |
| 106 MOCK_METHOD1(ClearDismissedSuggestionsForDebugging, void(Category category)); | |
| 107 MOCK_METHOD1(DismissSuggestion, | |
| 108 void(const ContentSuggestion::ID& suggestion_id)); | |
| 109 MOCK_METHOD2(FetchSuggestionImage, | |
| 110 void(const ContentSuggestion::ID& suggestion_id, | |
| 111 const ImageFetchedCallback& callback)); | |
| 112 | |
| 113 private: | |
| 114 std::vector<Category> provided_categories_; | |
| 115 std::map<int, CategoryStatus> statuses_; | |
| 116 }; | |
| 117 | |
| 118 class MockServiceObserver : public ContentSuggestionsService::Observer { | 46 class MockServiceObserver : public ContentSuggestionsService::Observer { |
| 119 public: | 47 public: |
| 120 MockServiceObserver() = default; | 48 MockServiceObserver() = default; |
| 121 ~MockServiceObserver() override = default; | 49 ~MockServiceObserver() override = default; |
| 122 | 50 |
| 123 MOCK_METHOD1(OnNewSuggestions, void(Category category)); | 51 MOCK_METHOD1(OnNewSuggestions, void(Category category)); |
| 124 MOCK_METHOD2(OnCategoryStatusChanged, | 52 MOCK_METHOD2(OnCategoryStatusChanged, |
| 125 void(Category changed_category, CategoryStatus new_status)); | 53 void(Category changed_category, CategoryStatus new_status)); |
| 126 MOCK_METHOD1(OnSuggestionInvalidated, | 54 MOCK_METHOD1(OnSuggestionInvalidated, |
| 127 void(const ContentSuggestion::ID& suggestion_id)); | 55 void(const ContentSuggestion::ID& suggestion_id)); |
| (...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 180 const std::map<Category, ContentSuggestionsProvider*, Category::CompareByID>& | 108 const std::map<Category, ContentSuggestionsProvider*, Category::CompareByID>& |
| 181 providers() { | 109 providers() { |
| 182 return service()->providers_by_category_; | 110 return service()->providers_by_category_; |
| 183 } | 111 } |
| 184 | 112 |
| 185 const std::map<Category, ContentSuggestionsProvider*, Category::CompareByID>& | 113 const std::map<Category, ContentSuggestionsProvider*, Category::CompareByID>& |
| 186 dismissed_providers() { | 114 dismissed_providers() { |
| 187 return service()->dismissed_providers_by_category_; | 115 return service()->dismissed_providers_by_category_; |
| 188 } | 116 } |
| 189 | 117 |
| 190 MockProvider* MakeRegisteredMockProvider(Category provided_category) { | 118 MockContentSuggestionsProvider* MakeRegisteredMockProvider( |
| 119 Category provided_category) { |
| 191 return MakeRegisteredMockProvider( | 120 return MakeRegisteredMockProvider( |
| 192 std::vector<Category>({provided_category})); | 121 std::vector<Category>({provided_category})); |
| 193 } | 122 } |
| 194 | 123 |
| 195 MockProvider* MakeRegisteredMockProvider( | 124 MockContentSuggestionsProvider* MakeRegisteredMockProvider( |
| 196 const std::vector<Category>& provided_categories) { | 125 const std::vector<Category>& provided_categories) { |
| 197 auto provider = base::MakeUnique<testing::StrictMock<MockProvider>>( | 126 auto provider = |
| 198 service(), provided_categories); | 127 base::MakeUnique<testing::StrictMock<MockContentSuggestionsProvider>>( |
| 199 MockProvider* result = provider.get(); | 128 service(), provided_categories); |
| 129 MockContentSuggestionsProvider* result = provider.get(); |
| 200 service()->RegisterProvider(std::move(provider)); | 130 service()->RegisterProvider(std::move(provider)); |
| 201 return result; | 131 return result; |
| 202 } | 132 } |
| 203 | 133 |
| 204 void SetCategoryRanker(std::unique_ptr<CategoryRanker> category_ranker) { | 134 void SetCategoryRanker(std::unique_ptr<CategoryRanker> category_ranker) { |
| 205 category_ranker_ = std::move(category_ranker); | 135 category_ranker_ = std::move(category_ranker); |
| 206 } | 136 } |
| 207 | 137 |
| 208 MOCK_METHOD1(OnImageFetched, void(const gfx::Image&)); | 138 MOCK_METHOD1(OnImageFetched, void(const gfx::Image&)); |
| 209 | 139 |
| (...skipping 60 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 270 Category::FromKnownCategory(KnownCategories::ARTICLES); | 200 Category::FromKnownCategory(KnownCategories::ARTICLES); |
| 271 Category offline_pages_category = | 201 Category offline_pages_category = |
| 272 Category::FromKnownCategory(KnownCategories::DOWNLOADS); | 202 Category::FromKnownCategory(KnownCategories::DOWNLOADS); |
| 273 ASSERT_THAT(providers(), IsEmpty()); | 203 ASSERT_THAT(providers(), IsEmpty()); |
| 274 EXPECT_THAT(service()->GetCategories(), IsEmpty()); | 204 EXPECT_THAT(service()->GetCategories(), IsEmpty()); |
| 275 EXPECT_THAT(service()->GetCategoryStatus(articles_category), | 205 EXPECT_THAT(service()->GetCategoryStatus(articles_category), |
| 276 Eq(CategoryStatus::NOT_PROVIDED)); | 206 Eq(CategoryStatus::NOT_PROVIDED)); |
| 277 EXPECT_THAT(service()->GetCategoryStatus(offline_pages_category), | 207 EXPECT_THAT(service()->GetCategoryStatus(offline_pages_category), |
| 278 Eq(CategoryStatus::NOT_PROVIDED)); | 208 Eq(CategoryStatus::NOT_PROVIDED)); |
| 279 | 209 |
| 280 MockProvider* provider1 = MakeRegisteredMockProvider(articles_category); | 210 MockContentSuggestionsProvider* provider1 = |
| 211 MakeRegisteredMockProvider(articles_category); |
| 281 provider1->FireCategoryStatusChangedWithCurrentStatus(articles_category); | 212 provider1->FireCategoryStatusChangedWithCurrentStatus(articles_category); |
| 282 EXPECT_THAT(providers().count(offline_pages_category), Eq(0ul)); | 213 EXPECT_THAT(providers().count(offline_pages_category), Eq(0ul)); |
| 283 ASSERT_THAT(providers().count(articles_category), Eq(1ul)); | 214 ASSERT_THAT(providers().count(articles_category), Eq(1ul)); |
| 284 EXPECT_THAT(providers().at(articles_category), Eq(provider1)); | 215 EXPECT_THAT(providers().at(articles_category), Eq(provider1)); |
| 285 EXPECT_THAT(providers().size(), Eq(1ul)); | 216 EXPECT_THAT(providers().size(), Eq(1ul)); |
| 286 EXPECT_THAT(service()->GetCategories(), | 217 EXPECT_THAT(service()->GetCategories(), |
| 287 UnorderedElementsAre(articles_category)); | 218 UnorderedElementsAre(articles_category)); |
| 288 EXPECT_THAT(service()->GetCategoryStatus(articles_category), | 219 EXPECT_THAT(service()->GetCategoryStatus(articles_category), |
| 289 Eq(CategoryStatus::AVAILABLE)); | 220 Eq(CategoryStatus::AVAILABLE)); |
| 290 EXPECT_THAT(service()->GetCategoryStatus(offline_pages_category), | 221 EXPECT_THAT(service()->GetCategoryStatus(offline_pages_category), |
| 291 Eq(CategoryStatus::NOT_PROVIDED)); | 222 Eq(CategoryStatus::NOT_PROVIDED)); |
| 292 | 223 |
| 293 MockProvider* provider2 = MakeRegisteredMockProvider(offline_pages_category); | 224 MockContentSuggestionsProvider* provider2 = |
| 225 MakeRegisteredMockProvider(offline_pages_category); |
| 294 provider2->FireCategoryStatusChangedWithCurrentStatus(offline_pages_category); | 226 provider2->FireCategoryStatusChangedWithCurrentStatus(offline_pages_category); |
| 295 ASSERT_THAT(providers().count(offline_pages_category), Eq(1ul)); | 227 ASSERT_THAT(providers().count(offline_pages_category), Eq(1ul)); |
| 296 EXPECT_THAT(providers().at(articles_category), Eq(provider1)); | 228 EXPECT_THAT(providers().at(articles_category), Eq(provider1)); |
| 297 ASSERT_THAT(providers().count(articles_category), Eq(1ul)); | 229 ASSERT_THAT(providers().count(articles_category), Eq(1ul)); |
| 298 EXPECT_THAT(providers().at(offline_pages_category), Eq(provider2)); | 230 EXPECT_THAT(providers().at(offline_pages_category), Eq(provider2)); |
| 299 EXPECT_THAT(providers().size(), Eq(2ul)); | 231 EXPECT_THAT(providers().size(), Eq(2ul)); |
| 300 EXPECT_THAT(service()->GetCategories(), | 232 EXPECT_THAT(service()->GetCategories(), |
| 301 UnorderedElementsAre(offline_pages_category, articles_category)); | 233 UnorderedElementsAre(offline_pages_category, articles_category)); |
| 302 EXPECT_THAT(service()->GetCategoryStatus(articles_category), | 234 EXPECT_THAT(service()->GetCategoryStatus(articles_category), |
| 303 Eq(CategoryStatus::AVAILABLE)); | 235 Eq(CategoryStatus::AVAILABLE)); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 320 EXPECT_THAT(service()->GetCategories(), IsEmpty()); | 252 EXPECT_THAT(service()->GetCategories(), IsEmpty()); |
| 321 EXPECT_THAT(service()->GetSuggestionsForCategory(articles_category), | 253 EXPECT_THAT(service()->GetSuggestionsForCategory(articles_category), |
| 322 IsEmpty()); | 254 IsEmpty()); |
| 323 } | 255 } |
| 324 | 256 |
| 325 TEST_F(ContentSuggestionsServiceTest, ShouldRedirectFetchSuggestionImage) { | 257 TEST_F(ContentSuggestionsServiceTest, ShouldRedirectFetchSuggestionImage) { |
| 326 Category articles_category = | 258 Category articles_category = |
| 327 Category::FromKnownCategory(KnownCategories::ARTICLES); | 259 Category::FromKnownCategory(KnownCategories::ARTICLES); |
| 328 Category offline_pages_category = | 260 Category offline_pages_category = |
| 329 Category::FromKnownCategory(KnownCategories::DOWNLOADS); | 261 Category::FromKnownCategory(KnownCategories::DOWNLOADS); |
| 330 MockProvider* provider1 = MakeRegisteredMockProvider(articles_category); | 262 MockContentSuggestionsProvider* provider1 = |
| 331 MockProvider* provider2 = MakeRegisteredMockProvider(offline_pages_category); | 263 MakeRegisteredMockProvider(articles_category); |
| 264 MockContentSuggestionsProvider* provider2 = |
| 265 MakeRegisteredMockProvider(offline_pages_category); |
| 332 | 266 |
| 333 provider1->FireSuggestionsChanged(articles_category, | 267 provider1->FireSuggestionsChanged(articles_category, |
| 334 CreateSuggestions(articles_category, {1})); | 268 CreateSuggestions(articles_category, {1})); |
| 335 ContentSuggestion::ID suggestion_id(articles_category, "1"); | 269 ContentSuggestion::ID suggestion_id(articles_category, "1"); |
| 336 | 270 |
| 337 EXPECT_CALL(*provider1, FetchSuggestionImage(suggestion_id, _)); | 271 EXPECT_CALL(*provider1, FetchSuggestionImage(suggestion_id, _)); |
| 338 EXPECT_CALL(*provider2, FetchSuggestionImage(_, _)).Times(0); | 272 EXPECT_CALL(*provider2, FetchSuggestionImage(_, _)).Times(0); |
| 339 service()->FetchSuggestionImage( | 273 service()->FetchSuggestionImage( |
| 340 suggestion_id, base::Bind(&ContentSuggestionsServiceTest::OnImageFetched, | 274 suggestion_id, base::Bind(&ContentSuggestionsServiceTest::OnImageFetched, |
| 341 base::Unretained(this))); | 275 base::Unretained(this))); |
| (...skipping 13 matching lines...) Expand all Loading... |
| 355 suggestion_id, base::Bind(&ContentSuggestionsServiceTest::OnImageFetched, | 289 suggestion_id, base::Bind(&ContentSuggestionsServiceTest::OnImageFetched, |
| 356 base::Unretained(this))); | 290 base::Unretained(this))); |
| 357 run_loop.Run(); | 291 run_loop.Run(); |
| 358 } | 292 } |
| 359 | 293 |
| 360 TEST_F(ContentSuggestionsServiceTest, ShouldRedirectDismissSuggestion) { | 294 TEST_F(ContentSuggestionsServiceTest, ShouldRedirectDismissSuggestion) { |
| 361 Category articles_category = | 295 Category articles_category = |
| 362 Category::FromKnownCategory(KnownCategories::ARTICLES); | 296 Category::FromKnownCategory(KnownCategories::ARTICLES); |
| 363 Category offline_pages_category = | 297 Category offline_pages_category = |
| 364 Category::FromKnownCategory(KnownCategories::DOWNLOADS); | 298 Category::FromKnownCategory(KnownCategories::DOWNLOADS); |
| 365 MockProvider* provider1 = MakeRegisteredMockProvider(articles_category); | 299 MockContentSuggestionsProvider* provider1 = |
| 366 MockProvider* provider2 = MakeRegisteredMockProvider(offline_pages_category); | 300 MakeRegisteredMockProvider(articles_category); |
| 301 MockContentSuggestionsProvider* provider2 = |
| 302 MakeRegisteredMockProvider(offline_pages_category); |
| 367 | 303 |
| 368 provider2->FireSuggestionsChanged( | 304 provider2->FireSuggestionsChanged( |
| 369 offline_pages_category, CreateSuggestions(offline_pages_category, {11})); | 305 offline_pages_category, CreateSuggestions(offline_pages_category, {11})); |
| 370 ContentSuggestion::ID suggestion_id(offline_pages_category, "11"); | 306 ContentSuggestion::ID suggestion_id(offline_pages_category, "11"); |
| 371 | 307 |
| 372 EXPECT_CALL(*provider1, DismissSuggestion(_)).Times(0); | 308 EXPECT_CALL(*provider1, DismissSuggestion(_)).Times(0); |
| 373 EXPECT_CALL(*provider2, DismissSuggestion(suggestion_id)); | 309 EXPECT_CALL(*provider2, DismissSuggestion(suggestion_id)); |
| 374 service()->DismissSuggestion(suggestion_id); | 310 service()->DismissSuggestion(suggestion_id); |
| 375 } | 311 } |
| 376 | 312 |
| 377 TEST_F(ContentSuggestionsServiceTest, ShouldRedirectSuggestionInvalidated) { | 313 TEST_F(ContentSuggestionsServiceTest, ShouldRedirectSuggestionInvalidated) { |
| 378 Category articles_category = | 314 Category articles_category = |
| 379 Category::FromKnownCategory(KnownCategories::ARTICLES); | 315 Category::FromKnownCategory(KnownCategories::ARTICLES); |
| 380 | 316 |
| 381 MockProvider* provider = MakeRegisteredMockProvider(articles_category); | 317 MockContentSuggestionsProvider* provider = |
| 318 MakeRegisteredMockProvider(articles_category); |
| 382 MockServiceObserver observer; | 319 MockServiceObserver observer; |
| 383 service()->AddObserver(&observer); | 320 service()->AddObserver(&observer); |
| 384 | 321 |
| 385 provider->FireSuggestionsChanged( | 322 provider->FireSuggestionsChanged( |
| 386 articles_category, CreateSuggestions(articles_category, {11, 12, 13})); | 323 articles_category, CreateSuggestions(articles_category, {11, 12, 13})); |
| 387 ExpectThatSuggestionsAre(articles_category, {11, 12, 13}); | 324 ExpectThatSuggestionsAre(articles_category, {11, 12, 13}); |
| 388 | 325 |
| 389 ContentSuggestion::ID suggestion_id(articles_category, "12"); | 326 ContentSuggestion::ID suggestion_id(articles_category, "12"); |
| 390 EXPECT_CALL(observer, OnSuggestionInvalidated(suggestion_id)); | 327 EXPECT_CALL(observer, OnSuggestionInvalidated(suggestion_id)); |
| 391 provider->FireSuggestionInvalidated(suggestion_id); | 328 provider->FireSuggestionInvalidated(suggestion_id); |
| (...skipping 12 matching lines...) Expand all Loading... |
| 404 service()->RemoveObserver(&observer); | 341 service()->RemoveObserver(&observer); |
| 405 } | 342 } |
| 406 | 343 |
| 407 TEST_F(ContentSuggestionsServiceTest, ShouldForwardSuggestions) { | 344 TEST_F(ContentSuggestionsServiceTest, ShouldForwardSuggestions) { |
| 408 Category articles_category = | 345 Category articles_category = |
| 409 Category::FromKnownCategory(KnownCategories::ARTICLES); | 346 Category::FromKnownCategory(KnownCategories::ARTICLES); |
| 410 Category offline_pages_category = | 347 Category offline_pages_category = |
| 411 Category::FromKnownCategory(KnownCategories::DOWNLOADS); | 348 Category::FromKnownCategory(KnownCategories::DOWNLOADS); |
| 412 | 349 |
| 413 // Create and register providers | 350 // Create and register providers |
| 414 MockProvider* provider1 = MakeRegisteredMockProvider(articles_category); | 351 MockContentSuggestionsProvider* provider1 = |
| 352 MakeRegisteredMockProvider(articles_category); |
| 415 provider1->FireCategoryStatusChangedWithCurrentStatus(articles_category); | 353 provider1->FireCategoryStatusChangedWithCurrentStatus(articles_category); |
| 416 MockProvider* provider2 = MakeRegisteredMockProvider(offline_pages_category); | 354 MockContentSuggestionsProvider* provider2 = |
| 355 MakeRegisteredMockProvider(offline_pages_category); |
| 417 provider2->FireCategoryStatusChangedWithCurrentStatus(offline_pages_category); | 356 provider2->FireCategoryStatusChangedWithCurrentStatus(offline_pages_category); |
| 418 ASSERT_THAT(providers().count(articles_category), Eq(1ul)); | 357 ASSERT_THAT(providers().count(articles_category), Eq(1ul)); |
| 419 EXPECT_THAT(providers().at(articles_category), Eq(provider1)); | 358 EXPECT_THAT(providers().at(articles_category), Eq(provider1)); |
| 420 ASSERT_THAT(providers().count(offline_pages_category), Eq(1ul)); | 359 ASSERT_THAT(providers().count(offline_pages_category), Eq(1ul)); |
| 421 EXPECT_THAT(providers().at(offline_pages_category), Eq(provider2)); | 360 EXPECT_THAT(providers().at(offline_pages_category), Eq(provider2)); |
| 422 | 361 |
| 423 // Create and register observer | 362 // Create and register observer |
| 424 MockServiceObserver observer; | 363 MockServiceObserver observer; |
| 425 service()->AddObserver(&observer); | 364 service()->AddObserver(&observer); |
| 426 | 365 |
| (...skipping 51 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 478 | 417 |
| 479 TEST_F(ContentSuggestionsServiceTest, | 418 TEST_F(ContentSuggestionsServiceTest, |
| 480 ShouldNotReturnCategoryInfoForNonexistentCategory) { | 419 ShouldNotReturnCategoryInfoForNonexistentCategory) { |
| 481 Category category = Category::FromKnownCategory(KnownCategories::DOWNLOADS); | 420 Category category = Category::FromKnownCategory(KnownCategories::DOWNLOADS); |
| 482 base::Optional<CategoryInfo> result = service()->GetCategoryInfo(category); | 421 base::Optional<CategoryInfo> result = service()->GetCategoryInfo(category); |
| 483 EXPECT_FALSE(result.has_value()); | 422 EXPECT_FALSE(result.has_value()); |
| 484 } | 423 } |
| 485 | 424 |
| 486 TEST_F(ContentSuggestionsServiceTest, ShouldReturnCategoryInfo) { | 425 TEST_F(ContentSuggestionsServiceTest, ShouldReturnCategoryInfo) { |
| 487 Category category = Category::FromKnownCategory(KnownCategories::DOWNLOADS); | 426 Category category = Category::FromKnownCategory(KnownCategories::DOWNLOADS); |
| 488 MockProvider* provider = MakeRegisteredMockProvider(category); | 427 MockContentSuggestionsProvider* provider = |
| 428 MakeRegisteredMockProvider(category); |
| 489 provider->FireCategoryStatusChangedWithCurrentStatus(category); | 429 provider->FireCategoryStatusChangedWithCurrentStatus(category); |
| 490 base::Optional<CategoryInfo> result = service()->GetCategoryInfo(category); | 430 base::Optional<CategoryInfo> result = service()->GetCategoryInfo(category); |
| 491 ASSERT_TRUE(result.has_value()); | 431 ASSERT_TRUE(result.has_value()); |
| 492 CategoryInfo expected = provider->GetCategoryInfo(category); | 432 CategoryInfo expected = provider->GetCategoryInfo(category); |
| 493 const CategoryInfo& actual = result.value(); | 433 const CategoryInfo& actual = result.value(); |
| 494 EXPECT_THAT(expected.title(), Eq(actual.title())); | 434 EXPECT_THAT(expected.title(), Eq(actual.title())); |
| 495 EXPECT_THAT(expected.card_layout(), Eq(actual.card_layout())); | 435 EXPECT_THAT(expected.card_layout(), Eq(actual.card_layout())); |
| 496 EXPECT_THAT(expected.has_more_action(), Eq(actual.has_more_action())); | 436 EXPECT_THAT(expected.has_more_action(), Eq(actual.has_more_action())); |
| 497 EXPECT_THAT(expected.has_reload_action(), Eq(actual.has_reload_action())); | 437 EXPECT_THAT(expected.has_reload_action(), Eq(actual.has_reload_action())); |
| 498 EXPECT_THAT(expected.has_view_all_action(), Eq(actual.has_view_all_action())); | 438 EXPECT_THAT(expected.has_view_all_action(), Eq(actual.has_view_all_action())); |
| 499 } | 439 } |
| 500 | 440 |
| 501 TEST_F(ContentSuggestionsServiceTest, | 441 TEST_F(ContentSuggestionsServiceTest, |
| 502 ShouldRegisterNewCategoryOnNewSuggestions) { | 442 ShouldRegisterNewCategoryOnNewSuggestions) { |
| 503 Category category = Category::FromKnownCategory(KnownCategories::DOWNLOADS); | 443 Category category = Category::FromKnownCategory(KnownCategories::DOWNLOADS); |
| 504 MockProvider* provider = MakeRegisteredMockProvider(category); | 444 MockContentSuggestionsProvider* provider = |
| 445 MakeRegisteredMockProvider(category); |
| 505 provider->FireCategoryStatusChangedWithCurrentStatus(category); | 446 provider->FireCategoryStatusChangedWithCurrentStatus(category); |
| 506 MockServiceObserver observer; | 447 MockServiceObserver observer; |
| 507 service()->AddObserver(&observer); | 448 service()->AddObserver(&observer); |
| 508 | 449 |
| 509 // Provider starts providing |new_category| without calling | 450 // Provider starts providing |new_category| without calling |
| 510 // |OnCategoryStatusChanged|. This is supported for now until further | 451 // |OnCategoryStatusChanged|. This is supported for now until further |
| 511 // reconsideration. | 452 // reconsideration. |
| 512 Category new_category = | 453 Category new_category = |
| 513 Category::FromKnownCategory(KnownCategories::ARTICLES); | 454 Category::FromKnownCategory(KnownCategories::ARTICLES); |
| 514 provider->SetProvidedCategories( | 455 provider->SetProvidedCategories( |
| (...skipping 14 matching lines...) Expand all Loading... |
| 529 EXPECT_THAT(providers().at(new_category), Eq(provider)); | 470 EXPECT_THAT(providers().at(new_category), Eq(provider)); |
| 530 EXPECT_THAT(service()->GetCategoryStatus(new_category), | 471 EXPECT_THAT(service()->GetCategoryStatus(new_category), |
| 531 Eq(CategoryStatus::AVAILABLE)); | 472 Eq(CategoryStatus::AVAILABLE)); |
| 532 | 473 |
| 533 service()->RemoveObserver(&observer); | 474 service()->RemoveObserver(&observer); |
| 534 } | 475 } |
| 535 | 476 |
| 536 TEST_F(ContentSuggestionsServiceTest, | 477 TEST_F(ContentSuggestionsServiceTest, |
| 537 ShouldRegisterNewCategoryOnCategoryStatusChanged) { | 478 ShouldRegisterNewCategoryOnCategoryStatusChanged) { |
| 538 Category category = Category::FromKnownCategory(KnownCategories::DOWNLOADS); | 479 Category category = Category::FromKnownCategory(KnownCategories::DOWNLOADS); |
| 539 MockProvider* provider = MakeRegisteredMockProvider(category); | 480 MockContentSuggestionsProvider* provider = |
| 481 MakeRegisteredMockProvider(category); |
| 540 provider->FireCategoryStatusChangedWithCurrentStatus(category); | 482 provider->FireCategoryStatusChangedWithCurrentStatus(category); |
| 541 MockServiceObserver observer; | 483 MockServiceObserver observer; |
| 542 service()->AddObserver(&observer); | 484 service()->AddObserver(&observer); |
| 543 | 485 |
| 544 // Provider starts providing |new_category| and calls | 486 // Provider starts providing |new_category| and calls |
| 545 // |OnCategoryStatusChanged|, but the category is not yet available. | 487 // |OnCategoryStatusChanged|, but the category is not yet available. |
| 546 Category new_category = | 488 Category new_category = |
| 547 Category::FromKnownCategory(KnownCategories::ARTICLES); | 489 Category::FromKnownCategory(KnownCategories::ARTICLES); |
| 548 provider->SetProvidedCategories( | 490 provider->SetProvidedCategories( |
| 549 std::vector<Category>({category, new_category})); | 491 std::vector<Category>({category, new_category})); |
| 550 EXPECT_CALL(observer, OnCategoryStatusChanged(new_category, | 492 EXPECT_CALL(observer, OnCategoryStatusChanged(new_category, |
| 551 CategoryStatus::INITIALIZING)); | 493 CategoryStatus::INITIALIZING)); |
| 552 provider->FireCategoryStatusChanged(new_category, | 494 provider->FireCategoryStatusChanged(new_category, |
| 553 CategoryStatus::INITIALIZING); | 495 CategoryStatus::INITIALIZING); |
| 554 | 496 |
| 555 ASSERT_THAT(providers().count(new_category), Eq(1ul)); | 497 ASSERT_THAT(providers().count(new_category), Eq(1ul)); |
| 556 EXPECT_THAT(providers().at(new_category), Eq(provider)); | 498 EXPECT_THAT(providers().at(new_category), Eq(provider)); |
| 557 ExpectThatSuggestionsAre(new_category, std::vector<int>()); | 499 ExpectThatSuggestionsAre(new_category, std::vector<int>()); |
| 558 EXPECT_THAT(service()->GetCategoryStatus(new_category), | 500 EXPECT_THAT(service()->GetCategoryStatus(new_category), |
| 559 Eq(CategoryStatus::INITIALIZING)); | 501 Eq(CategoryStatus::INITIALIZING)); |
| 560 EXPECT_THAT(service()->GetCategories(), | 502 EXPECT_THAT(service()->GetCategories(), |
| 561 UnorderedElementsAre(category, new_category)); | 503 UnorderedElementsAre(category, new_category)); |
| 562 | 504 |
| 563 service()->RemoveObserver(&observer); | 505 service()->RemoveObserver(&observer); |
| 564 } | 506 } |
| 565 | 507 |
| 566 TEST_F(ContentSuggestionsServiceTest, ShouldRemoveCategoryWhenNotProvided) { | 508 TEST_F(ContentSuggestionsServiceTest, ShouldRemoveCategoryWhenNotProvided) { |
| 567 Category category = Category::FromKnownCategory(KnownCategories::DOWNLOADS); | 509 Category category = Category::FromKnownCategory(KnownCategories::DOWNLOADS); |
| 568 MockProvider* provider = MakeRegisteredMockProvider(category); | 510 MockContentSuggestionsProvider* provider = |
| 511 MakeRegisteredMockProvider(category); |
| 569 MockServiceObserver observer; | 512 MockServiceObserver observer; |
| 570 service()->AddObserver(&observer); | 513 service()->AddObserver(&observer); |
| 571 | 514 |
| 572 provider->FireSuggestionsChanged(category, | 515 provider->FireSuggestionsChanged(category, |
| 573 CreateSuggestions(category, {1, 2})); | 516 CreateSuggestions(category, {1, 2})); |
| 574 ExpectThatSuggestionsAre(category, {1, 2}); | 517 ExpectThatSuggestionsAre(category, {1, 2}); |
| 575 | 518 |
| 576 EXPECT_CALL(observer, | 519 EXPECT_CALL(observer, |
| 577 OnCategoryStatusChanged(category, CategoryStatus::NOT_PROVIDED)); | 520 OnCategoryStatusChanged(category, CategoryStatus::NOT_PROVIDED)); |
| 578 provider->FireCategoryStatusChanged(category, CategoryStatus::NOT_PROVIDED); | 521 provider->FireCategoryStatusChanged(category, CategoryStatus::NOT_PROVIDED); |
| 579 | 522 |
| 580 EXPECT_THAT(service()->GetCategoryStatus(category), | 523 EXPECT_THAT(service()->GetCategoryStatus(category), |
| 581 Eq(CategoryStatus::NOT_PROVIDED)); | 524 Eq(CategoryStatus::NOT_PROVIDED)); |
| 582 EXPECT_TRUE(service()->GetCategories().empty()); | 525 EXPECT_TRUE(service()->GetCategories().empty()); |
| 583 ExpectThatSuggestionsAre(category, std::vector<int>()); | 526 ExpectThatSuggestionsAre(category, std::vector<int>()); |
| 584 | 527 |
| 585 service()->RemoveObserver(&observer); | 528 service()->RemoveObserver(&observer); |
| 586 } | 529 } |
| 587 | 530 |
| 588 TEST_F(ContentSuggestionsServiceTest, ShouldForwardClearHistoryToProviders) { | 531 TEST_F(ContentSuggestionsServiceTest, ShouldForwardClearHistoryToProviders) { |
| 589 Category category = Category::FromKnownCategory(KnownCategories::DOWNLOADS); | 532 Category category = Category::FromKnownCategory(KnownCategories::DOWNLOADS); |
| 590 MockProvider* provider = MakeRegisteredMockProvider(category); | 533 MockContentSuggestionsProvider* provider = |
| 534 MakeRegisteredMockProvider(category); |
| 591 base::Time begin = base::Time::FromTimeT(123); | 535 base::Time begin = base::Time::FromTimeT(123); |
| 592 base::Time end = base::Time::FromTimeT(456); | 536 base::Time end = base::Time::FromTimeT(456); |
| 593 EXPECT_CALL(*provider, ClearHistory(begin, end, _)); | 537 EXPECT_CALL(*provider, ClearHistory(begin, end, _)); |
| 594 base::Callback<bool(const GURL& url)> filter; | 538 base::Callback<bool(const GURL& url)> filter; |
| 595 service()->ClearHistory(begin, end, filter); | 539 service()->ClearHistory(begin, end, filter); |
| 596 } | 540 } |
| 597 | 541 |
| 598 TEST_F(ContentSuggestionsServiceTest, | 542 TEST_F(ContentSuggestionsServiceTest, |
| 599 ShouldForwardClearHistoryToCategoryRanker) { | 543 ShouldForwardClearHistoryToCategoryRanker) { |
| 600 auto mock_ranker = base::MakeUnique<MockCategoryRanker>(); | 544 auto mock_ranker = base::MakeUnique<MockCategoryRanker>(); |
| 601 MockCategoryRanker* raw_mock_ranker = mock_ranker.get(); | 545 MockCategoryRanker* raw_mock_ranker = mock_ranker.get(); |
| 602 SetCategoryRanker(std::move(mock_ranker)); | 546 SetCategoryRanker(std::move(mock_ranker)); |
| 603 | 547 |
| 604 // The service is recreated to pick up the new ranker. | 548 // The service is recreated to pick up the new ranker. |
| 605 ResetService(); | 549 ResetService(); |
| 606 | 550 |
| 607 base::Time begin = base::Time::FromTimeT(123), | 551 base::Time begin = base::Time::FromTimeT(123), |
| 608 end = base::Time::FromTimeT(456); | 552 end = base::Time::FromTimeT(456); |
| 609 EXPECT_CALL(*raw_mock_ranker, ClearHistory(begin, end)); | 553 EXPECT_CALL(*raw_mock_ranker, ClearHistory(begin, end)); |
| 610 base::Callback<bool(const GURL& url)> filter; | 554 base::Callback<bool(const GURL& url)> filter; |
| 611 service()->ClearHistory(begin, end, filter); | 555 service()->ClearHistory(begin, end, filter); |
| 612 } | 556 } |
| 613 | 557 |
| 614 TEST_F(ContentSuggestionsServiceTest, ShouldForwardDeleteAllHistoryURLs) { | 558 TEST_F(ContentSuggestionsServiceTest, ShouldForwardDeleteAllHistoryURLs) { |
| 615 StrictMock<MockServiceObserver> observer; | 559 StrictMock<MockServiceObserver> observer; |
| 616 service()->AddObserver(&observer); | 560 service()->AddObserver(&observer); |
| 617 EXPECT_CALL(observer, OnFullRefreshRequired()); | 561 EXPECT_CALL(observer, OnFullRefreshRequired()); |
| 618 | 562 |
| 619 Category category = Category::FromKnownCategory(KnownCategories::DOWNLOADS); | 563 Category category = Category::FromKnownCategory(KnownCategories::DOWNLOADS); |
| 620 MockProvider* provider = MakeRegisteredMockProvider(category); | 564 MockContentSuggestionsProvider* provider = |
| 565 MakeRegisteredMockProvider(category); |
| 621 EXPECT_CALL(*provider, ClearHistory(base::Time(), base::Time::Max(), _)); | 566 EXPECT_CALL(*provider, ClearHistory(base::Time(), base::Time::Max(), _)); |
| 622 static_cast<history::HistoryServiceObserver*>(service())->OnURLsDeleted( | 567 static_cast<history::HistoryServiceObserver*>(service())->OnURLsDeleted( |
| 623 /*history_service=*/nullptr, /*all_history=*/true, /*expired=*/false, | 568 /*history_service=*/nullptr, /*all_history=*/true, /*expired=*/false, |
| 624 history::URLRows(), /*favicon_urls=*/std::set<GURL>()); | 569 history::URLRows(), /*favicon_urls=*/std::set<GURL>()); |
| 625 | 570 |
| 626 service()->RemoveObserver(&observer); | 571 service()->RemoveObserver(&observer); |
| 627 } | 572 } |
| 628 | 573 |
| 629 TEST_F(ContentSuggestionsServiceTest, ShouldIgnoreExpiredURLDeletions) { | 574 TEST_F(ContentSuggestionsServiceTest, ShouldIgnoreExpiredURLDeletions) { |
| 630 Category category = Category::FromKnownCategory(KnownCategories::DOWNLOADS); | 575 Category category = Category::FromKnownCategory(KnownCategories::DOWNLOADS); |
| (...skipping 37 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
| 668 /*favicon_urls=*/std::set<GURL>()); | 613 /*favicon_urls=*/std::set<GURL>()); |
| 669 } | 614 } |
| 670 | 615 |
| 671 TEST_F(ContentSuggestionsServiceTest, | 616 TEST_F(ContentSuggestionsServiceTest, |
| 672 ShouldClearHistoryForMultipleURLDeletion) { | 617 ShouldClearHistoryForMultipleURLDeletion) { |
| 673 StrictMock<MockServiceObserver> observer; | 618 StrictMock<MockServiceObserver> observer; |
| 674 service()->AddObserver(&observer); | 619 service()->AddObserver(&observer); |
| 675 EXPECT_CALL(observer, OnFullRefreshRequired()); | 620 EXPECT_CALL(observer, OnFullRefreshRequired()); |
| 676 | 621 |
| 677 Category category = Category::FromKnownCategory(KnownCategories::DOWNLOADS); | 622 Category category = Category::FromKnownCategory(KnownCategories::DOWNLOADS); |
| 678 MockProvider* provider = MakeRegisteredMockProvider(category); | 623 MockContentSuggestionsProvider* provider = |
| 624 MakeRegisteredMockProvider(category); |
| 679 EXPECT_CALL(*provider, ClearHistory(base::Time(), base::Time::Max(), _)); | 625 EXPECT_CALL(*provider, ClearHistory(base::Time(), base::Time::Max(), _)); |
| 680 | 626 |
| 681 static_cast<history::HistoryServiceObserver*>(service())->OnURLsDeleted( | 627 static_cast<history::HistoryServiceObserver*>(service())->OnURLsDeleted( |
| 682 /*history_service=*/nullptr, /*all_history=*/false, | 628 /*history_service=*/nullptr, /*all_history=*/false, |
| 683 /*expired=*/false, | 629 /*expired=*/false, |
| 684 history::URLRows({history::URLRow(GURL("http://google.com")), | 630 history::URLRows({history::URLRow(GURL("http://google.com")), |
| 685 history::URLRow(GURL("http://youtube.com"))}), | 631 history::URLRow(GURL("http://youtube.com"))}), |
| 686 /*favicon_urls=*/std::set<GURL>()); | 632 /*favicon_urls=*/std::set<GURL>()); |
| 687 | 633 |
| 688 service()->RemoveObserver(&observer); | 634 service()->RemoveObserver(&observer); |
| 689 } | 635 } |
| 690 | 636 |
| 691 TEST_F(ContentSuggestionsServiceTest, ShouldForwardFetch) { | 637 TEST_F(ContentSuggestionsServiceTest, ShouldForwardFetch) { |
| 692 Category category = Category::FromKnownCategory(KnownCategories::ARTICLES); | 638 Category category = Category::FromKnownCategory(KnownCategories::ARTICLES); |
| 693 std::set<std::string> known_suggestions; | 639 std::set<std::string> known_suggestions; |
| 694 MockProvider* provider = MakeRegisteredMockProvider(category); | 640 MockContentSuggestionsProvider* provider = |
| 641 MakeRegisteredMockProvider(category); |
| 695 provider->FireCategoryStatusChangedWithCurrentStatus(category); | 642 provider->FireCategoryStatusChangedWithCurrentStatus(category); |
| 696 EXPECT_CALL(*provider, Fetch(category, known_suggestions, _)); | 643 EXPECT_CALL(*provider, Fetch(category, known_suggestions, _)); |
| 697 service()->Fetch(category, known_suggestions, FetchDoneCallback()); | 644 service()->Fetch(category, known_suggestions, FetchDoneCallback()); |
| 698 } | 645 } |
| 699 | 646 |
| 700 TEST_F(ContentSuggestionsServiceTest, DismissAndRestoreCategory) { | 647 TEST_F(ContentSuggestionsServiceTest, DismissAndRestoreCategory) { |
| 701 // Register a category with one suggestion. | 648 // Register a category with one suggestion. |
| 702 Category category = Category::FromKnownCategory(KnownCategories::ARTICLES); | 649 Category category = Category::FromKnownCategory(KnownCategories::ARTICLES); |
| 703 MockProvider* provider = MakeRegisteredMockProvider(category); | 650 MockContentSuggestionsProvider* provider = |
| 651 MakeRegisteredMockProvider(category); |
| 704 provider->FireCategoryStatusChangedWithCurrentStatus(category); | 652 provider->FireCategoryStatusChangedWithCurrentStatus(category); |
| 705 provider->FireSuggestionsChanged(category, CreateSuggestions(category, {42})); | 653 provider->FireSuggestionsChanged(category, CreateSuggestions(category, {42})); |
| 706 | 654 |
| 707 EXPECT_THAT(service()->GetCategories(), UnorderedElementsAre(category)); | 655 EXPECT_THAT(service()->GetCategories(), UnorderedElementsAre(category)); |
| 708 EXPECT_THAT(service()->GetCategoryStatus(category), | 656 EXPECT_THAT(service()->GetCategoryStatus(category), |
| 709 Eq(CategoryStatus::AVAILABLE)); | 657 Eq(CategoryStatus::AVAILABLE)); |
| 710 ExpectThatSuggestionsAre(category, {42}); | 658 ExpectThatSuggestionsAre(category, {42}); |
| 711 EXPECT_THAT(providers().count(category), Eq(1ul)); | 659 EXPECT_THAT(providers().count(category), Eq(1ul)); |
| 712 EXPECT_THAT(dismissed_providers(), IsEmpty()); | 660 EXPECT_THAT(dismissed_providers(), IsEmpty()); |
| 713 | 661 |
| (...skipping 18 matching lines...) Expand all Loading... |
| 732 EXPECT_THAT(providers().count(category), Eq(1ul)); | 680 EXPECT_THAT(providers().count(category), Eq(1ul)); |
| 733 EXPECT_THAT(dismissed_providers(), IsEmpty()); | 681 EXPECT_THAT(dismissed_providers(), IsEmpty()); |
| 734 } | 682 } |
| 735 | 683 |
| 736 TEST_F(ContentSuggestionsServiceTest, ShouldRestoreDismissedCategories) { | 684 TEST_F(ContentSuggestionsServiceTest, ShouldRestoreDismissedCategories) { |
| 737 // Create and register provider. | 685 // Create and register provider. |
| 738 Category category1 = Category::FromIDValue(1); | 686 Category category1 = Category::FromIDValue(1); |
| 739 Category category2 = Category::FromIDValue(2); | 687 Category category2 = Category::FromIDValue(2); |
| 740 | 688 |
| 741 // Setup and verify initial state. | 689 // Setup and verify initial state. |
| 742 MockProvider* provider = MakeRegisteredMockProvider({category1, category2}); | 690 MockContentSuggestionsProvider* provider = |
| 691 MakeRegisteredMockProvider({category1, category2}); |
| 743 provider->FireCategoryStatusChangedWithCurrentStatus(category1); | 692 provider->FireCategoryStatusChangedWithCurrentStatus(category1); |
| 744 provider->FireCategoryStatusChangedWithCurrentStatus(category2); | 693 provider->FireCategoryStatusChangedWithCurrentStatus(category2); |
| 745 | 694 |
| 746 ASSERT_THAT(service()->GetCategoryStatus(category1), | 695 ASSERT_THAT(service()->GetCategoryStatus(category1), |
| 747 Eq(CategoryStatus::AVAILABLE)); | 696 Eq(CategoryStatus::AVAILABLE)); |
| 748 ASSERT_THAT(service()->GetCategoryStatus(category2), | 697 ASSERT_THAT(service()->GetCategoryStatus(category2), |
| 749 Eq(CategoryStatus::AVAILABLE)); | 698 Eq(CategoryStatus::AVAILABLE)); |
| 750 | 699 |
| 751 // Dismiss all the categories. None should be provided now. | 700 // Dismiss all the categories. None should be provided now. |
| 752 service()->DismissCategory(category1); | 701 service()->DismissCategory(category1); |
| (...skipping 26 matching lines...) Expand all Loading... |
| 779 | 728 |
| 780 EXPECT_THAT(service()->GetCategoryStatus(category1), | 729 EXPECT_THAT(service()->GetCategoryStatus(category1), |
| 781 Eq(CategoryStatus::AVAILABLE)); | 730 Eq(CategoryStatus::AVAILABLE)); |
| 782 EXPECT_THAT(service()->GetCategoryStatus(category2), | 731 EXPECT_THAT(service()->GetCategoryStatus(category2), |
| 783 Eq(CategoryStatus::NOT_PROVIDED)); | 732 Eq(CategoryStatus::NOT_PROVIDED)); |
| 784 } | 733 } |
| 785 | 734 |
| 786 TEST_F(ContentSuggestionsServiceTest, ShouldRestoreDismissalsFromPrefs) { | 735 TEST_F(ContentSuggestionsServiceTest, ShouldRestoreDismissalsFromPrefs) { |
| 787 // Register a category with one suggestion. | 736 // Register a category with one suggestion. |
| 788 Category category = Category::FromKnownCategory(KnownCategories::ARTICLES); | 737 Category category = Category::FromKnownCategory(KnownCategories::ARTICLES); |
| 789 MockProvider* provider = MakeRegisteredMockProvider(category); | 738 MockContentSuggestionsProvider* provider = |
| 739 MakeRegisteredMockProvider(category); |
| 790 provider->FireCategoryStatusChangedWithCurrentStatus(category); | 740 provider->FireCategoryStatusChangedWithCurrentStatus(category); |
| 791 | 741 |
| 792 // For a regular initialisation, the category is not dismissed. | 742 // For a regular initialisation, the category is not dismissed. |
| 793 ASSERT_FALSE(service()->IsCategoryDismissed(category)); | 743 ASSERT_FALSE(service()->IsCategoryDismissed(category)); |
| 794 | 744 |
| 795 // Dismiss the category. | 745 // Dismiss the category. |
| 796 service()->DismissCategory(category); | 746 service()->DismissCategory(category); |
| 797 ASSERT_TRUE(service()->IsCategoryDismissed(category)); | 747 ASSERT_TRUE(service()->IsCategoryDismissed(category)); |
| 798 | 748 |
| 799 // Simulate a Chrome restart. The category should still be dismissed. | 749 // Simulate a Chrome restart. The category should still be dismissed. |
| (...skipping 17 matching lines...) Expand all Loading... |
| 817 | 767 |
| 818 auto fake_ranker = base::MakeUnique<FakeCategoryRanker>(); | 768 auto fake_ranker = base::MakeUnique<FakeCategoryRanker>(); |
| 819 FakeCategoryRanker* raw_fake_ranker = fake_ranker.get(); | 769 FakeCategoryRanker* raw_fake_ranker = fake_ranker.get(); |
| 820 SetCategoryRanker(std::move(fake_ranker)); | 770 SetCategoryRanker(std::move(fake_ranker)); |
| 821 | 771 |
| 822 raw_fake_ranker->SetOrder({first_category, second_category}); | 772 raw_fake_ranker->SetOrder({first_category, second_category}); |
| 823 | 773 |
| 824 // The service is recreated to pick up the new ranker. | 774 // The service is recreated to pick up the new ranker. |
| 825 ResetService(); | 775 ResetService(); |
| 826 | 776 |
| 827 MockProvider* provider = | 777 MockContentSuggestionsProvider* provider = |
| 828 MakeRegisteredMockProvider({first_category, second_category}); | 778 MakeRegisteredMockProvider({first_category, second_category}); |
| 829 provider->FireCategoryStatusChangedWithCurrentStatus(first_category); | 779 provider->FireCategoryStatusChangedWithCurrentStatus(first_category); |
| 830 provider->FireCategoryStatusChangedWithCurrentStatus(second_category); | 780 provider->FireCategoryStatusChangedWithCurrentStatus(second_category); |
| 831 | 781 |
| 832 EXPECT_THAT(service()->GetCategories(), | 782 EXPECT_THAT(service()->GetCategories(), |
| 833 ElementsAre(first_category, second_category)); | 783 ElementsAre(first_category, second_category)); |
| 834 | 784 |
| 835 // The order to display (in the ranker) changes. | 785 // The order to display (in the ranker) changes. |
| 836 raw_fake_ranker->SetOrder({second_category, first_category}); | 786 raw_fake_ranker->SetOrder({second_category, first_category}); |
| 837 | 787 |
| 838 // Categories order should reflect the new order. | 788 // Categories order should reflect the new order. |
| 839 EXPECT_THAT(service()->GetCategories(), | 789 EXPECT_THAT(service()->GetCategories(), |
| 840 ElementsAre(second_category, first_category)); | 790 ElementsAre(second_category, first_category)); |
| 841 } | 791 } |
| 842 | 792 |
| 843 TEST_F(ContentSuggestionsServiceTest, | 793 TEST_F(ContentSuggestionsServiceTest, |
| 844 ShouldForwardDismissedCategoryToCategoryRanker) { | 794 ShouldForwardDismissedCategoryToCategoryRanker) { |
| 845 auto mock_ranker = base::MakeUnique<MockCategoryRanker>(); | 795 auto mock_ranker = base::MakeUnique<MockCategoryRanker>(); |
| 846 MockCategoryRanker* raw_mock_ranker = mock_ranker.get(); | 796 MockCategoryRanker* raw_mock_ranker = mock_ranker.get(); |
| 847 SetCategoryRanker(std::move(mock_ranker)); | 797 SetCategoryRanker(std::move(mock_ranker)); |
| 848 | 798 |
| 849 // The service is recreated to pick up the new ranker. | 799 // The service is recreated to pick up the new ranker. |
| 850 ResetService(); | 800 ResetService(); |
| 851 | 801 |
| 852 Category category = Category::FromKnownCategory(KnownCategories::BOOKMARKS); | 802 Category category = Category::FromKnownCategory(KnownCategories::BOOKMARKS); |
| 853 MockProvider* provider = MakeRegisteredMockProvider(category); | 803 MockContentSuggestionsProvider* provider = |
| 804 MakeRegisteredMockProvider(category); |
| 854 provider->FireCategoryStatusChangedWithCurrentStatus(category); | 805 provider->FireCategoryStatusChangedWithCurrentStatus(category); |
| 855 | 806 |
| 856 EXPECT_CALL(*raw_mock_ranker, OnCategoryDismissed(category)); | 807 EXPECT_CALL(*raw_mock_ranker, OnCategoryDismissed(category)); |
| 857 service()->DismissCategory(category); | 808 service()->DismissCategory(category); |
| 858 } | 809 } |
| 859 | 810 |
| 860 } // namespace ntp_snippets | 811 } // namespace ntp_snippets |
| OLD | NEW |