blob: df1cf7bd8fd33bc14edc83f7dfa0fb9ba496196c [file] [log] [blame]
// Copyright 2015 The Chromium Authors. All rights reserved.
// Use of this source code is governed by a BSD-style license that can be
// found in the LICENSE file.
#include "base/macros.h"
#include "base/time/time.h"
#include "components/ntp_snippets/ntp_snippet.h"
#include "components/ntp_snippets/ntp_snippets_service.h"
#include "testing/gtest/include/gtest/gtest.h"
namespace {
class SnippetObserver : public ntp_snippets::NTPSnippetsServiceObserver {
public:
SnippetObserver() : loaded_(false), shutdown_(false) {}
~SnippetObserver() override {}
void NTPSnippetsServiceLoaded(
ntp_snippets::NTPSnippetsService* service) override {
loaded_ = true;
}
void NTPSnippetsServiceShutdown(
ntp_snippets::NTPSnippetsService* service) override {
shutdown_ = true;
loaded_ = false;
}
bool loaded_;
bool shutdown_;
private:
DISALLOW_COPY_AND_ASSIGN(SnippetObserver);
};
class NTPSnippetsServiceTest : public testing::Test {
public:
NTPSnippetsServiceTest() {}
~NTPSnippetsServiceTest() override {}
private:
DISALLOW_COPY_AND_ASSIGN(NTPSnippetsServiceTest);
};
TEST_F(NTPSnippetsServiceTest, Create) {
std::string language_code("fr");
scoped_ptr<ntp_snippets::NTPSnippetsService> service(
new ntp_snippets::NTPSnippetsService(language_code));
EXPECT_FALSE(service->is_loaded());
}
TEST_F(NTPSnippetsServiceTest, Loop) {
std::string language_code("fr");
scoped_ptr<ntp_snippets::NTPSnippetsService> service(
new ntp_snippets::NTPSnippetsService(language_code));
EXPECT_FALSE(service->is_loaded());
std::string json_str(
"{ \"recos\": [ "
"{ \"contentInfo\": { \"url\" : \"http://localhost/foobar\" }}"
"]}");
EXPECT_TRUE(service->LoadFromJSONString(json_str));
EXPECT_TRUE(service->is_loaded());
// The same for loop without the '&' should not compile.
for (auto& snippet : *service) {
// Snippet here is a const.
EXPECT_EQ(snippet.url(), GURL("http://localhost/foobar"));
}
// Without the const, this should not compile.
for (const ntp_snippets::NTPSnippet& snippet : *service) {
EXPECT_EQ(snippet.url(), GURL("http://localhost/foobar"));
}
}
TEST_F(NTPSnippetsServiceTest, Full) {
std::string language_code("fr");
scoped_ptr<ntp_snippets::NTPSnippetsService> service(
new ntp_snippets::NTPSnippetsService(language_code));
std::string json_str(
"{ \"recos\": [ "
"{ \"contentInfo\": {"
"\"url\" : \"http://localhost/foobar\","
"\"site_title\" : \"Site Title\","
"\"favicon_url\" : \"http://localhost/favicon\","
"\"title\" : \"Title\","
"\"snippet\" : \"Snippet\","
"\"thumbnailUrl\" : \"http://localhost/salient_image\","
"\"creationTimestampSec\" : 1448459205"
"}}"
"]}");
EXPECT_TRUE(service->LoadFromJSONString(json_str));
// The same for loop without the '&' should not compile.
for (auto& snippet : *service) {
// Snippet here is a const.
EXPECT_EQ(snippet.url(), GURL("http://localhost/foobar"));
EXPECT_EQ(snippet.site_title(), "Site Title");
EXPECT_EQ(snippet.favicon_url(), GURL("http://localhost/favicon"));
EXPECT_EQ(snippet.title(), "Title");
EXPECT_EQ(snippet.snippet(), "Snippet");
EXPECT_EQ(snippet.salient_image_url(),
GURL("http://localhost/salient_image"));
base::Time then =
base::Time::FromUTCExploded({2015, 11, 4, 25, 13, 46, 45});
EXPECT_EQ(then, snippet.publish_date());
}
}
TEST_F(NTPSnippetsServiceTest, ObserverNotLoaded) {
std::string language_code("fr");
scoped_ptr<ntp_snippets::NTPSnippetsService> service(
new ntp_snippets::NTPSnippetsService(language_code));
SnippetObserver observer;
service->AddObserver(&observer);
EXPECT_FALSE(observer.loaded_);
std::string json_str(
"{ \"recos\": [ "
"{ \"contentInfo\": { \"url\" : \"http://localhost/foobar\" }}"
"]}");
EXPECT_TRUE(service->LoadFromJSONString(json_str));
EXPECT_TRUE(observer.loaded_);
service->RemoveObserver(&observer);
}
TEST_F(NTPSnippetsServiceTest, ObserverLoaded) {
std::string language_code("fr");
scoped_ptr<ntp_snippets::NTPSnippetsService> service(
new ntp_snippets::NTPSnippetsService(language_code));
std::string json_str(
"{ \"recos\": [ "
"{ \"contentInfo\": { \"url\" : \"http://localhost/foobar\" }}"
"]}");
EXPECT_TRUE(service->LoadFromJSONString(json_str));
SnippetObserver observer;
service->AddObserver(&observer);
EXPECT_TRUE(observer.loaded_);
service->RemoveObserver(&observer);
}
} // namespace