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

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

Issue 1921553004: Add favicon and publisher name to snippet cards (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 4 years, 8 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
1 // Copyright 2015 The Chromium Authors. All rights reserved. 1 // Copyright 2015 The Chromium Authors. All rights reserved.
2 // Use of this source code is governed by a BSD-style license that can be 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 #include "components/ntp_snippets/ntp_snippets_service.h" 5 #include "components/ntp_snippets/ntp_snippets_service.h"
6 6
7 #include <memory> 7 #include <memory>
8 #include <vector>
8 9
9 #include "base/json/json_reader.h" 10 #include "base/json/json_reader.h"
10 #include "base/macros.h" 11 #include "base/macros.h"
11 #include "base/memory/ptr_util.h" 12 #include "base/memory/ptr_util.h"
12 #include "base/message_loop/message_loop.h" 13 #include "base/message_loop/message_loop.h"
13 #include "base/strings/string_number_conversions.h" 14 #include "base/strings/string_number_conversions.h"
14 #include "base/strings/string_util.h" 15 #include "base/strings/string_util.h"
15 #include "base/strings/stringprintf.h" 16 #include "base/strings/stringprintf.h"
16 #include "base/thread_task_runner_handle.h" 17 #include "base/thread_task_runner_handle.h"
17 #include "base/time/time.h" 18 #include "base/time/time.h"
(...skipping 16 matching lines...) Expand all
34 base::Time GetDefaultCreationTime() { 35 base::Time GetDefaultCreationTime() {
35 return base::Time::FromUTCExploded(kDefaultCreationTime); 36 return base::Time::FromUTCExploded(kDefaultCreationTime);
36 } 37 }
37 38
38 std::string GetTestJson(const std::string& content_creation_time_str, 39 std::string GetTestJson(const std::string& content_creation_time_str,
39 const std::string& expiry_time_str) { 40 const std::string& expiry_time_str) {
40 char json_str_format[] = 41 char json_str_format[] =
41 "{ \"recos\": [ " 42 "{ \"recos\": [ "
42 "{ \"contentInfo\": {" 43 "{ \"contentInfo\": {"
43 "\"url\" : \"http://localhost/foobar\"," 44 "\"url\" : \"http://localhost/foobar\","
44 "\"site_title\" : \"Site Title\","
45 "\"favicon_url\" : \"http://localhost/favicon\","
46 "\"title\" : \"Title\"," 45 "\"title\" : \"Title\","
47 "\"snippet\" : \"Snippet\"," 46 "\"snippet\" : \"Snippet\","
48 "\"thumbnailUrl\" : \"http://localhost/salient_image\"," 47 "\"thumbnailUrl\" : \"http://localhost/salient_image\","
49 "\"creationTimestampSec\" : \"%s\"," 48 "\"creationTimestampSec\" : \"%s\","
50 "\"expiryTimestampSec\" : \"%s\"," 49 "\"expiryTimestampSec\" : \"%s\","
51 "\"sourceCorpusInfo\" : [ " 50 "\"sourceCorpusInfo\" : [ "
52 "{\"ampUrl\" : \"http://localhost/amp\"}," 51 "{\"ampUrl\" : \"http://localhost/amp\","
53 "{\"corpusId\" : \"id\"}]" 52 "\"corpusId\" : \"http://localhost/foobar\","
53 "\"publisherData\": { \"sourceName\" : \"Foo News\"}}]"
54 "}}" 54 "}}"
55 "]}"; 55 "]}";
56 56
57 return base::StringPrintf(json_str_format, content_creation_time_str.c_str(), 57 return base::StringPrintf(json_str_format, content_creation_time_str.c_str(),
58 expiry_time_str.c_str()); 58 expiry_time_str.c_str());
59 } 59 }
60 60
61 std::string GetTestJsonWithSources(const std::string& content_creation_time_str,
62 const std::string& expiry_time_str,
63 const std::vector<std::string>& source_urls,
64 const std::vector<std::string>& publishers,
65 const std::vector<std::string>& amp_urls) {
66 char json_str_format[] =
67 "{ \"recos\": [ "
68 "{ \"contentInfo\": {"
69 "\"url\" : \"http://localhost/foobar\","
70 "\"title\" : \"Title\","
71 "\"snippet\" : \"Snippet\","
72 "\"thumbnailUrl\" : \"http://localhost/salient_image\","
73 "\"creationTimestampSec\" : \"%s\","
74 "\"expiryTimestampSec\" : \"%s\","
75 "\"sourceCorpusInfo\" : [%s]"
76 "}}"
77 "]}";
78
79 char source_corpus_info_format[] =
80 "{\"corpusId\": \"%s\","
81 "\"publisherData\": {"
82 "\"sourceName\": \"%s\""
83 "},"
84 "\"ampUrl\": \"%s\"}";
85
86 std::string source_corpus_info_list_str;
87 for (size_t i = 0; i < source_urls.size(); ++i) {
88 std::string source_corpus_info_str =
89 base::StringPrintf(source_corpus_info_format,
90 source_urls[i].empty() ? "" : source_urls[i].c_str(),
91 publishers[i].empty() ? "" : publishers[i].c_str(),
92 amp_urls[i].empty() ? "" : amp_urls[i].c_str());
93 source_corpus_info_list_str.append(source_corpus_info_str);
94 source_corpus_info_list_str.append(",");
95 }
96 // Remove the last comma
97 source_corpus_info_list_str.pop_back();
98 return base::StringPrintf(json_str_format, content_creation_time_str.c_str(),
99 expiry_time_str.c_str(),
100 source_corpus_info_list_str.c_str());
101 }
102
103 std::string GetTestJsonWithSources(const std::vector<std::string>& source_urls,
104 const std::vector<std::string>& publishers,
105 const std::vector<std::string>& amp_urls) {
106 base::Time expiry_time = base::Time::Now() + base::TimeDelta::FromHours(1);
107 return GetTestJsonWithSources(
108 NTPSnippet::TimeToJsonString(GetDefaultCreationTime()),
109 NTPSnippet::TimeToJsonString(expiry_time), source_urls, publishers,
110 amp_urls);
111 }
112
61 std::string GetTestJson(const std::string& content_creation_time_str) { 113 std::string GetTestJson(const std::string& content_creation_time_str) {
62 base::Time expiry_time = base::Time::Now() + base::TimeDelta::FromHours(1); 114 base::Time expiry_time = base::Time::Now() + base::TimeDelta::FromHours(1);
63 return GetTestJson(content_creation_time_str, 115 return GetTestJson(content_creation_time_str,
64 NTPSnippet::TimeToJsonString(expiry_time)); 116 NTPSnippet::TimeToJsonString(expiry_time));
65 } 117 }
66 118
67 std::string GetTestJson() { 119 std::string GetTestJson() {
68 return GetTestJson(NTPSnippet::TimeToJsonString(GetDefaultCreationTime())); 120 return GetTestJson(NTPSnippet::TimeToJsonString(GetDefaultCreationTime()));
69 } 121 }
70 122
(...skipping 141 matching lines...) Expand 10 before | Expand all | Expand 10 after
212 TEST_F(NTPSnippetsServiceTest, Full) { 264 TEST_F(NTPSnippetsServiceTest, Full) {
213 std::string json_str(GetTestJson()); 265 std::string json_str(GetTestJson());
214 266
215 LoadFromJSONString(json_str); 267 LoadFromJSONString(json_str);
216 EXPECT_EQ(service()->size(), 1u); 268 EXPECT_EQ(service()->size(), 1u);
217 269
218 // The same for loop without the '&' should not compile. 270 // The same for loop without the '&' should not compile.
219 for (auto& snippet : *service()) { 271 for (auto& snippet : *service()) {
220 // Snippet here is a const. 272 // Snippet here is a const.
221 EXPECT_EQ(snippet.url(), GURL("http://localhost/foobar")); 273 EXPECT_EQ(snippet.url(), GURL("http://localhost/foobar"));
222 EXPECT_EQ(snippet.site_title(), "Site Title"); 274 EXPECT_EQ(snippet.site_title(), "Foo News");
223 EXPECT_EQ(snippet.favicon_url(), GURL("http://localhost/favicon"));
224 EXPECT_EQ(snippet.title(), "Title"); 275 EXPECT_EQ(snippet.title(), "Title");
225 EXPECT_EQ(snippet.snippet(), "Snippet"); 276 EXPECT_EQ(snippet.snippet(), "Snippet");
226 EXPECT_EQ(snippet.salient_image_url(), 277 EXPECT_EQ(snippet.salient_image_url(),
227 GURL("http://localhost/salient_image")); 278 GURL("http://localhost/salient_image"));
228 EXPECT_EQ(GetDefaultCreationTime(), snippet.publish_date()); 279 EXPECT_EQ(GetDefaultCreationTime(), snippet.publish_date());
229 EXPECT_EQ(snippet.amp_url(), GURL("http://localhost/amp")); 280 EXPECT_EQ(snippet.amp_url().spec(), GURL("http://localhost/amp").spec());
230 } 281 }
231 } 282 }
232 283
233 TEST_F(NTPSnippetsServiceTest, Clear) { 284 TEST_F(NTPSnippetsServiceTest, Clear) {
234 std::string json_str(GetTestJson()); 285 std::string json_str(GetTestJson());
235 286
236 LoadFromJSONString(json_str); 287 LoadFromJSONString(json_str);
237 EXPECT_EQ(service()->size(), 1u); 288 EXPECT_EQ(service()->size(), 1u);
238 289
239 service()->ClearSnippets(); 290 service()->ClearSnippets();
240 EXPECT_EQ(service()->size(), 0u); 291 EXPECT_EQ(service()->size(), 0u);
241 } 292 }
242 293
243 TEST_F(NTPSnippetsServiceTest, InsertAtFront) { 294 TEST_F(NTPSnippetsServiceTest, InsertAtFront) {
295 std::vector<std::string> source_urls;
Bernhard Bauer 2016/04/27 13:22:05 I think you could use an initializer list here to
Bernhard Bauer 2016/04/28 14:19:20 Ping :)
May 2016/04/28 18:01:52 Done.
296 source_urls.push_back(std::string("http://first"));
297 std::vector<std::string> publishers;
298 publishers.push_back(std::string("Source 1"));
299 std::vector<std::string> amp_urls;
300 amp_urls.push_back(std::string(""));
Bernhard Bauer 2016/04/27 13:22:05 The empty string literal is unnecessary.
Bernhard Bauer 2016/04/28 14:19:20 Ping :)
May 2016/04/28 18:01:52 Done.
244 std::string json_str( 301 std::string json_str(
245 "{ \"recos\": [ " 302 GetTestJsonWithSources(source_urls, publishers, amp_urls));
246 " { \"contentInfo\": { \"url\" : \"http://first\" }}" 303
247 "]}");
248 LoadFromJSONString(json_str); 304 LoadFromJSONString(json_str);
305
249 ASSERT_EQ(service()->size(), 1u); 306 ASSERT_EQ(service()->size(), 1u);
250 307
251 std::string json_str2( 308 source_urls.clear();
252 "{ \"recos\": [ " 309 source_urls.push_back(std::string("http://second"));
253 " { \"contentInfo\": { \"url\" : \"http://second\" }}" 310 publishers.clear();
254 "]}"); 311 publishers.push_back(std::string("Source 1"));
255 LoadFromJSONString(json_str2); 312 amp_urls.clear();
313 amp_urls.push_back(std::string(""));
314 json_str = GetTestJsonWithSources(source_urls, publishers, amp_urls);
315
316 LoadFromJSONString(json_str);
256 ASSERT_EQ(service()->size(), 2u); 317 ASSERT_EQ(service()->size(), 2u);
257 318
258 // The snippet loaded last should be at the first position in the list now. 319 // The snippet loaded last should be at the first position in the list now.
259 const NTPSnippet& first_snippet = *service()->begin(); 320 const NTPSnippet& first_snippet = *service()->begin();
260 EXPECT_EQ(first_snippet.url(), GURL("http://second")); 321 EXPECT_EQ(first_snippet.url(), GURL("http://second"));
261 } 322 }
262 323
263 TEST_F(NTPSnippetsServiceTest, LimitNumSnippets) { 324 TEST_F(NTPSnippetsServiceTest, LimitNumSnippets) {
264 int max_snippet_count = NTPSnippetsService::GetMaxSnippetCountForTesting(); 325 int max_snippet_count = NTPSnippetsService::GetMaxSnippetCountForTesting();
265 int snippets_per_load = max_snippet_count / 2 + 1; 326 int snippets_per_load = max_snippet_count / 2 + 1;
(...skipping 41 matching lines...) Expand 10 before | Expand all | Expand 10 after
307 TEST_F(NTPSnippetsServiceTest, LoadIncompleteJsonWithExistingSnippets) { 368 TEST_F(NTPSnippetsServiceTest, LoadIncompleteJsonWithExistingSnippets) {
308 LoadFromJSONString(GetTestJson()); 369 LoadFromJSONString(GetTestJson());
309 ASSERT_EQ(service()->size(), 1u); 370 ASSERT_EQ(service()->size(), 1u);
310 371
311 LoadFromJSONString(GetIncompleteJson()); 372 LoadFromJSONString(GetIncompleteJson());
312 // This should not have changed the existing snippets. 373 // This should not have changed the existing snippets.
313 EXPECT_EQ(service()->size(), 1u); 374 EXPECT_EQ(service()->size(), 1u);
314 } 375 }
315 376
316 TEST_F(NTPSnippetsServiceTest, Discard) { 377 TEST_F(NTPSnippetsServiceTest, Discard) {
378 std::vector<std::string> source_urls;
379 source_urls.push_back(std::string("http://site.com"));
380 std::vector<std::string> publishers;
381 publishers.push_back(std::string("Source 1"));
382 std::vector<std::string> amp_urls;
383 amp_urls.push_back(std::string(""));
317 std::string json_str( 384 std::string json_str(
318 "{ \"recos\": [ { \"contentInfo\": { \"url\" : \"http://site.com\" }}]}"); 385 GetTestJsonWithSources(source_urls, publishers, amp_urls));
386
319 LoadFromJSONString(json_str); 387 LoadFromJSONString(json_str);
320 388
321 ASSERT_EQ(1u, service()->size()); 389 ASSERT_EQ(1u, service()->size());
322 390
323 // Discarding a non-existent snippet shouldn't do anything. 391 // Discarding a non-existent snippet shouldn't do anything.
324 EXPECT_FALSE(service()->DiscardSnippet(GURL("http://othersite.com"))); 392 EXPECT_FALSE(service()->DiscardSnippet(GURL("http://othersite.com")));
325 EXPECT_EQ(1u, service()->size()); 393 EXPECT_EQ(1u, service()->size());
326 394
327 // Discard the snippet. 395 // Discard the snippet.
328 EXPECT_TRUE(service()->DiscardSnippet(GURL("http://site.com"))); 396 EXPECT_TRUE(service()->DiscardSnippet(GURL("http://site.com")));
329 EXPECT_EQ(0u, service()->size()); 397 EXPECT_EQ(0u, service()->size());
330 398
331 // Make sure that fetching the same snippet again does not re-add it. 399 // Make sure that fetching the same snippet again does not re-add it.
332 LoadFromJSONString(json_str); 400 LoadFromJSONString(json_str);
333 EXPECT_EQ(0u, service()->size()); 401 EXPECT_EQ(0u, service()->size());
334 402
335 // The snippet should stay discarded even after re-creating the service. 403 // The snippet should stay discarded even after re-creating the service.
336 CreateSnippetsService(); 404 CreateSnippetsService();
337 LoadFromJSONString(json_str); 405 LoadFromJSONString(json_str);
338 EXPECT_EQ(0u, service()->size()); 406 EXPECT_EQ(0u, service()->size());
339 407
340 // The snippet can be added again after clearing discarded snippets. 408 // The snippet can be added again after clearing discarded snippets.
341 service()->ClearDiscardedSnippets(); 409 service()->ClearDiscardedSnippets();
342 EXPECT_EQ(0u, service()->size()); 410 EXPECT_EQ(0u, service()->size());
343 LoadFromJSONString(json_str); 411 LoadFromJSONString(json_str);
344 EXPECT_EQ(1u, service()->size()); 412 EXPECT_EQ(1u, service()->size());
345 } 413 }
346 414
347 TEST_F(NTPSnippetsServiceTest, GetDiscarded) { 415 TEST_F(NTPSnippetsServiceTest, GetDiscarded) {
348 std::string json_str( 416 LoadFromJSONString(GetTestJson());
349 "{ \"recos\": [ { \"contentInfo\": { \"url\" : \"http://site.com\" }}]}");
350 LoadFromJSONString(json_str);
351 417
352 // For the test, we need the snippet to get discarded. 418 // For the test, we need the snippet to get discarded.
353 ASSERT_TRUE(service()->DiscardSnippet(GURL("http://site.com"))); 419 ASSERT_TRUE(service()->DiscardSnippet(GURL("http://localhost/foobar")));
354 const NTPSnippetsService::NTPSnippetStorage& snippets = 420 const NTPSnippetsService::NTPSnippetStorage& snippets =
355 service()->discarded_snippets(); 421 service()->discarded_snippets();
356 EXPECT_EQ(1u, snippets.size()); 422 EXPECT_EQ(1u, snippets.size());
357 for (auto& snippet : snippets) { 423 for (auto& snippet : snippets) {
358 EXPECT_EQ(GURL("http://site.com"), snippet->url()); 424 EXPECT_EQ(GURL("http://localhost/foobar"), snippet->url());
359 } 425 }
360 426
361 // There should be no discarded snippet after clearing the list. 427 // There should be no discarded snippet after clearing the list.
362 service()->ClearDiscardedSnippets(); 428 service()->ClearDiscardedSnippets();
363 EXPECT_EQ(0u, service()->discarded_snippets().size()); 429 EXPECT_EQ(0u, service()->discarded_snippets().size());
364 } 430 }
365 431
366 TEST_F(NTPSnippetsServiceTest, CreationTimestampParseFail) { 432 TEST_F(NTPSnippetsServiceTest, CreationTimestampParseFail) {
367 std::string json_str(GetTestJson("aaa1448459205")); 433 std::string json_str(GetTestJson("aaa1448459205"));
368 434
(...skipping 10 matching lines...) Expand all
379 } 445 }
380 } 446 }
381 447
382 TEST_F(NTPSnippetsServiceTest, RemoveExpiredContent) { 448 TEST_F(NTPSnippetsServiceTest, RemoveExpiredContent) {
383 std::string json_str(GetTestExpiredJson()); 449 std::string json_str(GetTestExpiredJson());
384 450
385 LoadFromJSONString(json_str); 451 LoadFromJSONString(json_str);
386 EXPECT_EQ(service()->size(), 0u); 452 EXPECT_EQ(service()->size(), 0u);
387 } 453 }
388 454
455 TEST_F(NTPSnippetsServiceTest, TestSingleSource) {
456 std::vector<std::string> source_urls;
457 source_urls.push_back(std::string("http://source1.com"));
458 std::vector<std::string> publishers;
459 publishers.push_back(std::string("Source 1"));
460 std::vector<std::string> amp_urls;
461 amp_urls.push_back(std::string("http://source1.amp.com"));
462 std::string json_str(
463 GetTestJsonWithSources(source_urls, publishers, amp_urls));
464
465 LoadFromJSONString(json_str);
466 EXPECT_EQ(service()->size(), 1u);
467
468 for (auto& snippet : *service()) {
469 EXPECT_EQ(snippet.url(), GURL("http://source1.com"));
470 EXPECT_EQ(snippet.site_title(), std::string("Source 1"));
471 EXPECT_EQ(snippet.amp_url(), GURL("http://source1.amp.com"));
472 EXPECT_EQ(snippet.get_sources().size(), 1u);
473 }
474 }
475
476 TEST_F(NTPSnippetsServiceTest, TestSingleSourceWithMalformedUrl) {
477 std::vector<std::string> source_urls;
478 source_urls.push_back(std::string("aaaa"));
479 std::vector<std::string> publishers;
480 publishers.push_back(std::string("Source 1"));
481 std::vector<std::string> amp_urls;
482 amp_urls.push_back(std::string("http://source1.amp.com"));
483 std::string json_str(
484 GetTestJsonWithSources(source_urls, publishers, amp_urls));
485
486 LoadFromJSONString(json_str);
487 // If we're running a release build, we only add snippets that have a well-
488 // formed source url
489 #if !DCHECK_IS_ON()
490 EXPECT_EQ(service()->size(), 0u);
491 #else
492 EXPECT_EQ(service()->size(), 1u);
493
494 for (auto& snippet : *service()) {
495 EXPECT_EQ(snippet.site_title(), std::string());
496 EXPECT_EQ(snippet.get_sources().size(), 0u);
497 }
498 #endif
499 }
500
501 TEST_F(NTPSnippetsServiceTest, TestSingleSourceWithMissingData) {
502 std::vector<std::string> source_urls;
503 source_urls.push_back(std::string("http://source1.com"));
504 std::vector<std::string> publishers;
505 publishers.push_back(std::string(""));
506 std::vector<std::string> amp_urls;
507 amp_urls.push_back(std::string(""));
508 std::string json_str(
509 GetTestJsonWithSources(source_urls, publishers, amp_urls));
510
511 LoadFromJSONString(json_str);
512 // If we're running a release build, we only add snippets have a source url
513 // and publisher
514 #if !DCHECK_IS_ON()
515 EXPECT_EQ(service()->size(), 0u);
516 #else
517 EXPECT_EQ(service()->size(), 1u);
518
519 for (auto& snippet : *service()) {
520 EXPECT_EQ(snippet.url(), GURL("http://source1.com"));
521 EXPECT_EQ(snippet.site_title(), std::string());
522 EXPECT_EQ(snippet.amp_url(), GURL());
523 EXPECT_EQ(snippet.get_sources().size(), 1u);
524 }
525 #endif
526 }
527
528 TEST_F(NTPSnippetsServiceTest, TestMultipleSources) {
529 std::vector<std::string> source_urls;
530 source_urls.push_back(std::string("http://source1.com"));
531 source_urls.push_back(std::string("http://source2.com"));
532 std::vector<std::string> publishers;
533 publishers.push_back(std::string("Source 1"));
534 publishers.push_back(std::string("Source 2"));
535 std::vector<std::string> amp_urls;
536 amp_urls.push_back(std::string("http://source1.amp.com"));
537 amp_urls.push_back(std::string("http://source2.amp.com"));
538 std::string json_str(
539 GetTestJsonWithSources(source_urls, publishers, amp_urls));
540
541 LoadFromJSONString(json_str);
542 EXPECT_EQ(service()->size(), 1u);
543
544 // Expect the first source to be chosen
545 for (auto& snippet : *service()) {
546 EXPECT_EQ(snippet.get_sources().size(), 2u);
547 EXPECT_EQ(snippet.url(), GURL("http://source1.com"));
548 EXPECT_EQ(snippet.site_title(), std::string("Source 1"));
549 EXPECT_EQ(snippet.amp_url(), GURL("http://source1.amp.com"));
550 }
551 }
552
553 TEST_F(NTPSnippetsServiceTest, TestMultipleIncompleteSources) {
554 // Set Source 2 to have no AMP url, and Source 1 to have no publisher name
555 // Source 2 should win since we favor publisher name over amp url
556 std::vector<std::string> source_urls;
557 source_urls.push_back(std::string("http://source1.com"));
558 source_urls.push_back(std::string("http://source2.com"));
559 std::vector<std::string> publishers;
560 publishers.push_back(std::string(""));
561 publishers.push_back(std::string("Source 2"));
562 std::vector<std::string> amp_urls;
563 amp_urls.push_back(std::string("http://source1.amp.com"));
564 amp_urls.push_back(std::string(""));
565 std::string json_str(
566 GetTestJsonWithSources(source_urls, publishers, amp_urls));
567
568 LoadFromJSONString(json_str);
569 EXPECT_EQ(service()->size(), 1u);
570
571 for (auto& snippet : *service()) {
572 EXPECT_EQ(snippet.get_sources().size(), 2u);
573 EXPECT_EQ(snippet.url(), GURL("http://source2.com"));
574 EXPECT_EQ(snippet.site_title(), std::string("Source 2"));
575 EXPECT_EQ(snippet.amp_url(), GURL());
576 }
577
578 service()->ClearSnippets();
579 // Set Source 1 to have no AMP url, and Source 2 to have no publisher name
580 // Source 1 should win in this case since we prefer publisher name to AMP url
581 source_urls.clear();
582 source_urls.push_back(std::string("http://source1.com"));
583 source_urls.push_back(std::string("http://source2.com"));
584 publishers.clear();
585 publishers.push_back(std::string("Source 1"));
586 publishers.push_back(std::string(""));
587 amp_urls.clear();
588 amp_urls.push_back(std::string(""));
589 amp_urls.push_back(std::string("http://source2.amp.com"));
590 json_str = GetTestJsonWithSources(source_urls, publishers, amp_urls);
591
592 LoadFromJSONString(json_str);
593 EXPECT_EQ(service()->size(), 1u);
594
595 for (auto& snippet : *service()) {
596 EXPECT_EQ(snippet.get_sources().size(), 2u);
597 EXPECT_EQ(snippet.url(), GURL("http://source1.com"));
598 EXPECT_EQ(snippet.site_title(), std::string("Source 1"));
599 EXPECT_EQ(snippet.amp_url(), GURL());
600 }
601
602 service()->ClearSnippets();
603 // Set source 1 to have no AMP url and no source. Source 1 should win since
604 // all sources without publisher name are ranked equally
605 source_urls.clear();
606 source_urls.push_back(std::string("http://source1.com"));
607 source_urls.push_back(std::string("http://source2.com"));
608 publishers.clear();
609 publishers.push_back(std::string(""));
610 publishers.push_back(std::string(""));
611 amp_urls.clear();
612 amp_urls.push_back(std::string(""));
613 amp_urls.push_back(std::string("http://source2.amp.com"));
614 json_str = GetTestJsonWithSources(source_urls, publishers, amp_urls);
615
616 LoadFromJSONString(json_str);
617 #if !DCHECK_IS_ON()
618 EXPECT_EQ(service()->size(), 0u);
619 #else
620 EXPECT_EQ(service()->size(), 1u);
621 for (auto& snippet : *service()) {
622 EXPECT_EQ(snippet.get_sources().size(), 2u);
623 EXPECT_EQ(snippet.url(), GURL("http://source1.com"));
624 EXPECT_EQ(snippet.site_title(), std::string());
625 EXPECT_EQ(snippet.amp_url(), GURL());
626 }
627 #endif
628 }
629
630 TEST_F(NTPSnippetsServiceTest, TestMultipleCompleteSources) {
631 // Test 2 complete sources, we should choose the first complete source
632 std::vector<std::string> source_urls;
633 source_urls.push_back(std::string("http://source1.com"));
634 source_urls.push_back(std::string("http://source2.com"));
635 source_urls.push_back(std::string("http://source3.com"));
636 std::vector<std::string> publishers;
637 publishers.push_back(std::string("Source 1"));
638 publishers.push_back(std::string(""));
639 publishers.push_back(std::string("Source 3"));
640 std::vector<std::string> amp_urls;
641 amp_urls.push_back(std::string("http://source1.amp.com"));
642 amp_urls.push_back(std::string("http://source2.amp.com"));
643 amp_urls.push_back(std::string("http://source3.amp.com"));
644 std::string json_str(
645 GetTestJsonWithSources(source_urls, publishers, amp_urls));
646
647 LoadFromJSONString(json_str);
648 EXPECT_EQ(service()->size(), 1u);
649
650 for (auto& snippet : *service()) {
651 EXPECT_EQ(snippet.get_sources().size(), 3u);
652 EXPECT_EQ(snippet.url(), GURL("http://source1.com"));
653 EXPECT_EQ(snippet.site_title(), std::string("Source 1"));
654 EXPECT_EQ(snippet.amp_url(), GURL("http://source1.amp.com"));
655 }
656
657 // Test 2 complete sources, we should choose the first complete source
658 service()->ClearSnippets();
659 source_urls.clear();
660 source_urls.push_back(std::string("http://source1.com"));
661 source_urls.push_back(std::string("http://source2.com"));
662 source_urls.push_back(std::string("http://source3.com"));
663 publishers.clear();
664 publishers.push_back(std::string(""));
665 publishers.push_back(std::string("Source 2"));
666 publishers.push_back(std::string("Source 3"));
667 amp_urls.clear();
668 amp_urls.push_back(std::string("http://source1.amp.com"));
669 amp_urls.push_back(std::string("http://source2.amp.com"));
670 amp_urls.push_back(std::string("http://source3.amp.com"));
671 json_str = GetTestJsonWithSources(source_urls, publishers, amp_urls);
672
673 LoadFromJSONString(json_str);
674 EXPECT_EQ(service()->size(), 1u);
675
676 for (auto& snippet : *service()) {
677 EXPECT_EQ(snippet.get_sources().size(), 3u);
678 EXPECT_EQ(snippet.url(), GURL("http://source2.com"));
679 EXPECT_EQ(snippet.site_title(), std::string("Source 2"));
680 EXPECT_EQ(snippet.amp_url(), GURL("http://source2.amp.com"));
681 }
682
683 // Test 3 complete sources, we should choose the first complete source
684 service()->ClearSnippets();
685 source_urls.clear();
686 source_urls.push_back(std::string("http://source1.com"));
687 source_urls.push_back(std::string("http://source2.com"));
688 source_urls.push_back(std::string("http://source3.com"));
689 publishers.clear();
690 publishers.push_back(std::string("Source 1"));
691 publishers.push_back(std::string("Source 2"));
692 publishers.push_back(std::string("Source 3"));
693 amp_urls.clear();
694 amp_urls.push_back(std::string(""));
695 amp_urls.push_back(std::string("http://source2.amp.com"));
696 amp_urls.push_back(std::string("http://source3.amp.com"));
697 json_str = GetTestJsonWithSources(source_urls, publishers, amp_urls);
698
699 LoadFromJSONString(json_str);
700 EXPECT_EQ(service()->size(), 1u);
701
702 for (auto& snippet : *service()) {
703 EXPECT_EQ(snippet.get_sources().size(), 3u);
704 EXPECT_EQ(snippet.url(), GURL("http://source2.com"));
705 EXPECT_EQ(snippet.site_title(), std::string("Source 2"));
706 EXPECT_EQ(snippet.amp_url(), GURL("http://source2.amp.com"));
707 }
708 }
389 } // namespace ntp_snippets 709 } // namespace ntp_snippets
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698