OLD | NEW |
1 // Copyright 2015 The Chromium Authors. All rights reserved. | 1 // Copyright 2015 The Chromium Authors. All rights reserved. |
2 // Use of this source code is governed by a BSD-style license that can be | 2 // Use of this source code is governed by a BSD-style license that can be |
3 // found in the LICENSE file. | 3 // found in the LICENSE file. |
4 | 4 |
5 #include "components/ntp_snippets/ntp_snippets_service.h" | 5 #include "components/ntp_snippets/ntp_snippets_service.h" |
6 | 6 |
7 #include <memory> | 7 #include <memory> |
8 #include <utility> | 8 #include <utility> |
9 #include <vector> | 9 #include <vector> |
10 | 10 |
(...skipping 464 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
475 base::ScopedTempDir database_dir_; | 475 base::ScopedTempDir database_dir_; |
476 | 476 |
477 DISALLOW_COPY_AND_ASSIGN(NTPSnippetsServiceTest); | 477 DISALLOW_COPY_AND_ASSIGN(NTPSnippetsServiceTest); |
478 }; | 478 }; |
479 | 479 |
480 TEST_F(NTPSnippetsServiceTest, ScheduleOnStart) { | 480 TEST_F(NTPSnippetsServiceTest, ScheduleOnStart) { |
481 // We should get two |Schedule| calls: The first when initialization | 481 // We should get two |Schedule| calls: The first when initialization |
482 // completes, the second one after the automatic (since the service doesn't | 482 // completes, the second one after the automatic (since the service doesn't |
483 // have any data yet) fetch finishes. | 483 // have any data yet) fetch finishes. |
484 EXPECT_CALL(mock_scheduler(), Schedule(_, _)).Times(2); | 484 EXPECT_CALL(mock_scheduler(), Schedule(_, _)).Times(2); |
| 485 EXPECT_CALL(mock_scheduler(), Unschedule()).Times(0); |
485 auto service = MakeSnippetsService(); | 486 auto service = MakeSnippetsService(); |
486 | 487 |
487 // When we have no snippets are all, loading the service initiates a fetch. | 488 // When we have no snippets are all, loading the service initiates a fetch. |
488 base::RunLoop().RunUntilIdle(); | 489 base::RunLoop().RunUntilIdle(); |
489 EXPECT_EQ("OK", service->snippets_fetcher()->last_status()); | 490 EXPECT_EQ("OK", service->snippets_fetcher()->last_status()); |
490 } | 491 } |
491 | 492 |
| 493 TEST_F(NTPSnippetsServiceTest, DontRescheduleOnStart) { |
| 494 EXPECT_CALL(mock_scheduler(), Schedule(_, _)).Times(2); |
| 495 EXPECT_CALL(mock_scheduler(), Unschedule()).Times(0); |
| 496 auto service = MakeSnippetsService(); |
| 497 base::RunLoop().RunUntilIdle(); |
| 498 |
| 499 // When recreating the service, we should not get a single |Schedule| call: |
| 500 // The tasks are already scheduled with the correct intervals, so nothing on |
| 501 // initialization, but the service still has no data, so one |Schedule| |
| 502 // happens after the automatic fetch. |
| 503 Mock::VerifyAndClearExpectations(&mock_scheduler()); |
| 504 EXPECT_CALL(mock_scheduler(), Schedule(_, _)).Times(1); |
| 505 EXPECT_CALL(mock_scheduler(), Unschedule()).Times(0); |
| 506 ResetSnippetsService(&service); |
| 507 base::RunLoop().RunUntilIdle(); |
| 508 } |
| 509 |
492 TEST_F(NTPSnippetsServiceTest, RescheduleAfterSuccessfulFetch) { | 510 TEST_F(NTPSnippetsServiceTest, RescheduleAfterSuccessfulFetch) { |
493 // We should get two |Schedule| calls: The first when initialization | 511 // We should get two |Schedule| calls: The first when initialization |
494 // completes, the second one after the automatic (since the service doesn't | 512 // completes, the second one after the automatic (since the service doesn't |
495 // have any data yet) fetch finishes. | 513 // have any data yet) fetch finishes. |
496 EXPECT_CALL(mock_scheduler(), Schedule(_, _)).Times(2); | 514 EXPECT_CALL(mock_scheduler(), Schedule(_, _)).Times(2); |
497 auto service = MakeSnippetsService(); | 515 auto service = MakeSnippetsService(); |
498 base::RunLoop().RunUntilIdle(); | 516 base::RunLoop().RunUntilIdle(); |
499 | 517 |
500 // A successful fetch should trigger another |Schedule|. | 518 // A successful fetch should trigger another |Schedule|. |
501 EXPECT_CALL(mock_scheduler(), Schedule(_, _)); | 519 EXPECT_CALL(mock_scheduler(), Schedule(_, _)); |
502 LoadFromJSONString(service.get(), GetTestJson({GetSnippet()})); | 520 LoadFromJSONString(service.get(), GetTestJson({GetSnippet()})); |
503 } | 521 } |
504 | 522 |
505 TEST_F(NTPSnippetsServiceTest, DontRescheduleAfterFailedFetch) { | 523 TEST_F(NTPSnippetsServiceTest, DontRescheduleAfterFailedFetch) { |
506 // We should get two |Schedule| calls: The first when initialization | 524 // We should get two |Schedule| calls: The first when initialization |
507 // completes, the second one after the automatic (since the service doesn't | 525 // completes, the second one after the automatic (since the service doesn't |
508 // have any data yet) fetch finishes. | 526 // have any data yet) fetch finishes. |
509 EXPECT_CALL(mock_scheduler(), Schedule(_, _)).Times(2); | 527 EXPECT_CALL(mock_scheduler(), Schedule(_, _)).Times(2); |
510 auto service = MakeSnippetsService(); | 528 auto service = MakeSnippetsService(); |
511 base::RunLoop().RunUntilIdle(); | 529 base::RunLoop().RunUntilIdle(); |
512 | 530 |
513 // A failed fetch should NOT trigger another |Schedule|. | 531 // A failed fetch should NOT trigger another |Schedule|. |
514 EXPECT_CALL(mock_scheduler(), Schedule(_, _)).Times(0); | 532 EXPECT_CALL(mock_scheduler(), Schedule(_, _)).Times(0); |
515 LoadFromJSONString(service.get(), GetTestJson({GetInvalidSnippet()})); | 533 LoadFromJSONString(service.get(), GetTestJson({GetInvalidSnippet()})); |
516 } | 534 } |
517 | 535 |
518 TEST_F(NTPSnippetsServiceTest, DontRescheduleBeforeInit) { | 536 TEST_F(NTPSnippetsServiceTest, IgnoreRescheduleBeforeInit) { |
519 // We should get two |Schedule| calls: The first when initialization | 537 // We should get two |Schedule| calls: The first when initialization |
520 // completes, the second one after the automatic (since the service doesn't | 538 // completes, the second one after the automatic (since the service doesn't |
521 // have any data yet) fetch finishes. | 539 // have any data yet) fetch finishes. |
522 EXPECT_CALL(mock_scheduler(), Schedule(_, _)).Times(2); | 540 EXPECT_CALL(mock_scheduler(), Schedule(_, _)).Times(2); |
523 // The |RescheduleFetching| call shouldn't do anything (in particular not | 541 // The |RescheduleFetching| call shouldn't do anything (in particular not |
524 // result in an |Unschedule|), since the service isn't initialized yet. | 542 // result in an |Unschedule|), since the service isn't initialized yet. |
525 EXPECT_CALL(mock_scheduler(), Unschedule()).Times(0); | 543 EXPECT_CALL(mock_scheduler(), Unschedule()).Times(0); |
526 auto service = MakeSnippetsServiceWithoutInitialization(); | 544 auto service = MakeSnippetsServiceWithoutInitialization(); |
527 service->RescheduleFetching(); | 545 service->RescheduleFetching(false); |
528 WaitForSnippetsServiceInitialization(); | 546 WaitForSnippetsServiceInitialization(); |
| 547 } |
529 | 548 |
530 // Now that initialization has finished, |RescheduleFetching| should work. | 549 TEST_F(NTPSnippetsServiceTest, HandleForcedRescheduleBeforeInit) { |
531 EXPECT_CALL(mock_scheduler(), Schedule(_, _)); | 550 { |
532 service->RescheduleFetching(); | 551 InSequence s; |
| 552 // The |RescheduleFetching| call with force=true should result in an |
| 553 // |Unschedule|, since the service isn't initialized yet. |
| 554 EXPECT_CALL(mock_scheduler(), Unschedule()).Times(1); |
| 555 // We should get two |Schedule| calls: The first when initialization |
| 556 // completes, the second one after the automatic (since the service doesn't |
| 557 // have any data yet) fetch finishes. |
| 558 EXPECT_CALL(mock_scheduler(), Schedule(_, _)).Times(2); |
| 559 } |
| 560 auto service = MakeSnippetsServiceWithoutInitialization(); |
| 561 service->RescheduleFetching(true); |
| 562 WaitForSnippetsServiceInitialization(); |
533 } | 563 } |
534 | 564 |
535 TEST_F(NTPSnippetsServiceTest, RescheduleOnStateChange) { | 565 TEST_F(NTPSnippetsServiceTest, RescheduleOnStateChange) { |
536 { | 566 { |
537 InSequence s; | 567 InSequence s; |
538 // Initial startup. | 568 // Initial startup. |
539 EXPECT_CALL(mock_scheduler(), Schedule(_, _)).Times(2); | 569 EXPECT_CALL(mock_scheduler(), Schedule(_, _)).Times(2); |
540 // Service gets disabled. | 570 // Service gets disabled. |
541 EXPECT_CALL(mock_scheduler(), Unschedule()); | 571 EXPECT_CALL(mock_scheduler(), Unschedule()); |
542 // Service gets enabled again. | 572 // Service gets enabled again. |
543 EXPECT_CALL(mock_scheduler(), Schedule(_, _)).Times(2); | 573 EXPECT_CALL(mock_scheduler(), Schedule(_, _)).Times(2); |
544 } | 574 } |
545 auto service = MakeSnippetsService(); | 575 auto service = MakeSnippetsService(); |
546 ASSERT_TRUE(service->ready()); | 576 ASSERT_TRUE(service->ready()); |
547 base::RunLoop().RunUntilIdle(); | 577 base::RunLoop().RunUntilIdle(); |
548 | 578 |
549 service->OnDisabledReasonChanged(DisabledReason::EXPLICITLY_DISABLED); | 579 service->OnDisabledReasonChanged(DisabledReason::EXPLICITLY_DISABLED); |
550 ASSERT_FALSE(service->ready()); | 580 ASSERT_FALSE(service->ready()); |
551 base::RunLoop().RunUntilIdle(); | 581 base::RunLoop().RunUntilIdle(); |
552 | 582 |
553 service->OnDisabledReasonChanged(DisabledReason::NONE); | 583 service->OnDisabledReasonChanged(DisabledReason::NONE); |
554 ASSERT_TRUE(service->ready()); | 584 ASSERT_TRUE(service->ready()); |
555 base::RunLoop().RunUntilIdle(); | 585 base::RunLoop().RunUntilIdle(); |
556 } | 586 } |
557 | 587 |
| 588 TEST_F(NTPSnippetsServiceTest, DontUnscheduleOnShutdown) { |
| 589 EXPECT_CALL(mock_scheduler(), Schedule(_, _)).Times(2); |
| 590 EXPECT_CALL(mock_scheduler(), Unschedule()).Times(0); |
| 591 |
| 592 auto service = MakeSnippetsService(); |
| 593 base::RunLoop().RunUntilIdle(); |
| 594 |
| 595 service.reset(); |
| 596 base::RunLoop().RunUntilIdle(); |
| 597 } |
| 598 |
558 TEST_F(NTPSnippetsServiceTest, Full) { | 599 TEST_F(NTPSnippetsServiceTest, Full) { |
559 std::string json_str(GetTestJson({GetSnippet()})); | 600 std::string json_str(GetTestJson({GetSnippet()})); |
560 | 601 |
561 auto service = MakeSnippetsService(); | 602 auto service = MakeSnippetsService(); |
562 | 603 |
563 LoadFromJSONString(service.get(), json_str); | 604 LoadFromJSONString(service.get(), json_str); |
564 | 605 |
565 ASSERT_THAT(observer().SuggestionsForCategory(articles_category()), | 606 ASSERT_THAT(observer().SuggestionsForCategory(articles_category()), |
566 SizeIs(1)); | 607 SizeIs(1)); |
567 ASSERT_THAT(service->GetSnippetsForTesting(articles_category()), SizeIs(1)); | 608 ASSERT_THAT(service->GetSnippetsForTesting(articles_category()), SizeIs(1)); |
(...skipping 469 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
1037 end = base::Time::FromTimeT(456); | 1078 end = base::Time::FromTimeT(456); |
1038 base::Callback<bool(const GURL& url)> filter; | 1079 base::Callback<bool(const GURL& url)> filter; |
1039 service->ClearHistory(begin, end, filter); | 1080 service->ClearHistory(begin, end, filter); |
1040 | 1081 |
1041 EXPECT_THAT(service->GetSnippetsForTesting(articles_category()), IsEmpty()); | 1082 EXPECT_THAT(service->GetSnippetsForTesting(articles_category()), IsEmpty()); |
1042 EXPECT_THAT(service->GetDismissedSnippetsForTesting(articles_category()), | 1083 EXPECT_THAT(service->GetDismissedSnippetsForTesting(articles_category()), |
1043 IsEmpty()); | 1084 IsEmpty()); |
1044 } | 1085 } |
1045 | 1086 |
1046 } // namespace ntp_snippets | 1087 } // namespace ntp_snippets |
OLD | NEW |