| Index: components/ntp_snippets/ntp_snippets_fetcher_unittest.cc
|
| diff --git a/components/ntp_snippets/ntp_snippets_fetcher_unittest.cc b/components/ntp_snippets/ntp_snippets_fetcher_unittest.cc
|
| index a0f7893ac6e11f2f6b2eccf3c5a587b2d7a6580e..53f821ab9dfc368fbcf7e0bc61bb678bc2b3b699 100644
|
| --- a/components/ntp_snippets/ntp_snippets_fetcher_unittest.cc
|
| +++ b/components/ntp_snippets/ntp_snippets_fetcher_unittest.cc
|
| @@ -4,6 +4,9 @@
|
|
|
| #include "components/ntp_snippets/ntp_snippets_fetcher.h"
|
|
|
| +#include <map>
|
| +#include <utility>
|
| +
|
| #include "base/json/json_reader.h"
|
| #include "base/memory/ptr_util.h"
|
| #include "base/strings/stringprintf.h"
|
| @@ -123,20 +126,9 @@ void ParseJsonDelayed(
|
| base::TimeDelta::FromMilliseconds(kTestJsonParsingLatencyMs));
|
| }
|
|
|
| -class VariationParams {
|
| - public:
|
| - VariationParams(const std::string& trial_name,
|
| - const std::map<std::string, std::string>& params)
|
| - : field_trial_list_(new metrics::SHA1EntropyProvider("foo")) {
|
| - variations::AssociateVariationParams(trial_name, "Group1", params);
|
| - base::FieldTrialList::CreateFieldTrial(trial_name, "Group1");
|
| - }
|
| -
|
| - ~VariationParams() { variations::testing::ClearAllVariationParams(); }
|
| -
|
| - private:
|
| - base::FieldTrialList field_trial_list_;
|
| -};
|
| +GURL GetFetcherUrl(const char* url_format) {
|
| + return GURL(base::StringPrintf(url_format, google_apis::GetAPIKey().c_str()));
|
| +}
|
|
|
| } // namespace
|
|
|
| @@ -144,13 +136,12 @@ class NTPSnippetsFetcherTest : public testing::Test {
|
| public:
|
| NTPSnippetsFetcherTest()
|
| : NTPSnippetsFetcherTest(
|
| - GURL(base::StringPrintf(kTestChromeReaderUrlFormat,
|
| - google_apis::GetAPIKey().c_str())),
|
| + GetFetcherUrl(kTestChromeReaderUrlFormat),
|
| std::map<std::string, std::string>()) {}
|
|
|
| NTPSnippetsFetcherTest(const GURL& gurl,
|
| const std::map<std::string, std::string>& params)
|
| - : params_(ntp_snippets::kStudyName, params),
|
| + : params_manager_(ntp_snippets::kStudyName, params),
|
| mock_task_runner_(new base::TestMockTimeTaskRunner()),
|
| mock_task_runner_handle_(mock_task_runner_),
|
| signin_client_(new TestSigninClient(nullptr)),
|
| @@ -205,7 +196,7 @@ class NTPSnippetsFetcherTest : public testing::Test {
|
| }
|
|
|
| private:
|
| - VariationParams params_;
|
| + variations::testing::VariationParamsManager params_manager_;
|
| scoped_refptr<base::TestMockTimeTaskRunner> mock_task_runner_;
|
| base::ThreadTaskRunnerHandle mock_task_runner_handle_;
|
| FailingFakeURLFetcherFactory failing_url_fetcher_factory_;
|
| @@ -229,10 +220,16 @@ class NTPSnippetsContentSuggestionsFetcherTest : public NTPSnippetsFetcherTest {
|
| public:
|
| NTPSnippetsContentSuggestionsFetcherTest()
|
| : NTPSnippetsFetcherTest(
|
| - GURL(base::StringPrintf(kTestChromeContentSuggestionsUrlFormat,
|
| - google_apis::GetAPIKey().c_str())),
|
| - std::map<std::string, std::string>{
|
| - {"content_suggestions_backend", kContentSuggestionsBackend}}) {}
|
| + GetFetcherUrl(kTestChromeContentSuggestionsUrlFormat),
|
| + {{"content_suggestions_backend", kContentSuggestionsBackend}}) {}
|
| +};
|
| +
|
| +class NTPSnippetsFetcherHostRestrictedTest : public NTPSnippetsFetcherTest {
|
| + public:
|
| + NTPSnippetsFetcherHostRestrictedTest()
|
| + : NTPSnippetsFetcherTest(
|
| + GetFetcherUrl(kTestChromeReaderUrlFormat),
|
| + {{"fetching_host_restrict", "on"}}) {}
|
| };
|
|
|
| TEST_F(NTPSnippetsFetcherTest, BuildRequestAuthenticated) {
|
| @@ -424,10 +421,56 @@ TEST_F(NTPSnippetsFetcherTest, ShouldFetchSuccessfullyEmptyList) {
|
| ElementsAre(base::Bucket(/*min=*/200, /*count=*/1)));
|
| }
|
|
|
| -// TODO(jkrcal) Return the tests ShouldReportEmptyHostsError and
|
| -// ShouldRestrictToHosts once we have a way to change variation parameters from
|
| -// unittests. The tests were tailored to previous default value of the parameter
|
| -// fetching_host_restrict, which changed now.
|
| +TEST_F(NTPSnippetsFetcherHostRestrictedTest, ShouldReportEmptyHostsError) {
|
| + EXPECT_CALL(mock_callback(), Run(/*snippets=*/Not(HasValue()))).Times(1);
|
| + snippets_fetcher().FetchSnippetsFromHosts(/*hosts=*/std::set<std::string>(),
|
| + /*language_code=*/"en-US",
|
| + /*count=*/1);
|
| + FastForwardUntilNoTasksRemain();
|
| + EXPECT_THAT(snippets_fetcher().last_status(),
|
| + Eq("Cannot fetch for empty hosts list."));
|
| + EXPECT_THAT(snippets_fetcher().last_json(), IsEmpty());
|
| + EXPECT_THAT(
|
| + histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchResult"),
|
| + ElementsAre(base::Bucket(/*min=*/1, /*count=*/1)));
|
| + EXPECT_THAT(histogram_tester().GetAllSamples(
|
| + "NewTabPage.Snippets.FetchHttpResponseOrErrorCode"),
|
| + IsEmpty());
|
| + // This particular error gets triggered prior to JSON parsing and hence tests
|
| + // observe no fetch latency.
|
| + EXPECT_THAT(histogram_tester().GetAllSamples("NewTabPage.Snippets.FetchTime"),
|
| + ElementsAre(base::Bucket(/*min=*/0, /*count=*/1)));
|
| +}
|
| +
|
| +TEST_F(NTPSnippetsFetcherHostRestrictedTest, ShouldRestrictToHosts) {
|
| + net::TestURLFetcherFactory test_url_fetcher_factory;
|
| + snippets_fetcher().FetchSnippetsFromHosts(
|
| + {"www.somehost1.com", "www.somehost2.com"}, test_lang(), /*count=*/17);
|
| + net::TestURLFetcher* fetcher = test_url_fetcher_factory.GetFetcherByID(0);
|
| + ASSERT_THAT(fetcher, NotNull());
|
| + std::unique_ptr<base::Value> value =
|
| + base::JSONReader::Read(fetcher->upload_data());
|
| + ASSERT_TRUE(value) << " failed to parse JSON: "
|
| + << PrintToString(fetcher->upload_data());
|
| + const base::DictionaryValue* dict = nullptr;
|
| + ASSERT_TRUE(value->GetAsDictionary(&dict));
|
| + const base::DictionaryValue* local_scoring_params = nullptr;
|
| + ASSERT_TRUE(dict->GetDictionary("advanced_options.local_scoring_params",
|
| + &local_scoring_params));
|
| + const base::ListValue* content_selectors = nullptr;
|
| + ASSERT_TRUE(
|
| + local_scoring_params->GetList("content_selectors", &content_selectors));
|
| + ASSERT_THAT(content_selectors->GetSize(), Eq(static_cast<size_t>(2)));
|
| + const base::DictionaryValue* content_selector = nullptr;
|
| + ASSERT_TRUE(content_selectors->GetDictionary(0, &content_selector));
|
| + std::string content_selector_value;
|
| + EXPECT_TRUE(content_selector->GetString("value", &content_selector_value));
|
| + EXPECT_THAT(content_selector_value, Eq("www.somehost1.com"));
|
| + ASSERT_TRUE(content_selectors->GetDictionary(1, &content_selector));
|
| + EXPECT_TRUE(content_selector->GetString("value", &content_selector_value));
|
| + EXPECT_THAT(content_selector_value, Eq("www.somehost2.com"));
|
| +}
|
| +
|
| TEST_F(NTPSnippetsFetcherTest, ShouldReportUrlStatusError) {
|
| SetFakeResponse(/*data=*/std::string(), net::HTTP_NOT_FOUND,
|
| net::URLRequestStatus::FAILED);
|
|
|