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

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

Issue 2454063002: [NTP Snippets] Clean up NTPSnippetsFetcher (Closed)
Patch Set: . Created 4 years, 1 month 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/remote/ntp_snippets_fetcher.h" 5 #include "components/ntp_snippets/remote/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 177 matching lines...) Expand 10 before | Expand all | Expand 10 after
188 MockSnippetsAvailableCallback& mock_callback() { return mock_callback_; } 188 MockSnippetsAvailableCallback& mock_callback() { return mock_callback_; }
189 void FastForwardUntilNoTasksRemain() { 189 void FastForwardUntilNoTasksRemain() {
190 mock_task_runner_->FastForwardUntilNoTasksRemain(); 190 mock_task_runner_->FastForwardUntilNoTasksRemain();
191 } 191 }
192 const std::string& test_lang() const { return test_lang_; } 192 const std::string& test_lang() const { return test_lang_; }
193 const GURL& test_url() { return test_url_; } 193 const GURL& test_url() { return test_url_; }
194 const std::set<std::string>& test_hosts() const { return test_hosts_; } 194 const std::set<std::string>& test_hosts() const { return test_hosts_; }
195 const std::set<std::string>& test_excluded() const { return test_excluded_; } 195 const std::set<std::string>& test_excluded() const { return test_excluded_; }
196 base::HistogramTester& histogram_tester() { return histogram_tester_; } 196 base::HistogramTester& histogram_tester() { return histogram_tester_; }
197 197
198 NTPSnippetsFetcher::Params test_params() {
199 NTPSnippetsFetcher::Params result;
200 result.hosts = test_hosts();
201 result.language_code = test_lang();
202 result.excluded_ids = test_excluded();
203 result.count_to_fetch = 1;
204 result.interactive_request = true;
205 return result;
206 }
207
198 void InitFakeURLFetcherFactory() { 208 void InitFakeURLFetcherFactory() {
199 if (fake_url_fetcher_factory_) 209 if (fake_url_fetcher_factory_)
200 return; 210 return;
201 // Instantiation of factory automatically sets itself as URLFetcher's 211 // Instantiation of factory automatically sets itself as URLFetcher's
202 // factory. 212 // factory.
203 fake_url_fetcher_factory_.reset(new net::FakeURLFetcherFactory( 213 fake_url_fetcher_factory_.reset(new net::FakeURLFetcherFactory(
204 /*default_factory=*/&failing_url_fetcher_factory_)); 214 /*default_factory=*/&failing_url_fetcher_factory_));
205 } 215 }
206 216
207 void SetFakeResponse(const std::string& response_data, 217 void SetFakeResponse(const std::string& response_data,
(...skipping 31 matching lines...) Expand 10 before | Expand all | Expand 10 after
239 249
240 class NTPSnippetsContentSuggestionsFetcherTest : public NTPSnippetsFetcherTest { 250 class NTPSnippetsContentSuggestionsFetcherTest : public NTPSnippetsFetcherTest {
241 public: 251 public:
242 NTPSnippetsContentSuggestionsFetcherTest() 252 NTPSnippetsContentSuggestionsFetcherTest()
243 : NTPSnippetsFetcherTest( 253 : NTPSnippetsFetcherTest(
244 GURL(kTestChromeContentSuggestionsUrl), 254 GURL(kTestChromeContentSuggestionsUrl),
245 {{"content_suggestions_backend", kContentSuggestionsServer}}) {} 255 {{"content_suggestions_backend", kContentSuggestionsServer}}) {}
246 }; 256 };
247 257
248 TEST_F(NTPSnippetsFetcherTest, BuildRequestAuthenticated) { 258 TEST_F(NTPSnippetsFetcherTest, BuildRequestAuthenticated) {
249 NTPSnippetsFetcher::RequestParams params; 259 NTPSnippetsFetcher::RequestBuilder builder;
250 params.obfuscated_gaia_id = "0BFUSGAIA"; 260 builder.params.hosts = {"chromium.org"};
251 params.only_return_personalized_results = true; 261 builder.params.excluded_ids = {"1234567890"};
252 params.user_locale = "en"; 262 builder.params.count_to_fetch = 25;
253 params.host_restricts = {"chromium.org"}; 263 builder.params.language_code = "en";
254 params.excluded_ids = {"1234567890"}; 264 builder.params.interactive_request = false;
255 params.count_to_fetch = 25; 265 builder.obfuscated_gaia_id = "0BFUSGAIA";
256 params.interactive_request = false; 266 builder.only_return_personalized_results = true;
257 params.user_class = "ACTIVE_NTP_USER"; 267 builder.user_class = "ACTIVE_NTP_USER";
258 268
259 269 builder.fetch_api = NTPSnippetsFetcher::CHROME_READER_API;
260 params.fetch_api = NTPSnippetsFetcher::CHROME_READER_API; 270 EXPECT_THAT(builder.BuildRequest(),
261 EXPECT_THAT(params.BuildRequest(),
262 EqualsJSON("{" 271 EqualsJSON("{"
263 " \"response_detail_level\": \"STANDARD\"," 272 " \"response_detail_level\": \"STANDARD\","
264 " \"obfuscated_gaia_id\": \"0BFUSGAIA\"," 273 " \"obfuscated_gaia_id\": \"0BFUSGAIA\","
265 " \"user_locale\": \"en\"," 274 " \"user_locale\": \"en\","
266 " \"advanced_options\": {" 275 " \"advanced_options\": {"
267 " \"local_scoring_params\": {" 276 " \"local_scoring_params\": {"
268 " \"content_params\": {" 277 " \"content_params\": {"
269 " \"only_return_personalized_results\": true" 278 " \"only_return_personalized_results\": true"
270 " }," 279 " },"
271 " \"content_restricts\": [" 280 " \"content_restricts\": ["
(...skipping 17 matching lines...) Expand all
289 " }" 298 " }"
290 " ]" 299 " ]"
291 " }," 300 " },"
292 " \"global_scoring_params\": {" 301 " \"global_scoring_params\": {"
293 " \"num_to_return\": 25," 302 " \"num_to_return\": 25,"
294 " \"sort_type\": 1" 303 " \"sort_type\": 1"
295 " }" 304 " }"
296 " }" 305 " }"
297 "}")); 306 "}"));
298 307
299 params.fetch_api = NTPSnippetsFetcher::CHROME_CONTENT_SUGGESTIONS_API; 308 builder.fetch_api = NTPSnippetsFetcher::CHROME_CONTENT_SUGGESTIONS_API;
300 EXPECT_THAT(params.BuildRequest(), 309 EXPECT_THAT(builder.BuildRequest(),
301 EqualsJSON("{" 310 EqualsJSON("{"
302 " \"uiLanguage\": \"en\"," 311 " \"uiLanguage\": \"en\","
303 " \"priority\": \"BACKGROUND_PREFETCH\"," 312 " \"priority\": \"BACKGROUND_PREFETCH\","
304 " \"regularlyVisitedHostNames\": [" 313 " \"regularlyVisitedHostNames\": ["
305 " \"chromium.org\"" 314 " \"chromium.org\""
306 " ]," 315 " ],"
307 " \"excludedSuggestionIds\": [" 316 " \"excludedSuggestionIds\": ["
308 " \"1234567890\"" 317 " \"1234567890\""
309 " ]," 318 " ],"
310 " \"userActivenessClass\": \"ACTIVE_NTP_USER\"" 319 " \"userActivenessClass\": \"ACTIVE_NTP_USER\""
311 "}")); 320 "}"));
312 } 321 }
313 322
314 TEST_F(NTPSnippetsFetcherTest, BuildRequestUnauthenticated) { 323 TEST_F(NTPSnippetsFetcherTest, BuildRequestUnauthenticated) {
315 NTPSnippetsFetcher::RequestParams params; 324 NTPSnippetsFetcher::RequestBuilder builder;
316 params.only_return_personalized_results = false; 325 builder.params = test_params();
317 params.host_restricts = {}; 326 builder.only_return_personalized_results = false;
318 params.count_to_fetch = 10; 327 builder.user_class = "ACTIVE_NTP_USER";
319 params.excluded_ids = {};
320 params.interactive_request = true;
321 params.user_class = "ACTIVE_NTP_USER";
322 328
323 params.fetch_api = NTPSnippetsFetcher::CHROME_READER_API; 329 builder.fetch_api = NTPSnippetsFetcher::CHROME_READER_API;
324 EXPECT_THAT(params.BuildRequest(), 330 EXPECT_THAT(builder.BuildRequest(),
325 EqualsJSON("{" 331 EqualsJSON("{"
326 " \"response_detail_level\": \"STANDARD\"," 332 " \"response_detail_level\": \"STANDARD\","
327 " \"advanced_options\": {" 333 " \"advanced_options\": {"
328 " \"local_scoring_params\": {" 334 " \"local_scoring_params\": {"
329 " \"content_params\": {" 335 " \"content_params\": {"
330 " \"only_return_personalized_results\": false" 336 " \"only_return_personalized_results\": false"
331 " }," 337 " },"
332 " \"content_restricts\": [" 338 " \"content_restricts\": ["
333 " {" 339 " {"
334 " \"type\": \"METADATA\"," 340 " \"type\": \"METADATA\","
(...skipping 10 matching lines...) Expand all
345 " ]," 351 " ],"
346 " \"content_selectors\": []" 352 " \"content_selectors\": []"
347 " }," 353 " },"
348 " \"global_scoring_params\": {" 354 " \"global_scoring_params\": {"
349 " \"num_to_return\": 10," 355 " \"num_to_return\": 10,"
350 " \"sort_type\": 1" 356 " \"sort_type\": 1"
351 " }" 357 " }"
352 " }" 358 " }"
353 "}")); 359 "}"));
354 360
355 params.fetch_api = NTPSnippetsFetcher::CHROME_CONTENT_SUGGESTIONS_API; 361 builder.fetch_api = NTPSnippetsFetcher::CHROME_CONTENT_SUGGESTIONS_API;
356 EXPECT_THAT(params.BuildRequest(), 362 EXPECT_THAT(builder.BuildRequest(),
357 EqualsJSON("{" 363 EqualsJSON("{"
358 " \"regularlyVisitedHostNames\": []," 364 " \"regularlyVisitedHostNames\": [],"
359 " \"priority\": \"USER_ACTION\"," 365 " \"priority\": \"USER_ACTION\","
360 " \"excludedSuggestionIds\": []," 366 " \"excludedSuggestionIds\": [],"
361 " \"userActivenessClass\": \"ACTIVE_NTP_USER\"" 367 " \"userActivenessClass\": \"ACTIVE_NTP_USER\""
362 "}")); 368 "}"));
363 } 369 }
364 370
365 TEST_F(NTPSnippetsFetcherTest, BuildRequestExcludedIds) { 371 TEST_F(NTPSnippetsFetcherTest, BuildRequestExcludedIds) {
366 NTPSnippetsFetcher::RequestParams params; 372 NTPSnippetsFetcher::RequestBuilder builder;
367 params.only_return_personalized_results = false; 373 builder.params = test_params();
368 params.host_restricts = {}; 374 for (int i = 0; i < 200; ++i)
369 params.count_to_fetch = 10; 375 builder.params.excluded_ids.insert(base::StringPrintf("%03d", i));
370 params.interactive_request = false; 376 builder.only_return_personalized_results = false;
371 for (int i = 0; i < 200; ++i) { 377 builder.user_class = "ACTIVE_NTP_USER";
372 params.excluded_ids.insert(base::StringPrintf("%03d", i));
373 }
374 params.user_class = "ACTIVE_NTP_USER";
375 378
376 params.fetch_api = NTPSnippetsFetcher::CHROME_CONTENT_SUGGESTIONS_API; 379 builder.fetch_api = NTPSnippetsFetcher::CHROME_CONTENT_SUGGESTIONS_API;
377 EXPECT_THAT(params.BuildRequest(), 380 EXPECT_THAT(builder.BuildRequest(),
378 EqualsJSON("{" 381 EqualsJSON("{"
379 " \"regularlyVisitedHostNames\": []," 382 " \"regularlyVisitedHostNames\": [],"
380 " \"priority\": \"BACKGROUND_PREFETCH\"," 383 " \"priority\": \"BACKGROUND_PREFETCH\","
381 " \"excludedSuggestionIds\": [" 384 " \"excludedSuggestionIds\": ["
382 " \"000\", \"001\", \"002\", \"003\", \"004\"," 385 " \"000\", \"001\", \"002\", \"003\", \"004\","
383 " \"005\", \"006\", \"007\", \"008\", \"009\"," 386 " \"005\", \"006\", \"007\", \"008\", \"009\","
384 " \"010\", \"011\", \"012\", \"013\", \"014\"," 387 " \"010\", \"011\", \"012\", \"013\", \"014\","
385 " \"015\", \"016\", \"017\", \"018\", \"019\"," 388 " \"015\", \"016\", \"017\", \"018\", \"019\","
386 " \"020\", \"021\", \"022\", \"023\", \"024\"," 389 " \"020\", \"021\", \"022\", \"023\", \"024\","
387 " \"025\", \"026\", \"027\", \"028\", \"029\"," 390 " \"025\", \"026\", \"027\", \"028\", \"029\","
(...skipping 12 matching lines...) Expand all
400 " \"090\", \"091\", \"092\", \"093\", \"094\"," 403 " \"090\", \"091\", \"092\", \"093\", \"094\","
401 " \"095\", \"096\", \"097\", \"098\", \"099\"" 404 " \"095\", \"096\", \"097\", \"098\", \"099\""
402 // Truncated to 100 entries. Currently, they happen to 405 // Truncated to 100 entries. Currently, they happen to
403 // be those lexically first. 406 // be those lexically first.
404 " ]," 407 " ],"
405 " \"userActivenessClass\": \"ACTIVE_NTP_USER\"" 408 " \"userActivenessClass\": \"ACTIVE_NTP_USER\""
406 "}")); 409 "}"));
407 } 410 }
408 411
409 TEST_F(NTPSnippetsFetcherTest, BuildRequestNoUserClass) { 412 TEST_F(NTPSnippetsFetcherTest, BuildRequestNoUserClass) {
410 NTPSnippetsFetcher::RequestParams params; 413 NTPSnippetsFetcher::RequestBuilder builder;
411 params.only_return_personalized_results = false; 414 builder.params = test_params();
412 params.host_restricts = {}; 415 builder.only_return_personalized_results = false;
413 params.count_to_fetch = 10;
414 params.interactive_request = false;
415 416
416 params.fetch_api = NTPSnippetsFetcher::CHROME_CONTENT_SUGGESTIONS_API; 417 builder.fetch_api = NTPSnippetsFetcher::CHROME_CONTENT_SUGGESTIONS_API;
417 EXPECT_THAT(params.BuildRequest(), 418 EXPECT_THAT(builder.BuildRequest(),
418 EqualsJSON("{" 419 EqualsJSON("{"
419 " \"regularlyVisitedHostNames\": []," 420 " \"regularlyVisitedHostNames\": [],"
420 " \"priority\": \"BACKGROUND_PREFETCH\"," 421 " \"priority\": \"BACKGROUND_PREFETCH\","
421 " \"excludedSuggestionIds\": []" 422 " \"excludedSuggestionIds\": []"
422 "}")); 423 "}"));
423 } 424 }
424 425
425 TEST_F(NTPSnippetsFetcherTest, BuildRequestWithTwoLanguages) { 426 TEST_F(NTPSnippetsFetcherTest, BuildRequestWithTwoLanguages) {
426 NTPSnippetsFetcher::RequestParams params; 427 NTPSnippetsFetcher::RequestBuilder builder;
427 params.only_return_personalized_results = false; 428 builder.params = test_params();
428 params.host_restricts = {}; 429 builder.params.interactive_request = true;
429 params.count_to_fetch = 10; 430 builder.only_return_personalized_results = false;
430 params.interactive_request = true; 431 builder.ui_language.language_code = "en";
431 params.ui_language.language_code = "en"; 432 builder.ui_language.frequency = 0.5f;
432 params.ui_language.frequency = 0.5f; 433 builder.other_top_language.language_code = "de";
433 params.other_top_language.language_code = "de"; 434 builder.other_top_language.frequency = 0.5f;
434 params.other_top_language.frequency = 0.5f;
435 435
436 params.fetch_api = NTPSnippetsFetcher::CHROME_CONTENT_SUGGESTIONS_API; 436 builder.fetch_api = NTPSnippetsFetcher::CHROME_CONTENT_SUGGESTIONS_API;
437 EXPECT_THAT(params.BuildRequest(), 437 EXPECT_THAT(builder.BuildRequest(),
438 EqualsJSON("{" 438 EqualsJSON("{"
439 " \"regularlyVisitedHostNames\": []," 439 " \"regularlyVisitedHostNames\": [],"
440 " \"priority\": \"USER_ACTION\"," 440 " \"priority\": \"USER_ACTION\","
441 " \"excludedSuggestionIds\": []," 441 " \"excludedSuggestionIds\": [],"
442 " \"topLanguages\": [" 442 " \"topLanguages\": ["
443 " {" 443 " {"
444 " \"language\" : \"en\"," 444 " \"language\" : \"en\","
445 " \"frequency\" : 0.5" 445 " \"frequency\" : 0.5"
446 " }," 446 " },"
447 " {" 447 " {"
448 " \"language\" : \"de\"," 448 " \"language\" : \"de\","
449 " \"frequency\" : 0.5" 449 " \"frequency\" : 0.5"
450 " }" 450 " }"
451 " ]" 451 " ]"
452 "}")); 452 "}"));
453 } 453 }
454 454
455 TEST_F(NTPSnippetsFetcherTest, BuildRequestWithUILanguageOnly) { 455 TEST_F(NTPSnippetsFetcherTest, BuildRequestWithUILanguageOnly) {
456 NTPSnippetsFetcher::RequestParams params; 456 NTPSnippetsFetcher::RequestBuilder builder;
457 params.only_return_personalized_results = false; 457 builder.params = test_params();
458 params.host_restricts = {}; 458 builder.params.interactive_request = true;
459 params.count_to_fetch = 10; 459 builder.only_return_personalized_results = false;
460 params.interactive_request = true; 460 builder.ui_language.language_code = "en";
461 params.ui_language.language_code = "en"; 461 builder.ui_language.frequency = 0.5f;
462 params.ui_language.frequency = 0.5f;
463 462
464 params.fetch_api = NTPSnippetsFetcher::CHROME_CONTENT_SUGGESTIONS_API; 463 builder.fetch_api = NTPSnippetsFetcher::CHROME_CONTENT_SUGGESTIONS_API;
465 EXPECT_THAT(params.BuildRequest(), 464 EXPECT_THAT(builder.BuildRequest(),
466 EqualsJSON("{" 465 EqualsJSON("{"
467 " \"regularlyVisitedHostNames\": []," 466 " \"regularlyVisitedHostNames\": [],"
468 " \"priority\": \"USER_ACTION\"," 467 " \"priority\": \"USER_ACTION\","
469 " \"excludedSuggestionIds\": []," 468 " \"excludedSuggestionIds\": [],"
470 " \"topLanguages\": [{" 469 " \"topLanguages\": [{"
471 " \"language\" : \"en\"," 470 " \"language\" : \"en\","
472 " \"frequency\" : 0.5" 471 " \"frequency\" : 0.5"
473 " }]" 472 " }]"
474 "}")); 473 "}"));
475 } 474 }
476 475
477 TEST_F(NTPSnippetsFetcherTest, BuildRequestWithOtherLanguageOnly) { 476 TEST_F(NTPSnippetsFetcherTest, BuildRequestWithOtherLanguageOnly) {
478 NTPSnippetsFetcher::RequestParams params; 477 NTPSnippetsFetcher::RequestBuilder builder;
479 params.only_return_personalized_results = false; 478 builder.params = test_params();
480 params.host_restricts = {}; 479 builder.params.interactive_request = true;
481 params.count_to_fetch = 10; 480 builder.only_return_personalized_results = false;
482 params.interactive_request = true; 481 builder.other_top_language.language_code = "de";
483 params.other_top_language.language_code = "de"; 482 builder.other_top_language.frequency = 0.5f;
484 params.other_top_language.frequency = 0.5f;
485 483
486 params.fetch_api = NTPSnippetsFetcher::CHROME_CONTENT_SUGGESTIONS_API; 484 builder.fetch_api = NTPSnippetsFetcher::CHROME_CONTENT_SUGGESTIONS_API;
487 EXPECT_THAT(params.BuildRequest(), 485 EXPECT_THAT(builder.BuildRequest(),
488 EqualsJSON("{" 486 EqualsJSON("{"
489 " \"regularlyVisitedHostNames\": []," 487 " \"regularlyVisitedHostNames\": [],"
490 " \"priority\": \"USER_ACTION\"," 488 " \"priority\": \"USER_ACTION\","
491 " \"excludedSuggestionIds\": []," 489 " \"excludedSuggestionIds\": [],"
492 " \"topLanguages\": [{" 490 " \"topLanguages\": [{"
493 " \"language\" : \"de\"," 491 " \"language\" : \"de\","
494 " \"frequency\" : 0.5" 492 " \"frequency\" : 0.5"
495 " }]" 493 " }]"
496 "}")); 494 "}"));
497 } 495 }
(...skipping 17 matching lines...) Expand all
515 " \"sourceCorpusInfo\" : [{" 513 " \"sourceCorpusInfo\" : [{"
516 " \"ampUrl\" : \"http://localhost/amp\"," 514 " \"ampUrl\" : \"http://localhost/amp\","
517 " \"corpusId\" : \"http://localhost/foobar\"," 515 " \"corpusId\" : \"http://localhost/foobar\","
518 " \"publisherData\": { \"sourceName\" : \"Foo News\" }" 516 " \"publisherData\": { \"sourceName\" : \"Foo News\" }"
519 " }]" 517 " }]"
520 " }" 518 " }"
521 "}]}"; 519 "}]}";
522 SetFakeResponse(/*response_data=*/kJsonStr, net::HTTP_OK, 520 SetFakeResponse(/*response_data=*/kJsonStr, net::HTTP_OK,
523 net::URLRequestStatus::SUCCESS); 521 net::URLRequestStatus::SUCCESS);
524 EXPECT_CALL(mock_callback(), Run(IsSingleArticle("http://localhost/foobar"))); 522 EXPECT_CALL(mock_callback(), Run(IsSingleArticle("http://localhost/foobar")));
525 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 523 snippets_fetcher().FetchSnippets(test_params());
526 test_excluded(),
527 /*count=*/1,
528 /*interactive_request=*/true);
529 FastForwardUntilNoTasksRemain(); 524 FastForwardUntilNoTasksRemain();
530 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK")); 525 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK"));
531 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr)); 526 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr));
532 EXPECT_THAT(histogram_tester().GetAllSamples( 527 EXPECT_THAT(histogram_tester().GetAllSamples(
533 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 528 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
534 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 529 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
535 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 530 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
536 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs, 531 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs,
537 /*count=*/1))); 532 /*count=*/1)));
538 } 533 }
(...skipping 12 matching lines...) Expand all
551 " \"expirationTime\" : \"2016-07-01T11:01:37.000Z\"," 546 " \"expirationTime\" : \"2016-07-01T11:01:37.000Z\","
552 " \"attribution\" : \"Foo News\"," 547 " \"attribution\" : \"Foo News\","
553 " \"imageUrl\" : \"http://localhost/foobar.jpg\"," 548 " \"imageUrl\" : \"http://localhost/foobar.jpg\","
554 " \"ampUrl\" : \"http://localhost/amp\"," 549 " \"ampUrl\" : \"http://localhost/amp\","
555 " \"faviconUrl\" : \"http://localhost/favicon.ico\" " 550 " \"faviconUrl\" : \"http://localhost/favicon.ico\" "
556 " }]" 551 " }]"
557 "}]}"; 552 "}]}";
558 SetFakeResponse(/*response_data=*/kJsonStr, net::HTTP_OK, 553 SetFakeResponse(/*response_data=*/kJsonStr, net::HTTP_OK,
559 net::URLRequestStatus::SUCCESS); 554 net::URLRequestStatus::SUCCESS);
560 EXPECT_CALL(mock_callback(), Run(IsSingleArticle("http://localhost/foobar"))); 555 EXPECT_CALL(mock_callback(), Run(IsSingleArticle("http://localhost/foobar")));
561 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 556 snippets_fetcher().FetchSnippets(test_params());
562 test_excluded(),
563 /*count=*/1,
564 /*interactive_request=*/true);
565 FastForwardUntilNoTasksRemain(); 557 FastForwardUntilNoTasksRemain();
566 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK")); 558 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK"));
567 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr)); 559 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr));
568 EXPECT_THAT(histogram_tester().GetAllSamples( 560 EXPECT_THAT(histogram_tester().GetAllSamples(
569 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 561 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
570 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 562 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
571 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 563 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
572 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs, 564 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs,
573 /*count=*/1))); 565 /*count=*/1)));
574 } 566 }
575 567
576 TEST_F(NTPSnippetsContentSuggestionsFetcherTest, EmptyCategoryIsOK) { 568 TEST_F(NTPSnippetsContentSuggestionsFetcherTest, EmptyCategoryIsOK) {
577 const std::string kJsonStr = 569 const std::string kJsonStr =
578 "{\"categories\" : [{" 570 "{\"categories\" : [{"
579 " \"id\": 1," 571 " \"id\": 1,"
580 " \"localizedTitle\": \"Articles for You\"" 572 " \"localizedTitle\": \"Articles for You\""
581 "}]}"; 573 "}]}";
582 SetFakeResponse(/*response_data=*/kJsonStr, net::HTTP_OK, 574 SetFakeResponse(/*response_data=*/kJsonStr, net::HTTP_OK,
583 net::URLRequestStatus::SUCCESS); 575 net::URLRequestStatus::SUCCESS);
584 EXPECT_CALL(mock_callback(), Run(IsEmptyArticleList())); 576 EXPECT_CALL(mock_callback(), Run(IsEmptyArticleList()));
585 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 577 snippets_fetcher().FetchSnippets(test_params());
586 test_excluded(),
587 /*count=*/1,
588 /*interactive_request=*/true);
589 FastForwardUntilNoTasksRemain(); 578 FastForwardUntilNoTasksRemain();
590 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK")); 579 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK"));
591 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr)); 580 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr));
592 EXPECT_THAT(histogram_tester().GetAllSamples( 581 EXPECT_THAT(histogram_tester().GetAllSamples(
593 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 582 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
594 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 583 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
595 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 584 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
596 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs, 585 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs,
597 /*count=*/1))); 586 /*count=*/1)));
598 } 587 }
(...skipping 29 matching lines...) Expand all
628 " \"imageUrl\" : \"http://localhost/foo2.jpg\"," 617 " \"imageUrl\" : \"http://localhost/foo2.jpg\","
629 " \"ampUrl\" : \"http://localhost/amp\"," 618 " \"ampUrl\" : \"http://localhost/amp\","
630 " \"faviconUrl\" : \"http://localhost/favicon.ico\" " 619 " \"faviconUrl\" : \"http://localhost/favicon.ico\" "
631 " }]" 620 " }]"
632 "}]}"; 621 "}]}";
633 SetFakeResponse(/*response_data=*/kJsonStr, net::HTTP_OK, 622 SetFakeResponse(/*response_data=*/kJsonStr, net::HTTP_OK,
634 net::URLRequestStatus::SUCCESS); 623 net::URLRequestStatus::SUCCESS);
635 NTPSnippetsFetcher::OptionalFetchedCategories fetched_categories; 624 NTPSnippetsFetcher::OptionalFetchedCategories fetched_categories;
636 EXPECT_CALL(mock_callback(), Run(_)) 625 EXPECT_CALL(mock_callback(), Run(_))
637 .WillOnce(WithArg<0>(MovePointeeTo(&fetched_categories))); 626 .WillOnce(WithArg<0>(MovePointeeTo(&fetched_categories)));
638 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 627 snippets_fetcher().FetchSnippets(test_params());
639 test_excluded(),
640 /*count=*/1,
641 /*interactive_request=*/true);
642 FastForwardUntilNoTasksRemain(); 628 FastForwardUntilNoTasksRemain();
643 629
644 ASSERT_TRUE(fetched_categories); 630 ASSERT_TRUE(fetched_categories);
645 ASSERT_THAT(fetched_categories->size(), Eq(2u)); 631 ASSERT_THAT(fetched_categories->size(), Eq(2u));
646 for (const auto& category : *fetched_categories) { 632 for (const auto& category : *fetched_categories) {
647 const auto& articles = category.snippets; 633 const auto& articles = category.snippets;
648 switch (category.category.id()) { 634 switch (category.category.id()) {
649 case static_cast<int>(KnownCategories::ARTICLES): 635 case static_cast<int>(KnownCategories::ARTICLES):
650 ASSERT_THAT(articles.size(), Eq(1u)); 636 ASSERT_THAT(articles.size(), Eq(1u));
651 EXPECT_THAT(articles[0]->best_source().url.spec(), 637 EXPECT_THAT(articles[0]->best_source().url.spec(),
(...skipping 17 matching lines...) Expand all
669 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 655 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
670 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs, 656 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs,
671 /*count=*/1))); 657 /*count=*/1)));
672 } 658 }
673 659
674 TEST_F(NTPSnippetsFetcherTest, ShouldFetchSuccessfullyEmptyList) { 660 TEST_F(NTPSnippetsFetcherTest, ShouldFetchSuccessfullyEmptyList) {
675 const std::string kJsonStr = "{\"recos\": []}"; 661 const std::string kJsonStr = "{\"recos\": []}";
676 SetFakeResponse(/*response_data=*/kJsonStr, net::HTTP_OK, 662 SetFakeResponse(/*response_data=*/kJsonStr, net::HTTP_OK,
677 net::URLRequestStatus::SUCCESS); 663 net::URLRequestStatus::SUCCESS);
678 EXPECT_CALL(mock_callback(), Run(IsEmptyArticleList())); 664 EXPECT_CALL(mock_callback(), Run(IsEmptyArticleList()));
679 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 665 snippets_fetcher().FetchSnippets(test_params());
680 test_excluded(),
681 /*count=*/1,
682 /*interactive_request=*/true);
683 FastForwardUntilNoTasksRemain(); 666 FastForwardUntilNoTasksRemain();
684 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK")); 667 EXPECT_THAT(snippets_fetcher().last_status(), Eq("OK"));
685 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr)); 668 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr));
686 EXPECT_THAT( 669 EXPECT_THAT(
687 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 670 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
688 ElementsAre(base::Bucket(/*min=*/0, /*count=*/1))); 671 ElementsAre(base::Bucket(/*min=*/0, /*count=*/1)));
689 EXPECT_THAT(histogram_tester().GetAllSamples( 672 EXPECT_THAT(histogram_tester().GetAllSamples(
690 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 673 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
691 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 674 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
692 } 675 }
693 676
694 TEST_F(NTPSnippetsFetcherTest, ShouldRestrictToHosts) { 677 TEST_F(NTPSnippetsFetcherTest, ShouldRestrictToHosts) {
695 net::TestURLFetcherFactory test_url_fetcher_factory; 678 net::TestURLFetcherFactory test_url_fetcher_factory;
696 snippets_fetcher().FetchSnippetsFromHosts( 679 NTPSnippetsFetcher::Params params = test_params();
697 {"www.somehost1.com", "www.somehost2.com"}, test_lang(), test_excluded(), 680 params.hosts = {"www.somehost1.com", "www.somehost2.com"};
698 /*count=*/17, 681 params.count_to_fetch = 17;
699 /*interactive_request=*/true); 682 snippets_fetcher().FetchSnippets(params);
700 net::TestURLFetcher* fetcher = test_url_fetcher_factory.GetFetcherByID(0); 683 net::TestURLFetcher* fetcher = test_url_fetcher_factory.GetFetcherByID(0);
701 ASSERT_THAT(fetcher, NotNull()); 684 ASSERT_THAT(fetcher, NotNull());
702 std::unique_ptr<base::Value> value = 685 std::unique_ptr<base::Value> value =
703 base::JSONReader::Read(fetcher->upload_data()); 686 base::JSONReader::Read(fetcher->upload_data());
704 ASSERT_TRUE(value) << " failed to parse JSON: " 687 ASSERT_TRUE(value) << " failed to parse JSON: "
705 << PrintToString(fetcher->upload_data()); 688 << PrintToString(fetcher->upload_data());
706 const base::DictionaryValue* dict = nullptr; 689 const base::DictionaryValue* dict = nullptr;
707 ASSERT_TRUE(value->GetAsDictionary(&dict)); 690 ASSERT_TRUE(value->GetAsDictionary(&dict));
708 const base::DictionaryValue* local_scoring_params = nullptr; 691 const base::DictionaryValue* local_scoring_params = nullptr;
709 ASSERT_TRUE(dict->GetDictionary("advanced_options.local_scoring_params", 692 ASSERT_TRUE(dict->GetDictionary("advanced_options.local_scoring_params",
710 &local_scoring_params)); 693 &local_scoring_params));
711 const base::ListValue* content_selectors = nullptr; 694 const base::ListValue* content_selectors = nullptr;
712 ASSERT_TRUE( 695 ASSERT_TRUE(
713 local_scoring_params->GetList("content_selectors", &content_selectors)); 696 local_scoring_params->GetList("content_selectors", &content_selectors));
714 ASSERT_THAT(content_selectors->GetSize(), Eq(static_cast<size_t>(2))); 697 ASSERT_THAT(content_selectors->GetSize(), Eq(static_cast<size_t>(2)));
715 const base::DictionaryValue* content_selector = nullptr; 698 const base::DictionaryValue* content_selector = nullptr;
716 ASSERT_TRUE(content_selectors->GetDictionary(0, &content_selector)); 699 ASSERT_TRUE(content_selectors->GetDictionary(0, &content_selector));
717 std::string content_selector_value; 700 std::string content_selector_value;
718 EXPECT_TRUE(content_selector->GetString("value", &content_selector_value)); 701 EXPECT_TRUE(content_selector->GetString("value", &content_selector_value));
719 EXPECT_THAT(content_selector_value, Eq("www.somehost1.com")); 702 EXPECT_THAT(content_selector_value, Eq("www.somehost1.com"));
720 ASSERT_TRUE(content_selectors->GetDictionary(1, &content_selector)); 703 ASSERT_TRUE(content_selectors->GetDictionary(1, &content_selector));
721 EXPECT_TRUE(content_selector->GetString("value", &content_selector_value)); 704 EXPECT_TRUE(content_selector->GetString("value", &content_selector_value));
722 EXPECT_THAT(content_selector_value, Eq("www.somehost2.com")); 705 EXPECT_THAT(content_selector_value, Eq("www.somehost2.com"));
723 } 706 }
724 707
725 TEST_F(NTPSnippetsFetcherTest, ShouldReportUrlStatusError) { 708 TEST_F(NTPSnippetsFetcherTest, ShouldReportUrlStatusError) {
726 SetFakeResponse(/*response_data=*/std::string(), net::HTTP_NOT_FOUND, 709 SetFakeResponse(/*response_data=*/std::string(), net::HTTP_NOT_FOUND,
727 net::URLRequestStatus::FAILED); 710 net::URLRequestStatus::FAILED);
728 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 711 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
729 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 712 snippets_fetcher().FetchSnippets(test_params());
730 test_excluded(),
731 /*count=*/1,
732 /*interactive_request=*/true);
733 FastForwardUntilNoTasksRemain(); 713 FastForwardUntilNoTasksRemain();
734 EXPECT_THAT(snippets_fetcher().last_status(), 714 EXPECT_THAT(snippets_fetcher().last_status(),
735 Eq("URLRequestStatus error -2")); 715 Eq("URLRequestStatus error -2"));
736 EXPECT_THAT(snippets_fetcher().last_json(), IsEmpty()); 716 EXPECT_THAT(snippets_fetcher().last_json(), IsEmpty());
737 EXPECT_THAT( 717 EXPECT_THAT(
738 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 718 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
739 ElementsAre(base::Bucket(/*min=*/2, /*count=*/1))); 719 ElementsAre(base::Bucket(/*min=*/2, /*count=*/1)));
740 EXPECT_THAT(histogram_tester().GetAllSamples( 720 EXPECT_THAT(histogram_tester().GetAllSamples(
741 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 721 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
742 ElementsAre(base::Bucket(/*min=*/-2, /*count=*/1))); 722 ElementsAre(base::Bucket(/*min=*/-2, /*count=*/1)));
743 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 723 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
744 Not(IsEmpty())); 724 Not(IsEmpty()));
745 } 725 }
746 726
747 TEST_F(NTPSnippetsFetcherTest, ShouldReportHttpError) { 727 TEST_F(NTPSnippetsFetcherTest, ShouldReportHttpError) {
748 SetFakeResponse(/*response_data=*/std::string(), net::HTTP_NOT_FOUND, 728 SetFakeResponse(/*response_data=*/std::string(), net::HTTP_NOT_FOUND,
749 net::URLRequestStatus::SUCCESS); 729 net::URLRequestStatus::SUCCESS);
750 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 730 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
751 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 731 snippets_fetcher().FetchSnippets(test_params());
752 test_excluded(),
753 /*count=*/1,
754 /*interactive_request=*/true);
755 FastForwardUntilNoTasksRemain(); 732 FastForwardUntilNoTasksRemain();
756 EXPECT_THAT(snippets_fetcher().last_json(), IsEmpty()); 733 EXPECT_THAT(snippets_fetcher().last_json(), IsEmpty());
757 EXPECT_THAT( 734 EXPECT_THAT(
758 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 735 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
759 ElementsAre(base::Bucket(/*min=*/3, /*count=*/1))); 736 ElementsAre(base::Bucket(/*min=*/3, /*count=*/1)));
760 EXPECT_THAT(histogram_tester().GetAllSamples( 737 EXPECT_THAT(histogram_tester().GetAllSamples(
761 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 738 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
762 ElementsAre(base::Bucket(/*min=*/404, /*count=*/1))); 739 ElementsAre(base::Bucket(/*min=*/404, /*count=*/1)));
763 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 740 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
764 Not(IsEmpty())); 741 Not(IsEmpty()));
765 } 742 }
766 743
767 TEST_F(NTPSnippetsFetcherTest, ShouldReportJsonError) { 744 TEST_F(NTPSnippetsFetcherTest, ShouldReportJsonError) {
768 const std::string kInvalidJsonStr = "{ \"recos\": []"; 745 const std::string kInvalidJsonStr = "{ \"recos\": []";
769 SetFakeResponse(/*response_data=*/kInvalidJsonStr, net::HTTP_OK, 746 SetFakeResponse(/*response_data=*/kInvalidJsonStr, net::HTTP_OK,
770 net::URLRequestStatus::SUCCESS); 747 net::URLRequestStatus::SUCCESS);
771 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 748 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
772 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 749 snippets_fetcher().FetchSnippets(test_params());
773 test_excluded(),
774 /*count=*/1,
775 /*interactive_request=*/true);
776 FastForwardUntilNoTasksRemain(); 750 FastForwardUntilNoTasksRemain();
777 EXPECT_THAT(snippets_fetcher().last_status(), 751 EXPECT_THAT(snippets_fetcher().last_status(),
778 StartsWith("Received invalid JSON (error ")); 752 StartsWith("Received invalid JSON (error "));
779 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kInvalidJsonStr)); 753 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kInvalidJsonStr));
780 EXPECT_THAT( 754 EXPECT_THAT(
781 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 755 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
782 ElementsAre(base::Bucket(/*min=*/4, /*count=*/1))); 756 ElementsAre(base::Bucket(/*min=*/4, /*count=*/1)));
783 EXPECT_THAT(histogram_tester().GetAllSamples( 757 EXPECT_THAT(histogram_tester().GetAllSamples(
784 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 758 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
785 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 759 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
786 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 760 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
787 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs, 761 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs,
788 /*count=*/1))); 762 /*count=*/1)));
789 } 763 }
790 764
791 TEST_F(NTPSnippetsFetcherTest, ShouldReportJsonErrorForEmptyResponse) { 765 TEST_F(NTPSnippetsFetcherTest, ShouldReportJsonErrorForEmptyResponse) {
792 SetFakeResponse(/*response_data=*/std::string(), net::HTTP_OK, 766 SetFakeResponse(/*response_data=*/std::string(), net::HTTP_OK,
793 net::URLRequestStatus::SUCCESS); 767 net::URLRequestStatus::SUCCESS);
794 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 768 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
795 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 769 snippets_fetcher().FetchSnippets(test_params());
796 test_excluded(),
797 /*count=*/1,
798 /*interactive_request=*/true);
799 FastForwardUntilNoTasksRemain(); 770 FastForwardUntilNoTasksRemain();
800 EXPECT_THAT(snippets_fetcher().last_json(), std::string()); 771 EXPECT_THAT(snippets_fetcher().last_json(), std::string());
801 EXPECT_THAT( 772 EXPECT_THAT(
802 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 773 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
803 ElementsAre(base::Bucket(/*min=*/4, /*count=*/1))); 774 ElementsAre(base::Bucket(/*min=*/4, /*count=*/1)));
804 EXPECT_THAT(histogram_tester().GetAllSamples( 775 EXPECT_THAT(histogram_tester().GetAllSamples(
805 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 776 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
806 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 777 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
807 } 778 }
808 779
809 TEST_F(NTPSnippetsFetcherTest, ShouldReportInvalidListError) { 780 TEST_F(NTPSnippetsFetcherTest, ShouldReportInvalidListError) {
810 const std::string kJsonStr = 781 const std::string kJsonStr =
811 "{\"recos\": [{ \"contentInfo\": { \"foo\" : \"bar\" }}]}"; 782 "{\"recos\": [{ \"contentInfo\": { \"foo\" : \"bar\" }}]}";
812 SetFakeResponse(/*response_data=*/kJsonStr, net::HTTP_OK, 783 SetFakeResponse(/*response_data=*/kJsonStr, net::HTTP_OK,
813 net::URLRequestStatus::SUCCESS); 784 net::URLRequestStatus::SUCCESS);
814 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 785 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
815 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 786 snippets_fetcher().FetchSnippets(test_params());
816 test_excluded(),
817 /*count=*/1,
818 /*interactive_request=*/true);
819 FastForwardUntilNoTasksRemain(); 787 FastForwardUntilNoTasksRemain();
820 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr)); 788 EXPECT_THAT(snippets_fetcher().last_json(), Eq(kJsonStr));
821 EXPECT_THAT( 789 EXPECT_THAT(
822 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 790 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
823 ElementsAre(base::Bucket(/*min=*/5, /*count=*/1))); 791 ElementsAre(base::Bucket(/*min=*/5, /*count=*/1)));
824 EXPECT_THAT(histogram_tester().GetAllSamples( 792 EXPECT_THAT(histogram_tester().GetAllSamples(
825 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 793 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
826 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 794 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
827 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 795 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
828 Not(IsEmpty())); 796 Not(IsEmpty()));
829 } 797 }
830 798
831 // This test actually verifies that the test setup itself is sane, to prevent 799 // This test actually verifies that the test setup itself is sane, to prevent
832 // hard-to-reproduce test failures. 800 // hard-to-reproduce test failures.
833 TEST_F(NTPSnippetsFetcherTest, ShouldReportHttpErrorForMissingBakedResponse) { 801 TEST_F(NTPSnippetsFetcherTest, ShouldReportHttpErrorForMissingBakedResponse) {
834 InitFakeURLFetcherFactory(); 802 InitFakeURLFetcherFactory();
835 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1); 803 EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
836 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 804 snippets_fetcher().FetchSnippets(test_params());
837 test_excluded(),
838 /*count=*/1,
839 /*interactive_request=*/true);
840 FastForwardUntilNoTasksRemain(); 805 FastForwardUntilNoTasksRemain();
841 } 806 }
842 807
843 TEST_F(NTPSnippetsFetcherTest, ShouldCancelOngoingFetch) { 808 TEST_F(NTPSnippetsFetcherTest, ShouldCancelOngoingFetch) {
844 const std::string kJsonStr = "{ \"recos\": [] }"; 809 const std::string kJsonStr = "{ \"recos\": [] }";
845 SetFakeResponse(/*response_data=*/kJsonStr, net::HTTP_OK, 810 SetFakeResponse(/*response_data=*/kJsonStr, net::HTTP_OK,
846 net::URLRequestStatus::SUCCESS); 811 net::URLRequestStatus::SUCCESS);
847 EXPECT_CALL(mock_callback(), Run(IsEmptyArticleList())); 812 EXPECT_CALL(mock_callback(), Run(IsEmptyArticleList()));
848 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 813 snippets_fetcher().FetchSnippets(test_params());
849 test_excluded(), 814 // Second call to FetchSnippets() overrides/cancels the previous.
850 /*count=*/1,
851 /*interactive_request=*/true);
852 // Second call to FetchSnippetsFromHosts() overrides/cancels the previous.
853 // Callback is expected to be called once. 815 // Callback is expected to be called once.
854 snippets_fetcher().FetchSnippetsFromHosts(test_hosts(), test_lang(), 816 snippets_fetcher().FetchSnippets(test_params());
855 test_excluded(),
856 /*count=*/1,
857 /*interactive_request=*/true);
858 FastForwardUntilNoTasksRemain(); 817 FastForwardUntilNoTasksRemain();
859 EXPECT_THAT( 818 EXPECT_THAT(
860 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"), 819 histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
861 ElementsAre(base::Bucket(/*min=*/0, /*count=*/1))); 820 ElementsAre(base::Bucket(/*min=*/0, /*count=*/1)));
862 EXPECT_THAT(histogram_tester().GetAllSamples( 821 EXPECT_THAT(histogram_tester().GetAllSamples(
863 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"), 822 "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
864 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1))); 823 ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
865 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"), 824 EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
866 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs, 825 ElementsAre(base::Bucket(/*min=*/kTestJsonParsingLatencyMs,
867 /*count=*/1))); 826 /*count=*/1)));
868 } 827 }
869 828
870 ::std::ostream& operator<<( 829 ::std::ostream& operator<<(
871 ::std::ostream& os, 830 ::std::ostream& os,
872 const NTPSnippetsFetcher::OptionalFetchedCategories& fetched_categories) { 831 const NTPSnippetsFetcher::OptionalFetchedCategories& fetched_categories) {
873 if (fetched_categories) { 832 if (fetched_categories) {
874 // Matchers above aren't any more precise than this, so this is sufficient 833 // Matchers above aren't any more precise than this, so this is sufficient
875 // for test-failure diagnostics. 834 // for test-failure diagnostics.
876 return os << "list with " << fetched_categories->size() << " elements"; 835 return os << "list with " << fetched_categories->size() << " elements";
877 } 836 }
878 return os << "null"; 837 return os << "null";
879 } 838 }
880 839
881 } // namespace ntp_snippets 840 } // namespace ntp_snippets
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698