Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(78)

Side by Side Diff: components/ntp_snippets/ntp_snippets_service_unittest.cc

Issue 2377663002: [NTP Snippets] Introduce ContentSuggestion::ID (Closed)
Patch Set: rebase Created 4 years, 2 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 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/ntp_snippets_service.h" 5 #include "components/ntp_snippets/ntp_snippets_service.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <utility> 8 #include <utility>
9 #include <vector> 9 #include <vector>
10 10
(...skipping 281 matching lines...) Expand 10 before | Expand all | Expand 10 after
292 void OnCategoryStatusChanged(ContentSuggestionsProvider* provider, 292 void OnCategoryStatusChanged(ContentSuggestionsProvider* provider,
293 Category category, 293 Category category,
294 CategoryStatus new_status) override { 294 CategoryStatus new_status) override {
295 if (category.IsKnownCategory(KnownCategories::ARTICLES) && 295 if (category.IsKnownCategory(KnownCategories::ARTICLES) &&
296 IsCategoryStatusAvailable(new_status)) { 296 IsCategoryStatusAvailable(new_status)) {
297 loaded_.Signal(); 297 loaded_.Signal();
298 } 298 }
299 statuses_[category] = new_status; 299 statuses_[category] = new_status;
300 } 300 }
301 301
302 void OnSuggestionInvalidated(ContentSuggestionsProvider* provider, 302 void OnSuggestionInvalidated(
303 Category category, 303 ContentSuggestionsProvider* provider,
304 const std::string& suggestion_id) override {} 304 const ContentSuggestion::ID& suggestion_id) override {}
305 305
306 const std::map<Category, CategoryStatus, Category::CompareByID>& statuses() 306 const std::map<Category, CategoryStatus, Category::CompareByID>& statuses()
307 const { 307 const {
308 return statuses_; 308 return statuses_;
309 } 309 }
310 310
311 CategoryStatus StatusForCategory(Category category) const { 311 CategoryStatus StatusForCategory(Category category) const {
312 auto it = statuses_.find(category); 312 auto it = statuses_.find(category);
313 if (it == statuses_.end()) { 313 if (it == statuses_.end()) {
314 return CategoryStatus::NOT_PROVIDED; 314 return CategoryStatus::NOT_PROVIDED;
(...skipping 101 matching lines...) Expand 10 before | Expand all | Expand 10 after
416 base::RunLoop().RunUntilIdle(); 416 base::RunLoop().RunUntilIdle();
417 observer_->WaitForLoad(); 417 observer_->WaitForLoad();
418 } 418 }
419 419
420 void ResetSnippetsService(std::unique_ptr<NTPSnippetsService>* service) { 420 void ResetSnippetsService(std::unique_ptr<NTPSnippetsService>* service) {
421 service->reset(); 421 service->reset();
422 observer_.reset(); 422 observer_.reset();
423 *service = MakeSnippetsService(); 423 *service = MakeSnippetsService();
424 } 424 }
425 425
426 std::string MakeArticleID(const NTPSnippetsService& service, 426 ContentSuggestion::ID MakeArticleID(const std::string& id_within_category) {
427 const std::string& within_category_id) { 427 return ContentSuggestion::ID(articles_category(), id_within_category);
428 return service.MakeUniqueID(articles_category(), within_category_id);
429 } 428 }
430 429
431 Category articles_category() { 430 Category articles_category() {
432 return category_factory_.FromKnownCategory(KnownCategories::ARTICLES); 431 return category_factory_.FromKnownCategory(KnownCategories::ARTICLES);
433 } 432 }
434 433
435 std::string MakeOtherID(const NTPSnippetsService& service, 434 ContentSuggestion::ID MakeOtherID(const std::string& id_within_category) {
436 const std::string& within_category_id) { 435 return ContentSuggestion::ID(other_category(), id_within_category);
437 return service.MakeUniqueID(other_category(), within_category_id);
438 } 436 }
439 437
440 Category other_category() { return category_factory_.FromRemoteCategory(2); } 438 Category other_category() { return category_factory_.FromRemoteCategory(2); }
441 439
442 protected: 440 protected:
443 const GURL& test_url() { return test_url_; } 441 const GURL& test_url() { return test_url_; }
444 FakeContentSuggestionsProviderObserver& observer() { return *observer_; } 442 FakeContentSuggestionsProviderObserver& observer() { return *observer_; }
445 MockScheduler& mock_scheduler() { return scheduler_; } 443 MockScheduler& mock_scheduler() { return scheduler_; }
446 NiceMock<MockImageFetcher>* image_fetcher() { return image_fetcher_; } 444 NiceMock<MockImageFetcher>* image_fetcher() { return image_fetcher_; }
447 445
(...skipping 155 matching lines...) Expand 10 before | Expand all | Expand 10 after
603 601
604 LoadFromJSONString(service.get(), json_str); 602 LoadFromJSONString(service.get(), json_str);
605 603
606 ASSERT_THAT(observer().SuggestionsForCategory(articles_category()), 604 ASSERT_THAT(observer().SuggestionsForCategory(articles_category()),
607 SizeIs(1)); 605 SizeIs(1));
608 ASSERT_THAT(service->GetSnippetsForTesting(articles_category()), SizeIs(1)); 606 ASSERT_THAT(service->GetSnippetsForTesting(articles_category()), SizeIs(1));
609 607
610 const ContentSuggestion& suggestion = 608 const ContentSuggestion& suggestion =
611 observer().SuggestionsForCategory(articles_category()).front(); 609 observer().SuggestionsForCategory(articles_category()).front();
612 610
613 EXPECT_EQ(MakeArticleID(*service, kSnippetUrl), suggestion.id()); 611 EXPECT_EQ(MakeArticleID(kSnippetUrl), suggestion.id());
614 EXPECT_EQ(kSnippetTitle, base::UTF16ToUTF8(suggestion.title())); 612 EXPECT_EQ(kSnippetTitle, base::UTF16ToUTF8(suggestion.title()));
615 EXPECT_EQ(kSnippetText, base::UTF16ToUTF8(suggestion.snippet_text())); 613 EXPECT_EQ(kSnippetText, base::UTF16ToUTF8(suggestion.snippet_text()));
616 EXPECT_EQ(GetDefaultCreationTime(), suggestion.publish_date()); 614 EXPECT_EQ(GetDefaultCreationTime(), suggestion.publish_date());
617 EXPECT_EQ(kSnippetPublisherName, 615 EXPECT_EQ(kSnippetPublisherName,
618 base::UTF16ToUTF8(suggestion.publisher_name())); 616 base::UTF16ToUTF8(suggestion.publisher_name()));
619 EXPECT_EQ(GURL(kSnippetAmpUrl), suggestion.amp_url()); 617 EXPECT_EQ(GURL(kSnippetAmpUrl), suggestion.amp_url());
620 } 618 }
621 619
622 TEST_F(NTPSnippetsServiceTest, MultipleCategories) { 620 TEST_F(NTPSnippetsServiceTest, MultipleCategories) {
623 std::string json_str( 621 std::string json_str(
(...skipping 13 matching lines...) Expand all
637 EXPECT_THAT(service->GetSnippetsForTesting(other_category()), SizeIs(1)); 635 EXPECT_THAT(service->GetSnippetsForTesting(other_category()), SizeIs(1));
638 636
639 ASSERT_THAT(observer().SuggestionsForCategory(articles_category()), 637 ASSERT_THAT(observer().SuggestionsForCategory(articles_category()),
640 SizeIs(1)); 638 SizeIs(1));
641 639
642 ASSERT_THAT(observer().SuggestionsForCategory(other_category()), SizeIs(1)); 640 ASSERT_THAT(observer().SuggestionsForCategory(other_category()), SizeIs(1));
643 641
644 { 642 {
645 const ContentSuggestion& suggestion = 643 const ContentSuggestion& suggestion =
646 observer().SuggestionsForCategory(articles_category()).front(); 644 observer().SuggestionsForCategory(articles_category()).front();
647 EXPECT_EQ(MakeArticleID(*service, std::string(kSnippetUrl) + "/0"), 645 EXPECT_EQ(MakeArticleID(std::string(kSnippetUrl) + "/0"), suggestion.id());
648 suggestion.id());
649 EXPECT_EQ(kSnippetTitle, base::UTF16ToUTF8(suggestion.title())); 646 EXPECT_EQ(kSnippetTitle, base::UTF16ToUTF8(suggestion.title()));
650 EXPECT_EQ(kSnippetText, base::UTF16ToUTF8(suggestion.snippet_text())); 647 EXPECT_EQ(kSnippetText, base::UTF16ToUTF8(suggestion.snippet_text()));
651 EXPECT_EQ(GetDefaultCreationTime(), suggestion.publish_date()); 648 EXPECT_EQ(GetDefaultCreationTime(), suggestion.publish_date());
652 EXPECT_EQ(kSnippetPublisherName, 649 EXPECT_EQ(kSnippetPublisherName,
653 base::UTF16ToUTF8(suggestion.publisher_name())); 650 base::UTF16ToUTF8(suggestion.publisher_name()));
654 EXPECT_EQ(GURL(kSnippetAmpUrl), suggestion.amp_url()); 651 EXPECT_EQ(GURL(kSnippetAmpUrl), suggestion.amp_url());
655 } 652 }
656 653
657 { 654 {
658 const ContentSuggestion& suggestion = 655 const ContentSuggestion& suggestion =
659 observer().SuggestionsForCategory(other_category()).front(); 656 observer().SuggestionsForCategory(other_category()).front();
660 EXPECT_EQ(MakeOtherID(*service, std::string(kSnippetUrl) + "/1"), 657 EXPECT_EQ(MakeOtherID(std::string(kSnippetUrl) + "/1"), suggestion.id());
661 suggestion.id());
662 EXPECT_EQ(kSnippetTitle, base::UTF16ToUTF8(suggestion.title())); 658 EXPECT_EQ(kSnippetTitle, base::UTF16ToUTF8(suggestion.title()));
663 EXPECT_EQ(kSnippetText, base::UTF16ToUTF8(suggestion.snippet_text())); 659 EXPECT_EQ(kSnippetText, base::UTF16ToUTF8(suggestion.snippet_text()));
664 EXPECT_EQ(GetDefaultCreationTime(), suggestion.publish_date()); 660 EXPECT_EQ(GetDefaultCreationTime(), suggestion.publish_date());
665 EXPECT_EQ(kSnippetPublisherName, 661 EXPECT_EQ(kSnippetPublisherName,
666 base::UTF16ToUTF8(suggestion.publisher_name())); 662 base::UTF16ToUTF8(suggestion.publisher_name()));
667 EXPECT_EQ(GURL(kSnippetAmpUrl), suggestion.amp_url()); 663 EXPECT_EQ(GURL(kSnippetAmpUrl), suggestion.amp_url());
668 } 664 }
669 } 665 }
670 666
671 TEST_F(NTPSnippetsServiceTest, Clear) { 667 TEST_F(NTPSnippetsServiceTest, Clear) {
(...skipping 72 matching lines...) Expand 10 before | Expand all | Expand 10 after
744 auto service = MakeSnippetsService(); 740 auto service = MakeSnippetsService();
745 741
746 std::string json_str( 742 std::string json_str(
747 GetTestJson({GetSnippetWithSources("http://site.com", "Source 1", "")})); 743 GetTestJson({GetSnippetWithSources("http://site.com", "Source 1", "")}));
748 744
749 LoadFromJSONString(service.get(), json_str); 745 LoadFromJSONString(service.get(), json_str);
750 746
751 ASSERT_THAT(service->GetSnippetsForTesting(articles_category()), SizeIs(1)); 747 ASSERT_THAT(service->GetSnippetsForTesting(articles_category()), SizeIs(1));
752 748
753 // Dismissing a non-existent snippet shouldn't do anything. 749 // Dismissing a non-existent snippet shouldn't do anything.
754 service->DismissSuggestion(MakeArticleID(*service, "http://othersite.com")); 750 service->DismissSuggestion(MakeArticleID("http://othersite.com"));
755 EXPECT_THAT(service->GetSnippetsForTesting(articles_category()), SizeIs(1)); 751 EXPECT_THAT(service->GetSnippetsForTesting(articles_category()), SizeIs(1));
756 752
757 // Dismiss the snippet. 753 // Dismiss the snippet.
758 service->DismissSuggestion(MakeArticleID(*service, kSnippetUrl)); 754 service->DismissSuggestion(MakeArticleID(kSnippetUrl));
759 EXPECT_THAT(service->GetSnippetsForTesting(articles_category()), IsEmpty()); 755 EXPECT_THAT(service->GetSnippetsForTesting(articles_category()), IsEmpty());
760 756
761 // Make sure that fetching the same snippet again does not re-add it. 757 // Make sure that fetching the same snippet again does not re-add it.
762 LoadFromJSONString(service.get(), json_str); 758 LoadFromJSONString(service.get(), json_str);
763 EXPECT_THAT(service->GetSnippetsForTesting(articles_category()), IsEmpty()); 759 EXPECT_THAT(service->GetSnippetsForTesting(articles_category()), IsEmpty());
764 760
765 // The snippet should stay dismissed even after re-creating the service. 761 // The snippet should stay dismissed even after re-creating the service.
766 ResetSnippetsService(&service); 762 ResetSnippetsService(&service);
767 LoadFromJSONString(service.get(), json_str); 763 LoadFromJSONString(service.get(), json_str);
768 EXPECT_THAT(service->GetSnippetsForTesting(articles_category()), IsEmpty()); 764 EXPECT_THAT(service->GetSnippetsForTesting(articles_category()), IsEmpty());
769 765
770 // The snippet can be added again after clearing dismissed snippets. 766 // The snippet can be added again after clearing dismissed snippets.
771 service->ClearDismissedSuggestionsForDebugging(articles_category()); 767 service->ClearDismissedSuggestionsForDebugging(articles_category());
772 EXPECT_THAT(service->GetSnippetsForTesting(articles_category()), IsEmpty()); 768 EXPECT_THAT(service->GetSnippetsForTesting(articles_category()), IsEmpty());
773 LoadFromJSONString(service.get(), json_str); 769 LoadFromJSONString(service.get(), json_str);
774 EXPECT_THAT(service->GetSnippetsForTesting(articles_category()), SizeIs(1)); 770 EXPECT_THAT(service->GetSnippetsForTesting(articles_category()), SizeIs(1));
775 } 771 }
776 772
777 TEST_F(NTPSnippetsServiceTest, GetDismissed) { 773 TEST_F(NTPSnippetsServiceTest, GetDismissed) {
778 auto service = MakeSnippetsService(); 774 auto service = MakeSnippetsService();
779 775
780 LoadFromJSONString(service.get(), GetTestJson({GetSnippet()})); 776 LoadFromJSONString(service.get(), GetTestJson({GetSnippet()}));
781 777
782 service->DismissSuggestion(MakeArticleID(*service, kSnippetUrl)); 778 service->DismissSuggestion(MakeArticleID(kSnippetUrl));
783 779
784 service->GetDismissedSuggestionsForDebugging( 780 service->GetDismissedSuggestionsForDebugging(
785 articles_category(), 781 articles_category(),
786 base::Bind( 782 base::Bind(
787 [](NTPSnippetsService* service, NTPSnippetsServiceTest* test, 783 [](NTPSnippetsService* service, NTPSnippetsServiceTest* test,
788 std::vector<ContentSuggestion> dismissed_suggestions) { 784 std::vector<ContentSuggestion> dismissed_suggestions) {
789 EXPECT_EQ(1u, dismissed_suggestions.size()); 785 EXPECT_EQ(1u, dismissed_suggestions.size());
790 for (auto& suggestion : dismissed_suggestions) { 786 for (auto& suggestion : dismissed_suggestions) {
791 EXPECT_EQ(test->MakeArticleID(*service, kSnippetUrl), 787 EXPECT_EQ(test->MakeArticleID(kSnippetUrl), suggestion.id());
792 suggestion.id());
793 } 788 }
794 }, 789 },
795 service.get(), this)); 790 service.get(), this));
796 base::RunLoop().RunUntilIdle(); 791 base::RunLoop().RunUntilIdle();
797 792
798 // There should be no dismissed snippet after clearing the list. 793 // There should be no dismissed snippet after clearing the list.
799 service->ClearDismissedSuggestionsForDebugging(articles_category()); 794 service->ClearDismissedSuggestionsForDebugging(articles_category());
800 service->GetDismissedSuggestionsForDebugging( 795 service->GetDismissedSuggestionsForDebugging(
801 articles_category(), 796 articles_category(),
802 base::Bind( 797 base::Bind(
(...skipping 19 matching lines...) Expand all
822 } 817 }
823 818
824 TEST_F(NTPSnippetsServiceTest, RemoveExpiredDismissedContent) { 819 TEST_F(NTPSnippetsServiceTest, RemoveExpiredDismissedContent) {
825 auto service = MakeSnippetsService(); 820 auto service = MakeSnippetsService();
826 821
827 std::string json_str1(GetTestJson({GetExpiredSnippet()})); 822 std::string json_str1(GetTestJson({GetExpiredSnippet()}));
828 // Load it. 823 // Load it.
829 LoadFromJSONString(service.get(), json_str1); 824 LoadFromJSONString(service.get(), json_str1);
830 // Dismiss the suggestion 825 // Dismiss the suggestion
831 service->DismissSuggestion( 826 service->DismissSuggestion(
832 service->MakeUniqueID(service->articles_category_, kSnippetUrl)); 827 ContentSuggestion::ID(articles_category(), kSnippetUrl));
833 828
834 // Load a different snippet - this will clear the expired dismissed ones. 829 // Load a different snippet - this will clear the expired dismissed ones.
835 std::string json_str2(GetTestJson({GetSnippetWithUrl(kSnippetUrl2)})); 830 std::string json_str2(GetTestJson({GetSnippetWithUrl(kSnippetUrl2)}));
836 LoadFromJSONString(service.get(), json_str2); 831 LoadFromJSONString(service.get(), json_str2);
837 832
838 EXPECT_THAT(service->GetDismissedSnippetsForTesting(articles_category()), 833 EXPECT_THAT(service->GetDismissedSnippetsForTesting(articles_category()),
839 IsEmpty()); 834 IsEmpty());
840 } 835 }
841 836
842 TEST_F(NTPSnippetsServiceTest, ExpiredContentNotRemoved) { 837 TEST_F(NTPSnippetsServiceTest, ExpiredContentNotRemoved) {
(...skipping 78 matching lines...) Expand 10 before | Expand all | Expand 10 after
921 base::Bucket(/*min=*/1, /*count=*/2))); 916 base::Bucket(/*min=*/1, /*count=*/2)));
922 EXPECT_THAT(tester.GetAllSamples("NewTabPage.Snippets.NumArticlesFetched"), 917 EXPECT_THAT(tester.GetAllSamples("NewTabPage.Snippets.NumArticlesFetched"),
923 ElementsAre(base::Bucket(/*min=*/0, /*count=*/1), 918 ElementsAre(base::Bucket(/*min=*/0, /*count=*/1),
924 base::Bucket(/*min=*/1, /*count=*/2))); 919 base::Bucket(/*min=*/1, /*count=*/2)));
925 EXPECT_THAT( 920 EXPECT_THAT(
926 tester.GetAllSamples("NewTabPage.Snippets.NumArticlesZeroDueToDiscarded"), 921 tester.GetAllSamples("NewTabPage.Snippets.NumArticlesZeroDueToDiscarded"),
927 IsEmpty()); 922 IsEmpty());
928 923
929 // Dismissing a snippet should decrease the list size. This will only be 924 // Dismissing a snippet should decrease the list size. This will only be
930 // logged after the next fetch. 925 // logged after the next fetch.
931 service->DismissSuggestion(MakeArticleID(*service, kSnippetUrl)); 926 service->DismissSuggestion(MakeArticleID(kSnippetUrl));
932 LoadFromJSONString(service.get(), GetTestJson({GetSnippet()})); 927 LoadFromJSONString(service.get(), GetTestJson({GetSnippet()}));
933 EXPECT_THAT(tester.GetAllSamples("NewTabPage.Snippets.NumArticles"), 928 EXPECT_THAT(tester.GetAllSamples("NewTabPage.Snippets.NumArticles"),
934 ElementsAre(base::Bucket(/*min=*/0, /*count=*/3), 929 ElementsAre(base::Bucket(/*min=*/0, /*count=*/3),
935 base::Bucket(/*min=*/1, /*count=*/2))); 930 base::Bucket(/*min=*/1, /*count=*/2)));
936 // Dismissed snippets shouldn't influence NumArticlesFetched. 931 // Dismissed snippets shouldn't influence NumArticlesFetched.
937 EXPECT_THAT(tester.GetAllSamples("NewTabPage.Snippets.NumArticlesFetched"), 932 EXPECT_THAT(tester.GetAllSamples("NewTabPage.Snippets.NumArticlesFetched"),
938 ElementsAre(base::Bucket(/*min=*/0, /*count=*/1), 933 ElementsAre(base::Bucket(/*min=*/0, /*count=*/1),
939 base::Bucket(/*min=*/1, /*count=*/3))); 934 base::Bucket(/*min=*/1, /*count=*/3)));
940 EXPECT_THAT( 935 EXPECT_THAT(
941 tester.GetAllSamples("NewTabPage.Snippets.NumArticlesZeroDueToDiscarded"), 936 tester.GetAllSamples("NewTabPage.Snippets.NumArticlesZeroDueToDiscarded"),
(...skipping 33 matching lines...) Expand 10 before | Expand all | Expand 10 after
975 "http://mashable-amphtml.googleusercontent.com/1", 970 "http://mashable-amphtml.googleusercontent.com/1",
976 "http://t2.gstatic.com/images?q=tbn:3"}; 971 "http://t2.gstatic.com/images?q=tbn:3"};
977 972
978 // Add the snippet from the mashable domain. 973 // Add the snippet from the mashable domain.
979 LoadFromJSONString(service.get(), 974 LoadFromJSONString(service.get(),
980 GetTestJson({GetSnippetWithUrlAndTimesAndSource( 975 GetTestJson({GetSnippetWithUrlAndTimesAndSource(
981 source_urls, source_urls[0], creation, expiry, 976 source_urls, source_urls[0], creation, expiry,
982 publishers[0], amp_urls[0])})); 977 publishers[0], amp_urls[0])}));
983 ASSERT_THAT(service->GetSnippetsForTesting(articles_category()), SizeIs(1)); 978 ASSERT_THAT(service->GetSnippetsForTesting(articles_category()), SizeIs(1));
984 // Dismiss the snippet via the mashable source corpus ID. 979 // Dismiss the snippet via the mashable source corpus ID.
985 service->DismissSuggestion(MakeArticleID(*service, source_urls[0])); 980 service->DismissSuggestion(MakeArticleID(source_urls[0]));
986 EXPECT_THAT(service->GetSnippetsForTesting(articles_category()), IsEmpty()); 981 EXPECT_THAT(service->GetSnippetsForTesting(articles_category()), IsEmpty());
987 982
988 // The same article from the AOL domain should now be detected as dismissed. 983 // The same article from the AOL domain should now be detected as dismissed.
989 LoadFromJSONString(service.get(), 984 LoadFromJSONString(service.get(),
990 GetTestJson({GetSnippetWithUrlAndTimesAndSource( 985 GetTestJson({GetSnippetWithUrlAndTimesAndSource(
991 source_urls, source_urls[1], creation, expiry, 986 source_urls, source_urls[1], creation, expiry,
992 publishers[1], amp_urls[1])})); 987 publishers[1], amp_urls[1])}));
993 EXPECT_THAT(service->GetSnippetsForTesting(articles_category()), IsEmpty()); 988 EXPECT_THAT(service->GetSnippetsForTesting(articles_category()), IsEmpty());
994 } 989 }
995 990
(...skipping 32 matching lines...) Expand 10 before | Expand all | Expand 10 after
1028 gfx::Image image; 1023 gfx::Image image;
1029 MockFunction<void(const gfx::Image&)> image_fetched; 1024 MockFunction<void(const gfx::Image&)> image_fetched;
1030 { 1025 {
1031 InSequence s; 1026 InSequence s;
1032 EXPECT_CALL(*image_fetcher(), StartOrQueueNetworkRequest(_, _, _)) 1027 EXPECT_CALL(*image_fetcher(), StartOrQueueNetworkRequest(_, _, _))
1033 .WillOnce(WithArgs<0, 2>(Invoke(ServeOneByOneImage))); 1028 .WillOnce(WithArgs<0, 2>(Invoke(ServeOneByOneImage)));
1034 EXPECT_CALL(image_fetched, Call(_)).WillOnce(SaveArg<0>(&image)); 1029 EXPECT_CALL(image_fetched, Call(_)).WillOnce(SaveArg<0>(&image));
1035 } 1030 }
1036 1031
1037 service->FetchSuggestionImage( 1032 service->FetchSuggestionImage(
1038 MakeArticleID(*service, kSnippetUrl), 1033 MakeArticleID(kSnippetUrl),
1039 base::Bind(&MockFunction<void(const gfx::Image&)>::Call, 1034 base::Bind(&MockFunction<void(const gfx::Image&)>::Call,
1040 base::Unretained(&image_fetched))); 1035 base::Unretained(&image_fetched)));
1041 base::RunLoop().RunUntilIdle(); 1036 base::RunLoop().RunUntilIdle();
1042 // Check that the image by ServeOneByOneImage is really served. 1037 // Check that the image by ServeOneByOneImage is really served.
1043 EXPECT_EQ(1, image.Width()); 1038 EXPECT_EQ(1, image.Width());
1044 } 1039 }
1045 1040
1046 TEST_F(NTPSnippetsServiceTest, EmptyImageReturnedForNonExistentId) { 1041 TEST_F(NTPSnippetsServiceTest, EmptyImageReturnedForNonExistentId) {
1047 auto service = MakeSnippetsService(); 1042 auto service = MakeSnippetsService();
1048 1043
1049 // Create a non-empty image so that we can test the image gets updated. 1044 // Create a non-empty image so that we can test the image gets updated.
1050 gfx::Image image = gfx::test::CreateImage(1, 1); 1045 gfx::Image image = gfx::test::CreateImage(1, 1);
1051 MockFunction<void(const gfx::Image&)> image_fetched; 1046 MockFunction<void(const gfx::Image&)> image_fetched;
1052 EXPECT_CALL(image_fetched, Call(_)).WillOnce(SaveArg<0>(&image)); 1047 EXPECT_CALL(image_fetched, Call(_)).WillOnce(SaveArg<0>(&image));
1053 1048
1054 service->FetchSuggestionImage( 1049 service->FetchSuggestionImage(
1055 MakeArticleID(*service, kSnippetUrl2), 1050 MakeArticleID(kSnippetUrl2),
1056 base::Bind(&MockFunction<void(const gfx::Image&)>::Call, 1051 base::Bind(&MockFunction<void(const gfx::Image&)>::Call,
1057 base::Unretained(&image_fetched))); 1052 base::Unretained(&image_fetched)));
1058 1053
1059 base::RunLoop().RunUntilIdle(); 1054 base::RunLoop().RunUntilIdle();
1060 EXPECT_TRUE(image.IsEmpty()); 1055 EXPECT_TRUE(image.IsEmpty());
1061 } 1056 }
1062 1057
1063 TEST_F(NTPSnippetsServiceTest, ClearHistoryRemovesAllSuggestions) { 1058 TEST_F(NTPSnippetsServiceTest, ClearHistoryRemovesAllSuggestions) {
1064 auto service = MakeSnippetsService(); 1059 auto service = MakeSnippetsService();
1065 1060
1066 std::string first_snippet = GetSnippetWithUrl("http://url1.com"); 1061 std::string first_snippet = GetSnippetWithUrl("http://url1.com");
1067 std::string second_snippet = GetSnippetWithUrl("http://url2.com"); 1062 std::string second_snippet = GetSnippetWithUrl("http://url2.com");
1068 std::string json_str = GetTestJson({first_snippet, second_snippet}); 1063 std::string json_str = GetTestJson({first_snippet, second_snippet});
1069 LoadFromJSONString(service.get(), json_str); 1064 LoadFromJSONString(service.get(), json_str);
1070 ASSERT_THAT(service->GetSnippetsForTesting(articles_category()), SizeIs(2)); 1065 ASSERT_THAT(service->GetSnippetsForTesting(articles_category()), SizeIs(2));
1071 1066
1072 service->DismissSuggestion(MakeArticleID(*service, "http://url1.com")); 1067 service->DismissSuggestion(MakeArticleID("http://url1.com"));
1073 ASSERT_THAT(service->GetSnippetsForTesting(articles_category()), SizeIs(1)); 1068 ASSERT_THAT(service->GetSnippetsForTesting(articles_category()), SizeIs(1));
1074 ASSERT_THAT(service->GetDismissedSnippetsForTesting(articles_category()), 1069 ASSERT_THAT(service->GetDismissedSnippetsForTesting(articles_category()),
1075 SizeIs(1)); 1070 SizeIs(1));
1076 1071
1077 base::Time begin = base::Time::FromTimeT(123), 1072 base::Time begin = base::Time::FromTimeT(123),
1078 end = base::Time::FromTimeT(456); 1073 end = base::Time::FromTimeT(456);
1079 base::Callback<bool(const GURL& url)> filter; 1074 base::Callback<bool(const GURL& url)> filter;
1080 service->ClearHistory(begin, end, filter); 1075 service->ClearHistory(begin, end, filter);
1081 1076
1082 EXPECT_THAT(service->GetSnippetsForTesting(articles_category()), IsEmpty()); 1077 EXPECT_THAT(service->GetSnippetsForTesting(articles_category()), IsEmpty());
1083 EXPECT_THAT(service->GetDismissedSnippetsForTesting(articles_category()), 1078 EXPECT_THAT(service->GetDismissedSnippetsForTesting(articles_category()),
1084 IsEmpty()); 1079 IsEmpty());
1085 } 1080 }
1086 1081
1087 } // namespace ntp_snippets 1082 } // namespace ntp_snippets
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698