blob: ca36b2ee9292aa541aeb9dc676e71dad446598a7 [file] [log] [blame]
// Copyright 2018 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 "components/ntp_snippets/contextual/contextual_content_suggestions_service_proxy.h"
#include <memory>
#include <string>
#include <utility>
#include "base/bind.h"
#include "components/ntp_snippets/contextual/contextual_content_suggestions_service.h"
#include "components/ntp_snippets/contextual/contextual_suggestions_test_utils.h"
#include "components/ntp_snippets/contextual/reporting/contextual_suggestions_metrics_reporter.h"
#include "components/ntp_snippets/remote/remote_suggestions_database.h"
#include "testing/gmock/include/gmock/gmock.h"
#include "testing/gtest/include/gtest/gtest.h"
using testing::IsEmpty;
using testing::Pointee;
namespace contextual_suggestions {
namespace {
static constexpr char kTestPeekText[] = "Test peek test";
static constexpr char kValidFromUrl[] = "http://some.url";
static constexpr char kImageId[] = "id";
// Keep the string after tbn: in sync with the above constant for image id.
static constexpr char kImageUrl[] = "http://www.google.com/images?q=tbn:id";
static constexpr char kFaviconUrl[] = "http://google.com/cats.fav";
class FakeContextualContentSuggestionsService
: public ContextualContentSuggestionsService {
public:
FakeContextualContentSuggestionsService();
~FakeContextualContentSuggestionsService() override;
void FetchContextualSuggestionClusters(
const GURL& url,
FetchClustersCallback callback,
ReportFetchMetricsCallback metrics_callback) override {
clusters_callback_ = std::move(callback);
}
void RunClustersCallback(ContextualSuggestionsResult result) {
std::move(clusters_callback_).Run(std::move(result));
}
private:
FetchClustersCallback clusters_callback_;
};
FakeContextualContentSuggestionsService::
FakeContextualContentSuggestionsService()
: ContextualContentSuggestionsService(nullptr, nullptr) {}
FakeContextualContentSuggestionsService::
~FakeContextualContentSuggestionsService() {}
} // namespace
class ContextualContentSuggestionsServiceProxyTest : public testing::Test {
public:
void SetUp() override;
FakeContextualContentSuggestionsService* service() { return service_.get(); }
ContextualContentSuggestionsServiceProxy* proxy() { return proxy_.get(); }
private:
std::unique_ptr<FakeContextualContentSuggestionsService> service_;
std::unique_ptr<ContextualContentSuggestionsServiceProxy> proxy_;
};
void ContextualContentSuggestionsServiceProxyTest::SetUp() {
service_ = std::make_unique<FakeContextualContentSuggestionsService>();
auto metrics_reporter =
std::make_unique<ContextualSuggestionsMetricsReporter>();
proxy_ = std::make_unique<ContextualContentSuggestionsServiceProxy>(
service_.get(), std::move(metrics_reporter));
}
TEST_F(ContextualContentSuggestionsServiceProxyTest,
FetchSuggestionsWhenEmpty) {
MockClustersCallback mock_cluster_callback;
proxy()->FetchContextualSuggestions(GURL(kValidFromUrl),
mock_cluster_callback.ToOnceCallback());
service()->RunClustersCallback(
ContextualSuggestionsResult(kTestPeekText, std::vector<Cluster>(),
PeekConditions(), ServerExperimentInfos()));
EXPECT_TRUE(mock_cluster_callback.has_run);
}
TEST_F(ContextualContentSuggestionsServiceProxyTest, GetImageUrl) {
auto suggestion = SuggestionBuilder(GURL(kValidFromUrl))
.ImageId(kImageId)
.FaviconImageUrl(kFaviconUrl)
.Build();
auto cluster =
ClusterBuilder(kValidFromUrl).AddSuggestion(suggestion).Build();
MockClustersCallback mock_cluster_callback;
proxy()->FetchContextualSuggestions(GURL(kValidFromUrl),
mock_cluster_callback.ToOnceCallback());
service()->RunClustersCallback(ContextualSuggestionsResult(
kTestPeekText, std::vector<Cluster>({cluster}), PeekConditions(),
ServerExperimentInfos()));
EXPECT_EQ(kImageUrl, proxy()->GetContextualSuggestionImageUrl(suggestion.id));
EXPECT_EQ(kFaviconUrl,
proxy()->GetContextualSuggestionFaviconUrl(suggestion.id));
// Id not found.
EXPECT_EQ("", proxy()->GetContextualSuggestionImageUrl(""));
EXPECT_EQ("", proxy()->GetContextualSuggestionFaviconUrl(""));
}
// TODO(fgorski): More tests will be added, once we have the suggestions
// restructured.
} // namespace contextual_suggestions