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

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

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

Powered by Google App Engine
This is Rietveld 408576698