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 |