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

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

Issue 2368583002: [NTP Snippets] Cleanups from clang-tidy (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 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/ntp_snippets_fetcher.h" 5 #include "components/ntp_snippets/ntp_snippets_fetcher.h"
6 6
7 #include <map> 7 #include <map>
8 #include <utility> 8 #include <utility>
9 9
10 #include "base/json/json_reader.h" 10 #include "base/json/json_reader.h"
(...skipping 20 matching lines...) Expand all
31 #include "testing/gtest/include/gtest/gtest.h" 31 #include "testing/gtest/include/gtest/gtest.h"
32 32
33 namespace ntp_snippets { 33 namespace ntp_snippets {
34 34
35 namespace { 35 namespace {
36 36
37 using testing::_; 37 using testing::_;
38 using testing::ElementsAre; 38 using testing::ElementsAre;
39 using testing::Eq; 39 using testing::Eq;
40 using testing::IsEmpty; 40 using testing::IsEmpty;
41 using testing::IsNull;
42 using testing::Not; 41 using testing::Not;
43 using testing::NotNull; 42 using testing::NotNull;
44 using testing::PrintToString; 43 using testing::PrintToString;
45 using testing::SizeIs;
46 using testing::StartsWith; 44 using testing::StartsWith;
47 using testing::WithArg; 45 using testing::WithArg;
48 46
49 const char kAPIKey[] = "fakeAPIkey"; 47 const char kAPIKey[] = "fakeAPIkey";
50 const char kTestChromeReaderUrl[] = 48 const char kTestChromeReaderUrl[] =
51 "https://chromereader-pa.googleapis.com/v1/fetch?key=fakeAPIkey"; 49 "https://chromereader-pa.googleapis.com/v1/fetch?key=fakeAPIkey";
52 const char kTestChromeContentSuggestionsUrl[] = 50 const char kTestChromeContentSuggestionsUrl[] =
53 "https://chromecontentsuggestions-pa.googleapis.com/v1/suggestions/" 51 "https://chromecontentsuggestions-pa.googleapis.com/v1/suggestions/"
54 "fetch?key=fakeAPIkey"; 52 "fetch?key=fakeAPIkey";
55 53
(...skipping 362 matching lines...) Expand 10 before | Expand all | Expand 10 after
418 "{\"recos\": [{" 416 "{\"recos\": [{"
419 " \"contentInfo\": {" 417 " \"contentInfo\": {"
420 " \"url\" : \"http://localhost/foobar\"," 418 " \"url\" : \"http://localhost/foobar\","
421 " \"sourceCorpusInfo\" : [{" 419 " \"sourceCorpusInfo\" : [{"
422 " \"ampUrl\" : \"http://localhost/amp\"," 420 " \"ampUrl\" : \"http://localhost/amp\","
423 " \"corpusId\" : \"http://localhost/foobar\"," 421 " \"corpusId\" : \"http://localhost/foobar\","
424 " \"publisherData\": { \"sourceName\" : \"Foo News\" }" 422 " \"publisherData\": { \"sourceName\" : \"Foo News\" }"
425 " }]" 423 " }]"
426 " }" 424 " }"
427 "}]}"; 425 "}]}";
428 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK, 426 SetFakeResponse(/*response_data=*/kJsonStr, net::HTTP_OK,
429 net::URLRequestStatus::SUCCESS); 427 net::URLRequestStatus::SUCCESS);
430 EXPECT_CALL(mock_callback(), Run(IsSingleArticle("http://localhost/foobar"))); 428 EXPECT_CALL(mock_callback(), Run(IsSingleArticle("http://localhost/foobar")));
431 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 429 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
432 test_excluded(), 430 test_excluded(),
433 /*count=*/1, 431 /*count=*/1,
434 /*interactive_request=*/true); 432 /*interactive_request=*/true);
435 FastForwardUntilNoTasksRemain(); 433 FastForwardUntilNoTasksRemain();
436 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK")); 434 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK"));
437 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr)); 435 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr));
438 EXPECT_THAT(histogram_tester().GetAllSamples( 436 EXPECT_THAT(histogram_tester().GetAllSamples(
(...skipping 15 matching lines...) Expand all
454 " \"snippet\" : \"...\"," 452 " \"snippet\" : \"...\","
455 " \"fullPageUrl\" : \"http://localhost/foobar\"," 453 " \"fullPageUrl\" : \"http://localhost/foobar\","
456 " \"creationTime\" : \"2016-06-30T11:01:37.000Z\"," 454 " \"creationTime\" : \"2016-06-30T11:01:37.000Z\","
457 " \"expirationTime\" : \"2016-07-01T11:01:37.000Z\"," 455 " \"expirationTime\" : \"2016-07-01T11:01:37.000Z\","
458 " \"attribution\" : \"Foo News\"," 456 " \"attribution\" : \"Foo News\","
459 " \"imageUrl\" : \"http://localhost/foobar.jpg\"," 457 " \"imageUrl\" : \"http://localhost/foobar.jpg\","
460 " \"ampUrl\" : \"http://localhost/amp\"," 458 " \"ampUrl\" : \"http://localhost/amp\","
461 " \"faviconUrl\" : \"http://localhost/favicon.ico\" " 459 " \"faviconUrl\" : \"http://localhost/favicon.ico\" "
462 " }]" 460 " }]"
463 "}]}"; 461 "}]}";
464 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK, 462 SetFakeResponse(/*response_data=*/kJsonStr, net::HTTP_OK,
465 net::URLRequestStatus::SUCCESS); 463 net::URLRequestStatus::SUCCESS);
466 EXPECT_CALL(mock_callback(), Run(IsSingleArticle("http://localhost/foobar"))); 464 EXPECT_CALL(mock_callback(), Run(IsSingleArticle("http://localhost/foobar")));
467 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 465 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
468 test_excluded(), 466 test_excluded(),
469 /*count=*/1, 467 /*count=*/1,
470 /*interactive_request=*/true); 468 /*interactive_request=*/true);
471 FastForwardUntilNoTasksRemain(); 469 FastForwardUntilNoTasksRemain();
472 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK")); 470 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK"));
473 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr)); 471 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr));
474 EXPECT_THAT(histogram_tester().GetAllSamples( 472 EXPECT_THAT(histogram_tester().GetAllSamples(
475 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 473 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
476 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 474 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
477 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 475 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
478 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs, 476 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs,
479 /*count=*/1))); 477 /*count=*/1)));
480 } 478 }
481 479
482 TEST_F(NTPSnippetsContentSuggestionsFetcherTest, EmptyCategoryIsOK) { 480 TEST_F(NTPSnippetsContentSuggestionsFetcherTest, EmptyCategoryIsOK) {
483 const std::string kJsonStr = 481 const std::string kJsonStr =
484 "{\"categories\" : [{" 482 "{\"categories\" : [{"
485 " \"id\": 1," 483 " \"id\": 1,"
486 " \"localizedTitle\": \"Articles for You\"" 484 " \"localizedTitle\": \"Articles for You\""
487 "}]}"; 485 "}]}";
488 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK, 486 SetFakeResponse(/*response_data=*/kJsonStr, net::HTTP_OK,
489 net::URLRequestStatus::SUCCESS); 487 net::URLRequestStatus::SUCCESS);
490 EXPECT_CALL(mock_callback(), Run(IsEmptyArticleList())); 488 EXPECT_CALL(mock_callback(), Run(IsEmptyArticleList()));
491 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 489 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
492 test_excluded(), 490 test_excluded(),
493 /*count=*/1, 491 /*count=*/1,
494 /*interactive_request=*/true); 492 /*interactive_request=*/true);
495 FastForwardUntilNoTasksRemain(); 493 FastForwardUntilNoTasksRemain();
496 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK")); 494 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK"));
497 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr)); 495 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr));
498 EXPECT_THAT(histogram_tester().GetAllSamples( 496 EXPECT_THAT(histogram_tester().GetAllSamples(
(...skipping 30 matching lines...) Expand all
529 " \"snippet\" : \"...\"," 527 " \"snippet\" : \"...\","
530 " \"fullPageUrl\" : \"http://localhost/foo2\"," 528 " \"fullPageUrl\" : \"http://localhost/foo2\","
531 " \"creationTime\" : \"2016-06-30T11:01:37.000Z\"," 529 " \"creationTime\" : \"2016-06-30T11:01:37.000Z\","
532 " \"expirationTime\" : \"2016-07-01T11:01:37.000Z\"," 530 " \"expirationTime\" : \"2016-07-01T11:01:37.000Z\","
533 " \"attribution\" : \"Foo News\"," 531 " \"attribution\" : \"Foo News\","
534 " \"imageUrl\" : \"http://localhost/foo2.jpg\"," 532 " \"imageUrl\" : \"http://localhost/foo2.jpg\","
535 " \"ampUrl\" : \"http://localhost/amp\"," 533 " \"ampUrl\" : \"http://localhost/amp\","
536 " \"faviconUrl\" : \"http://localhost/favicon.ico\" " 534 " \"faviconUrl\" : \"http://localhost/favicon.ico\" "
537 " }]" 535 " }]"
538 "}]}"; 536 "}]}";
539 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK, 537 SetFakeResponse(/*response_data=*/kJsonStr, net::HTTP_OK,
540 net::URLRequestStatus::SUCCESS); 538 net::URLRequestStatus::SUCCESS);
541 NTPSnippetsFetcher::OptionalSnippets snippets; 539 NTPSnippetsFetcher::OptionalSnippets snippets;
542 EXPECT_CALL(mock_callback(), Run(_)) 540 EXPECT_CALL(mock_callback(), Run(_))
543 .WillOnce(WithArg<0>(MovePointeeTo(&snippets))); 541 .WillOnce(WithArg<0>(MovePointeeTo(&snippets)));
544 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 542 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
545 test_excluded(), 543 test_excluded(),
546 /*count=*/1, 544 /*count=*/1,
547 /*force_request=*/true); 545 /*interactive_request=*/true);
548 FastForwardUntilNoTasksRemain(); 546 FastForwardUntilNoTasksRemain();
549 547
550 ASSERT_TRUE(snippets); 548 ASSERT_TRUE(snippets);
551 ASSERT_THAT(snippets->size(), Eq(2u)); 549 ASSERT_THAT(snippets->size(), Eq(2u));
552 for (const auto& category : *snippets) { 550 for (const auto& category : *snippets) {
553 const auto& articles = category.snippets; 551 const auto& articles = category.snippets;
554 switch (category.category.id()) { 552 switch (category.category.id()) {
555 case static_cast<int>(KnownCategories::ARTICLES): 553 case static_cast<int>(KnownCategories::ARTICLES):
556 ASSERT_THAT(articles.size(), Eq(1u)); 554 ASSERT_THAT(articles.size(), Eq(1u));
557 EXPECT_THAT(articles[0]->best_source().url.spec(), 555 EXPECT_THAT(articles[0]->best_source().url.spec(),
(...skipping 14 matching lines...) Expand all
572 EXPECT_THAT(histogram_tester().GetAllSamples( 570 EXPECT_THAT(histogram_tester().GetAllSamples(
573 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 571 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
574 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 572 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
575 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 573 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
576 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs, 574 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs,
577 /*count=*/1))); 575 /*count=*/1)));
578 } 576 }
579 577
580 TEST_F(NTPSnippetsFetcherTest, ShouldFetchSuccessfullyEmptyList) { 578 TEST_F(NTPSnippetsFetcherTest, ShouldFetchSuccessfullyEmptyList) {
581 const std::string kJsonStr = "{\"recos\": []}"; 579 const std::string kJsonStr = "{\"recos\": []}";
582 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK, 580 SetFakeResponse(/*response_data=*/kJsonStr, net::HTTP_OK,
583 net::URLRequestStatus::SUCCESS); 581 net::URLRequestStatus::SUCCESS);
584 EXPECT_CALL(mock_callback(), Run(IsEmptyArticleList())); 582 EXPECT_CALL(mock_callback(), Run(IsEmptyArticleList()));
585 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 583 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
586 test_excluded(), 584 test_excluded(),
587 /*count=*/1, 585 /*count=*/1,
588 /*interactive_request=*/true); 586 /*interactive_request=*/true);
589 FastForwardUntilNoTasksRemain(); 587 FastForwardUntilNoTasksRemain();
590 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK")); 588 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK"));
591 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr)); 589 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr));
592 EXPECT_THAT( 590 EXPECT_THAT(
(...skipping 52 matching lines...) Expand 10 before | Expand all | Expand 10 after
645 ASSERT_TRUE(content_selectors->GetDictionary(0, &content_selector)); 643 ASSERT_TRUE(content_selectors->GetDictionary(0, &content_selector));
646 std::string content_selector_value; 644 std::string content_selector_value;
647 EXPECT_TRUE(content_selector->GetString("value", &content_selector_value)); 645 EXPECT_TRUE(content_selector->GetString("value", &content_selector_value));
648 EXPECT_THAT(content_selector_value, Eq("www.somehost1.com")); 646 EXPECT_THAT(content_selector_value, Eq("www.somehost1.com"));
649 ASSERT_TRUE(content_selectors->GetDictionary(1, &content_selector)); 647 ASSERT_TRUE(content_selectors->GetDictionary(1, &content_selector));
650 EXPECT_TRUE(content_selector->GetString("value", &content_selector_value)); 648 EXPECT_TRUE(content_selector->GetString("value", &content_selector_value));
651 EXPECT_THAT(content_selector_value, Eq("www.somehost2.com")); 649 EXPECT_THAT(content_selector_value, Eq("www.somehost2.com"));
652 } 650 }
653 651
654 TEST_F(NTPSnippetsFetcherTest, ShouldReportUrlStatusError) { 652 TEST_F(NTPSnippetsFetcherTest, ShouldReportUrlStatusError) {
655 SetFakeResponse(/*data=*/std::string(), net::HTTP_NOT_FOUND, 653 SetFakeResponse(/*response_data=*/std::string(), net::HTTP_NOT_FOUND,
656 net::URLRequestStatus::FAILED); 654 net::URLRequestStatus::FAILED);
657 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 655 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
658 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 656 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
659 test_excluded(), 657 test_excluded(),
660 /*count=*/1, 658 /*count=*/1,
661 /*interactive_request=*/true); 659 /*interactive_request=*/true);
662 FastForwardUntilNoTasksRemain(); 660 FastForwardUntilNoTasksRemain();
663 EXPECT_THAT(snippets_fetcher().last_status(), 661 EXPECT_THAT(snippets_fetcher().last_status(),
664 Eq("URLRequestStatus error -2")); 662 Eq("URLRequestStatus error -2"));
665 EXPECT_THAT(snippets_fetcher().last_json(), IsEmpty()); 663 EXPECT_THAT(snippets_fetcher().last_json(), IsEmpty());
666 EXPECT_THAT( 664 EXPECT_THAT(
667 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 665 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
668 ElementsAre(base::Bucket(/*min=*/2, /*count=*/1))); 666 ElementsAre(base::Bucket(/*min=*/2, /*count=*/1)));
669 EXPECT_THAT(histogram_tester().GetAllSamples( 667 EXPECT_THAT(histogram_tester().GetAllSamples(
670 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 668 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
671 ElementsAre(base::Bucket(/*min=*/-2, /*count=*/1))); 669 ElementsAre(base::Bucket(/*min=*/-2, /*count=*/1)));
672 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 670 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
673 Not(IsEmpty())); 671 Not(IsEmpty()));
674 } 672 }
675 673
676 TEST_F(NTPSnippetsFetcherTest, ShouldReportHttpError) { 674 TEST_F(NTPSnippetsFetcherTest, ShouldReportHttpError) {
677 SetFakeResponse(/*data=*/std::string(), net::HTTP_NOT_FOUND, 675 SetFakeResponse(/*response_data=*/std::string(), net::HTTP_NOT_FOUND,
678 net::URLRequestStatus::SUCCESS); 676 net::URLRequestStatus::SUCCESS);
679 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 677 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
680 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 678 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
681 test_excluded(), 679 test_excluded(),
682 /*count=*/1, 680 /*count=*/1,
683 /*interactive_request=*/true); 681 /*interactive_request=*/true);
684 FastForwardUntilNoTasksRemain(); 682 FastForwardUntilNoTasksRemain();
685 EXPECT_THAT(snippets_fetcher().last_json(), IsEmpty()); 683 EXPECT_THAT(snippets_fetcher().last_json(), IsEmpty());
686 EXPECT_THAT( 684 EXPECT_THAT(
687 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 685 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
688 ElementsAre(base::Bucket(/*min=*/3, /*count=*/1))); 686 ElementsAre(base::Bucket(/*min=*/3, /*count=*/1)));
689 EXPECT_THAT(histogram_tester().GetAllSamples( 687 EXPECT_THAT(histogram_tester().GetAllSamples(
690 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 688 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
691 ElementsAre(base::Bucket(/*min=*/404, /*count=*/1))); 689 ElementsAre(base::Bucket(/*min=*/404, /*count=*/1)));
692 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 690 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
693 Not(IsEmpty())); 691 Not(IsEmpty()));
694 } 692 }
695 693
696 TEST_F(NTPSnippetsFetcherTest, ShouldReportJsonError) { 694 TEST_F(NTPSnippetsFetcherTest, ShouldReportJsonError) {
697 const std::string kInvalidJsonStr = "{ \"recos\": []"; 695 const std::string kInvalidJsonStr = "{ \"recos\": []";
698 SetFakeResponse(/*data=*/kInvalidJsonStr, net::HTTP_OK, 696 SetFakeResponse(/*response_data=*/kInvalidJsonStr, net::HTTP_OK,
699 net::URLRequestStatus::SUCCESS); 697 net::URLRequestStatus::SUCCESS);
700 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 698 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
701 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 699 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
702 test_excluded(), 700 test_excluded(),
703 /*count=*/1, 701 /*count=*/1,
704 /*interactive_request=*/true); 702 /*interactive_request=*/true);
705 FastForwardUntilNoTasksRemain(); 703 FastForwardUntilNoTasksRemain();
706 EXPECT_THAT(snippets_fetcher().last_status(), 704 EXPECT_THAT(snippets_fetcher().last_status(),
707 StartsWith("Received invalid JSON (error ")); 705 StartsWith("Received invalid JSON (error "));
708 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kInvalidJsonStr)); 706 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kInvalidJsonStr));
709 EXPECT_THAT( 707 EXPECT_THAT(
710 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 708 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
711 ElementsAre(base::Bucket(/*min=*/4, /*count=*/1))); 709 ElementsAre(base::Bucket(/*min=*/4, /*count=*/1)));
712 EXPECT_THAT(histogram_tester().GetAllSamples( 710 EXPECT_THAT(histogram_tester().GetAllSamples(
713 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 711 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
714 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 712 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
715 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 713 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
716 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs, 714 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs,
717 /*count=*/1))); 715 /*count=*/1)));
718 } 716 }
719 717
720 TEST_F(NTPSnippetsFetcherTest, ShouldReportJsonErrorForEmptyResponse) { 718 TEST_F(NTPSnippetsFetcherTest, ShouldReportJsonErrorForEmptyResponse) {
721 SetFakeResponse(/*data=*/std::string(), net::HTTP_OK, 719 SetFakeResponse(/*response_data=*/std::string(), net::HTTP_OK,
722 net::URLRequestStatus::SUCCESS); 720 net::URLRequestStatus::SUCCESS);
723 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 721 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
724 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 722 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
725 test_excluded(), 723 test_excluded(),
726 /*count=*/1, 724 /*count=*/1,
727 /*interactive_request=*/true); 725 /*interactive_request=*/true);
728 FastForwardUntilNoTasksRemain(); 726 FastForwardUntilNoTasksRemain();
729 EXPECT_THAT(snippets_fetcher().last_json(), std::string()); 727 EXPECT_THAT(snippets_fetcher().last_json(), std::string());
730 EXPECT_THAT( 728 EXPECT_THAT(
731 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 729 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
732 ElementsAre(base::Bucket(/*min=*/4, /*count=*/1))); 730 ElementsAre(base::Bucket(/*min=*/4, /*count=*/1)));
733 EXPECT_THAT(histogram_tester().GetAllSamples( 731 EXPECT_THAT(histogram_tester().GetAllSamples(
734 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 732 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
735 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 733 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
736 } 734 }
737 735
738 TEST_F(NTPSnippetsFetcherTest, ShouldReportInvalidListError) { 736 TEST_F(NTPSnippetsFetcherTest, ShouldReportInvalidListError) {
739 const std::string kJsonStr = 737 const std::string kJsonStr =
740 "{\"recos\": [{ \"contentInfo\": { \"foo\" : \"bar\" }}]}"; 738 "{\"recos\": [{ \"contentInfo\": { \"foo\" : \"bar\" }}]}";
741 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK, 739 SetFakeResponse(/*response_data=*/kJsonStr, net::HTTP_OK,
742 net::URLRequestStatus::SUCCESS); 740 net::URLRequestStatus::SUCCESS);
743 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 741 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
744 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 742 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
745 test_excluded(), 743 test_excluded(),
746 /*count=*/1, 744 /*count=*/1,
747 /*interactive_request=*/true); 745 /*interactive_request=*/true);
748 FastForwardUntilNoTasksRemain(); 746 FastForwardUntilNoTasksRemain();
749 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr)); 747 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr));
750 EXPECT_THAT( 748 EXPECT_THAT(
751 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 749 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
(...skipping 12 matching lines...) Expand all
764 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 762 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
765 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 763 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
766 test_excluded(), 764 test_excluded(),
767 /*count=*/1, 765 /*count=*/1,
768 /*interactive_request=*/true); 766 /*interactive_request=*/true);
769 FastForwardUntilNoTasksRemain(); 767 FastForwardUntilNoTasksRemain();
770 } 768 }
771 769
772 TEST_F(NTPSnippetsFetcherTest, ShouldCancelOngoingFetch) { 770 TEST_F(NTPSnippetsFetcherTest, ShouldCancelOngoingFetch) {
773 const std::string kJsonStr = "{ \"recos\": [] }"; 771 const std::string kJsonStr = "{ \"recos\": [] }";
774 SetFakeResponse(/*data=*/kJsonStr, net::HTTP_OK, 772 SetFakeResponse(/*response_data=*/kJsonStr, net::HTTP_OK,
775 net::URLRequestStatus::SUCCESS); 773 net::URLRequestStatus::SUCCESS);
776 EXPECT_CALL(mock_callback(), Run(IsEmptyArticleList())); 774 EXPECT_CALL(mock_callback(), Run(IsEmptyArticleList()));
777 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 775 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
778 test_excluded(), 776 test_excluded(),
779 /*count=*/1, 777 /*count=*/1,
780 /*interactive_request=*/true); 778 /*interactive_request=*/true);
781 // Second call to FetchSnippetsFromHosts() overrides/cancels the previous. 779 // Second call to FetchSnippetsFromHosts() overrides/cancels the previous.
782 // Callback is expected to be called once. 780 // Callback is expected to be called once.
783 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 781 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(),
784 test_excluded(), 782 test_excluded(),
(...skipping 11 matching lines...) Expand all
796 /*count=*/1))); 794 /*count=*/1)));
797 } 795 }
798 796
799 ::std::ostream& operator<<( 797 ::std::ostream& operator<<(
800 ::std::ostream& os, 798 ::std::ostream& os,
801 const NTPSnippetsFetcher::OptionalSnippets& snippets) { 799 const NTPSnippetsFetcher::OptionalSnippets& snippets) {
802 if (snippets) { 800 if (snippets) {
803 // Matchers above aren't any more precise than this, so this is sufficient 801 // Matchers above aren't any more precise than this, so this is sufficient
804 // for test-failure diagnostics. 802 // for test-failure diagnostics.
805 return os << "list with " << snippets->size() << " elements"; 803 return os << "list with " << snippets->size() << " elements";
806 } else {
807 return os << "null";
808 } 804 }
805 return os << "null";
809 } 806 }
810 807
811 } // namespace ntp_snippets 808 } // namespace ntp_snippets
OLDNEW
« no previous file with comments | « components/ntp_snippets/ntp_snippets_fetcher.cc ('k') | components/ntp_snippets/ntp_snippets_service.h » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698