Chromium Code Reviews| Index: components/ntp_snippets/remote/remote_suggestion_unittest.cc |
| diff --git a/components/ntp_snippets/remote/remote_suggestion_unittest.cc b/components/ntp_snippets/remote/remote_suggestion_unittest.cc |
| index 7034ebf58b8ac3112ff1009a4cbd595fcd952cfb..4dff60275c1406f29c70be496126d14c7f3eed4e 100644 |
| --- a/components/ntp_snippets/remote/remote_suggestion_unittest.cc |
| +++ b/components/ntp_snippets/remote/remote_suggestion_unittest.cc |
| @@ -9,6 +9,7 @@ |
| #include "base/json/json_reader.h" |
| #include "base/strings/stringprintf.h" |
| #include "base/strings/utf_string_conversions.h" |
| +#include "base/time/time.h" |
| #include "base/values.h" |
| #include "components/ntp_snippets/remote/proto/ntp_snippets.pb.h" |
| #include "testing/gmock/include/gmock/gmock.h" |
| @@ -23,14 +24,15 @@ using ::testing::IsNull; |
| using ::testing::NotNull; |
| std::unique_ptr<RemoteSuggestion> SnippetFromContentSuggestionJSON( |
| - const std::string& json) { |
| + const std::string& json, |
| + const base::Time fetch_date) { |
|
Marc Treib
2017/02/13 15:20:31
nit: &
markusheintz_
2017/02/13 15:55:01
Done.
|
| auto json_value = base::JSONReader::Read(json); |
| base::DictionaryValue* json_dict; |
| if (!json_value->GetAsDictionary(&json_dict)) { |
| return nullptr; |
| } |
| return RemoteSuggestion::CreateFromContentSuggestionsDictionary( |
| - *json_dict, kArticlesRemoteId); |
| + *json_dict, kArticlesRemoteId, fetch_date); |
| } |
| TEST(RemoteSuggestionTest, FromChromeContentSuggestionsDictionary) { |
| @@ -52,7 +54,8 @@ TEST(RemoteSuggestionTest, FromChromeContentSuggestionsDictionary) { |
| " \"deadline\": \"2016-06-30T13:01:37.000Z\"\n" |
| " }\n" |
| "}"; |
| - auto snippet = SnippetFromContentSuggestionJSON(kJsonStr); |
| + const base::Time fetch_date = base::Time::Now(); |
|
Marc Treib
2017/02/13 15:20:31
This feels wrong... Can we use a hardcoded fixed d
markusheintz_
2017/02/13 15:55:01
Done.
|
| + auto snippet = SnippetFromContentSuggestionJSON(kJsonStr, fetch_date); |
| ASSERT_THAT(snippet, NotNull()); |
| EXPECT_EQ(snippet->id(), "http://localhost/foobar"); |
| @@ -73,14 +76,16 @@ TEST(RemoteSuggestionTest, FromChromeContentSuggestionsDictionary) { |
| auto notification_duration = |
| snippet->notification_deadline() - snippet->publish_date(); |
| EXPECT_EQ(7200.0f, notification_duration.InSecondsF()); |
| + EXPECT_EQ(fetch_date, snippet->fetch_date()); |
| } |
| std::unique_ptr<RemoteSuggestion> SnippetFromChromeReaderDict( |
| - std::unique_ptr<base::DictionaryValue> dict) { |
| + std::unique_ptr<base::DictionaryValue> dict, |
| + const base::Time& fetch_date) { |
| if (!dict) { |
| return nullptr; |
| } |
| - return RemoteSuggestion::CreateFromChromeReaderDictionary(*dict); |
| + return RemoteSuggestion::CreateFromChromeReaderDictionary(*dict, fetch_date); |
| } |
| const char kChromeReaderCreationTimestamp[] = "1234567890"; |
| @@ -124,8 +129,8 @@ std::unique_ptr<base::DictionaryValue> ChromeReaderSnippetWithTwoSources() { |
| } |
| TEST(RemoteSuggestionTest, TestMultipleSources) { |
| - auto snippet = |
| - SnippetFromChromeReaderDict(ChromeReaderSnippetWithTwoSources()); |
| + auto snippet = SnippetFromChromeReaderDict( |
| + ChromeReaderSnippetWithTwoSources(), base::Time::Now()); |
|
Marc Treib
2017/02/13 15:20:32
Also here and everywhere below: I'd prefer to avoi
markusheintz_
2017/02/13 15:55:01
Done.
|
| ASSERT_THAT(snippet, NotNull()); |
| // Expect the first source to be chosen. |
| @@ -147,7 +152,8 @@ TEST(RemoteSuggestionTest, TestMultipleIncompleteSources1) { |
| ASSERT_TRUE(sources->GetDictionary(1, &source)); |
| source->Remove("ampUrl", nullptr); |
| - auto snippet = SnippetFromChromeReaderDict(std::move(dict)); |
| + auto snippet = |
| + SnippetFromChromeReaderDict(std::move(dict), base::Time::Now()); |
| ASSERT_THAT(snippet, NotNull()); |
| EXPECT_EQ(snippet->id(), "http://url.com"); |
| @@ -168,7 +174,8 @@ TEST(RemoteSuggestionTest, TestMultipleIncompleteSources2) { |
| ASSERT_TRUE(sources->GetDictionary(1, &source)); |
| source->Remove("publisherData.sourceName", nullptr); |
| - auto snippet = SnippetFromChromeReaderDict(std::move(dict)); |
| + auto snippet = |
| + SnippetFromChromeReaderDict(std::move(dict), base::Time::Now()); |
| ASSERT_THAT(snippet, NotNull()); |
| EXPECT_EQ(snippet->id(), "http://url.com"); |
| @@ -191,7 +198,8 @@ TEST(RemoteSuggestionTest, TestMultipleIncompleteSources3) { |
| ASSERT_TRUE(sources->GetDictionary(1, &source)); |
| source->Remove("publisherData.sourceName", nullptr); |
| - auto snippet = SnippetFromChromeReaderDict(std::move(dict)); |
| + auto snippet = |
| + SnippetFromChromeReaderDict(std::move(dict), base::Time::Now()); |
| ASSERT_THAT(snippet, NotNull()); |
| ASSERT_FALSE(snippet->is_complete()); |
| } |
| @@ -199,7 +207,8 @@ TEST(RemoteSuggestionTest, TestMultipleIncompleteSources3) { |
| TEST(RemoteSuggestionTest, ShouldFillInCreation) { |
| auto dict = ChromeReaderSnippetWithTwoSources(); |
| ASSERT_TRUE(dict->Remove("contentInfo.creationTimestampSec", nullptr)); |
| - auto snippet = SnippetFromChromeReaderDict(std::move(dict)); |
| + auto snippet = |
| + SnippetFromChromeReaderDict(std::move(dict), base::Time::Now()); |
| ASSERT_THAT(snippet, NotNull()); |
| // Publish date should have been filled with "now" - just make sure it's not |
| @@ -218,7 +227,8 @@ TEST(RemoteSuggestionTest, ShouldFillInCreation) { |
| TEST(RemoteSuggestionTest, ShouldFillInExpiry) { |
| auto dict = ChromeReaderSnippetWithTwoSources(); |
| ASSERT_TRUE(dict->Remove("contentInfo.expiryTimestampSec", nullptr)); |
| - auto snippet = SnippetFromChromeReaderDict(std::move(dict)); |
| + auto snippet = |
| + SnippetFromChromeReaderDict(std::move(dict), base::Time::Now()); |
| ASSERT_THAT(snippet, NotNull()); |
| base::Time publish_date = snippet->publish_date(); |
| @@ -235,7 +245,8 @@ TEST(RemoteSuggestionTest, ShouldFillInCreationAndExpiry) { |
| auto dict = ChromeReaderSnippetWithTwoSources(); |
| ASSERT_TRUE(dict->Remove("contentInfo.creationTimestampSec", nullptr)); |
| ASSERT_TRUE(dict->Remove("contentInfo.expiryTimestampSec", nullptr)); |
| - auto snippet = SnippetFromChromeReaderDict(std::move(dict)); |
| + auto snippet = |
| + SnippetFromChromeReaderDict(std::move(dict), base::Time::Now()); |
| ASSERT_THAT(snippet, NotNull()); |
| // Publish date should have been filled with "now" - just make sure it's not |
| @@ -255,7 +266,8 @@ TEST(RemoteSuggestionTest, ShouldFillInCreationAndExpiry) { |
| TEST(RemoteSuggestionTest, ShouldNotOverwriteExpiry) { |
| auto dict = ChromeReaderSnippetWithTwoSources(); |
| ASSERT_TRUE(dict->Remove("contentInfo.creationTimestampSec", nullptr)); |
| - auto snippet = SnippetFromChromeReaderDict(std::move(dict)); |
| + auto snippet = |
| + SnippetFromChromeReaderDict(std::move(dict), base::Time::Now()); |
| ASSERT_THAT(snippet, NotNull()); |
| // Expiry date should have kept the test default value. |
| @@ -317,7 +329,8 @@ TEST(RemoteSuggestionTest, TestMultipleCompleteSources1) { |
| ASSERT_TRUE(sources->GetDictionary(1, &source)); |
| source->Remove("publisherData.sourceName", nullptr); |
| - auto snippet = SnippetFromChromeReaderDict(std::move(dict)); |
| + auto snippet = |
| + SnippetFromChromeReaderDict(std::move(dict), base::Time::Now()); |
| ASSERT_THAT(snippet, NotNull()); |
| EXPECT_EQ(snippet->id(), "http://url.com"); |
| @@ -338,7 +351,8 @@ TEST(RemoteSuggestionTest, TestMultipleCompleteSources2) { |
| ASSERT_TRUE(sources->GetDictionary(0, &source)); |
| source->Remove("publisherData.sourceName", nullptr); |
| - auto snippet = SnippetFromChromeReaderDict(std::move(dict)); |
| + auto snippet = |
| + SnippetFromChromeReaderDict(std::move(dict), base::Time::Now()); |
| ASSERT_THAT(snippet, NotNull()); |
| EXPECT_EQ(snippet->id(), "http://url.com"); |
| @@ -350,7 +364,8 @@ TEST(RemoteSuggestionTest, TestMultipleCompleteSources2) { |
| TEST(RemoteSuggestionTest, TestMultipleCompleteSources3) { |
| // Test 3 complete sources, we should choose the first complete source |
| auto dict = ChromeReaderSnippetWithThreeSources(); |
| - auto snippet = SnippetFromChromeReaderDict(std::move(dict)); |
| + auto snippet = |
| + SnippetFromChromeReaderDict(std::move(dict), base::Time::Now()); |
| ASSERT_THAT(snippet, NotNull()); |
| EXPECT_EQ(snippet->id(), "http://url.com"); |
| @@ -374,7 +389,7 @@ TEST(RemoteSuggestionTest, |
| " \"ampUrl\" : \"http://localhost/amp\"," |
| " \"faviconUrl\" : \"http://localhost/favicon.ico\" " |
| "}"; |
| - auto snippet = SnippetFromContentSuggestionJSON(kJsonStr); |
| + auto snippet = SnippetFromContentSuggestionJSON(kJsonStr, base::Time::Now()); |
| ASSERT_THAT(snippet, NotNull()); |
| EXPECT_EQ(snippet->id(), "http://localhost/foobar"); |
| @@ -394,6 +409,7 @@ TEST(RemoteSuggestionTest, CreateFromProtoToProtoRoundtrip) { |
| proto.set_score(0.1f); |
| proto.set_dismissed(false); |
| proto.set_remote_category_id(1); |
| + proto.set_fetch_date(1476364691); |
| auto source = proto.add_sources(); |
| source->set_url("http://cool-suggestions.com/"); |
| source->set_publisher_name("Great Suggestions Inc."); |
| @@ -415,6 +431,32 @@ TEST(RemoteSuggestionTest, CreateFromProtoToProtoRoundtrip) { |
| EXPECT_EQ(proto_serialized, round_tripped_serialized); |
| } |
| +TEST(RemoteSuggestionTest, CreateFromProtoIgnoreMissingFetchDate) { |
| + SnippetProto proto; |
| + proto.add_ids("foo"); |
| + proto.add_ids("bar"); |
| + proto.set_title("a suggestion title"); |
| + proto.set_snippet("the snippet describing the suggestion."); |
| + proto.set_salient_image_url("http://google.com/logo/"); |
| + proto.set_publish_date(1476095492); |
| + proto.set_expiry_date(1476354691); |
| + proto.set_score(0.1f); |
| + proto.set_dismissed(false); |
| + proto.set_remote_category_id(1); |
| + auto source = proto.add_sources(); |
| + source->set_url("http://cool-suggestions.com/"); |
| + source->set_publisher_name("Great Suggestions Inc."); |
| + source->set_amp_url("http://cdn.ampproject.org/c/foo/"); |
| + |
| + std::unique_ptr<RemoteSuggestion> snippet = |
| + RemoteSuggestion::CreateFromProto(proto); |
| + ASSERT_THAT(snippet, NotNull()); |
| + // The snippet database relies on the fact that the first id in the protocol |
| + // buffer is considered the unique id. |
| + EXPECT_EQ(snippet->id(), "foo"); |
| + EXPECT_EQ(snippet->fetch_date(), base::Time()); |
| +} |
| + |
| // New form, from chromecontentsuggestions-pa.googleapis.com. |
| std::unique_ptr<base::DictionaryValue> ContentSuggestionSnippet() { |
| const std::string kJsonStr = |
| @@ -441,8 +483,8 @@ TEST(RemoteSuggestionTest, NotifcationInfoAllSpecified) { |
| auto json = ContentSuggestionSnippet(); |
| json->SetBoolean("notificationInfo.shouldNotify", true); |
| json->SetString("notificationInfo.deadline", "2016-06-30T13:01:37.000Z"); |
| - auto snippet = |
| - RemoteSuggestion::CreateFromContentSuggestionsDictionary(*json, 0); |
| + auto snippet = RemoteSuggestion::CreateFromContentSuggestionsDictionary( |
| + *json, 0, base::Time::Now()); |
| EXPECT_TRUE(snippet->should_notify()); |
| EXPECT_EQ(7200.0f, |
| (snippet->notification_deadline() - snippet->publish_date()) |
| @@ -453,8 +495,8 @@ TEST(RemoteSuggestionTest, NotificationInfoDeadlineInvalid) { |
| auto json = ContentSuggestionSnippet(); |
| json->SetBoolean("notificationInfo.shouldNotify", true); |
| json->SetInteger("notificationInfo.notificationDeadline", 0); |
| - auto snippet = |
| - RemoteSuggestion::CreateFromContentSuggestionsDictionary(*json, 0); |
| + auto snippet = RemoteSuggestion::CreateFromContentSuggestionsDictionary( |
| + *json, 0, base::Time::Now()); |
| EXPECT_TRUE(snippet->should_notify()); |
| EXPECT_EQ(base::Time::Max(), snippet->notification_deadline()); |
| } |
| @@ -462,8 +504,8 @@ TEST(RemoteSuggestionTest, NotificationInfoDeadlineInvalid) { |
| TEST(RemoteSuggestionTest, NotificationInfoDeadlineAbsent) { |
| auto json = ContentSuggestionSnippet(); |
| json->SetBoolean("notificationInfo.shouldNotify", true); |
| - auto snippet = |
| - RemoteSuggestion::CreateFromContentSuggestionsDictionary(*json, 0); |
| + auto snippet = RemoteSuggestion::CreateFromContentSuggestionsDictionary( |
| + *json, 0, base::Time::Now()); |
| EXPECT_TRUE(snippet->should_notify()); |
| EXPECT_EQ(base::Time::Max(), snippet->notification_deadline()); |
| } |
| @@ -471,22 +513,23 @@ TEST(RemoteSuggestionTest, NotificationInfoDeadlineAbsent) { |
| TEST(RemoteSuggestionTest, NotificationInfoShouldNotifyInvalid) { |
| auto json = ContentSuggestionSnippet(); |
| json->SetString("notificationInfo.shouldNotify", "non-bool"); |
| - auto snippet = |
| - RemoteSuggestion::CreateFromContentSuggestionsDictionary(*json, 0); |
| + auto snippet = RemoteSuggestion::CreateFromContentSuggestionsDictionary( |
| + *json, 0, base::Time::Now()); |
| EXPECT_FALSE(snippet->should_notify()); |
| } |
| TEST(RemoteSuggestionTest, NotificationInfoAbsent) { |
| auto json = ContentSuggestionSnippet(); |
| - auto snippet = |
| - RemoteSuggestion::CreateFromContentSuggestionsDictionary(*json, 0); |
| + auto snippet = RemoteSuggestion::CreateFromContentSuggestionsDictionary( |
| + *json, 0, base::Time::Now()); |
| EXPECT_FALSE(snippet->should_notify()); |
| } |
| TEST(RemoteSuggestionTest, ToContentSuggestion) { |
| auto json = ContentSuggestionSnippet(); |
| - auto snippet = |
| - RemoteSuggestion::CreateFromContentSuggestionsDictionary(*json, 0); |
| + const base::Time fetch_date = base::Time::Now(); |
| + auto snippet = RemoteSuggestion::CreateFromContentSuggestionsDictionary( |
| + *json, 0, fetch_date); |
| ASSERT_THAT(snippet, NotNull()); |
| ContentSuggestion sugg = snippet->ToContentSuggestion( |
| Category::FromKnownCategory(KnownCategories::ARTICLES)); |
| @@ -503,14 +546,15 @@ TEST(RemoteSuggestionTest, ToContentSuggestion) { |
| EXPECT_THAT(sugg.download_suggestion_extra(), IsNull()); |
| EXPECT_THAT(sugg.recent_tab_suggestion_extra(), IsNull()); |
| EXPECT_THAT(sugg.notification_extra(), IsNull()); |
| + EXPECT_THAT(sugg.fetch_date(), Eq(fetch_date)); |
| } |
| TEST(RemoteSuggestionTest, ToContentSuggestionWithNotificationInfo) { |
| auto json = ContentSuggestionSnippet(); |
| json->SetBoolean("notificationInfo.shouldNotify", true); |
| json->SetString("notificationInfo.deadline", "2016-06-30T13:01:37.000Z"); |
| - auto snippet = |
| - RemoteSuggestion::CreateFromContentSuggestionsDictionary(*json, 0); |
| + auto snippet = RemoteSuggestion::CreateFromContentSuggestionsDictionary( |
| + *json, 0, base::Time::Now()); |
| ASSERT_THAT(snippet, NotNull()); |
| ContentSuggestion sugg = snippet->ToContentSuggestion( |
| Category::FromKnownCategory(KnownCategories::ARTICLES)); |