1dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen// Copyright (c) 2011 The Chromium Authors. All rights reserved.
2bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Use of this source code is governed by a BSD-style license that can be
3bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// found in the LICENSE file.
4bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
5bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/json/json_reader.h"
6bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/time.h"
7bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/utf_string_conversions.h"
8bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "base/values.h"
9ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/extensions/apps_promo.h"
10ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/browser/prefs/browser_prefs.h"
11bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/browser/prefs/pref_service.h"
12dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen#include "chrome/browser/web_resource/promo_resource_service.h"
13bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/common/pref_names.h"
14ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/test/testing_browser_process.h"
15ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen#include "chrome/test/testing_pref_service.h"
16bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "chrome/test/testing_profile.h"
17bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen#include "testing/gtest/include/gtest/gtest.h"
18bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
19dc0f95d653279beabeb9817299e2902918ba123eKristian Monsentypedef testing::Test PromoResourceServiceTest;
20bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
21bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// Verifies that custom dates read from a web resource server are written to
22bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen// the preferences file.
23dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(PromoResourceServiceTest, UnpackLogoSignal) {
24dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Set up a testing profile and create a promo resource service.
25bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  TestingProfile profile;
26ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  TestingPrefService local_state;
27ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  TestingBrowserProcess* testing_browser_process =
28ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      static_cast<TestingBrowserProcess*>(g_browser_process);
29ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  testing_browser_process->SetPrefService(&local_state);
30ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  browser::RegisterLocalState(&local_state);
31ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
32dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  scoped_refptr<PromoResourceService> web_resource_service(
33dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      new PromoResourceService(&profile));
34bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
35bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Set up start and end dates in a Dictionary as if parsed from the service.
36bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  std::string json = "{ "
37bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                     "  \"topic\": {"
38bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                     "    \"answers\": ["
39bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                     "       {"
40bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                     "        \"name\": \"custom_logo_start\","
41bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                     "        \"inproduct\": \"31/01/10 01:00 GMT\""
42bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                     "       },"
43bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                     "       {"
44bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                     "        \"name\": \"custom_logo_end\","
45bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                     "        \"inproduct\": \"31/01/12 01:00 GMT\""
46bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                     "       }"
47bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                     "    ]"
48bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                     "  }"
49bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen                     "}";
50bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  scoped_ptr<DictionaryValue> test_json(static_cast<DictionaryValue*>(
51bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      base::JSONReader::Read(json, false)));
52bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
53bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Check that prefs are set correctly.
54bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  web_resource_service->UnpackLogoSignal(*(test_json.get()));
5572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  PrefService* prefs = profile.GetPrefs();
5672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(prefs != NULL);
5772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
58bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  double logo_start =
5972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      prefs->GetDouble(prefs::kNTPCustomLogoStart);
6072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(logo_start, 1264899600);  // unix epoch for Jan 31 2010 0100 GMT.
61bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  double logo_end =
6272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      prefs->GetDouble(prefs::kNTPCustomLogoEnd);
6372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(logo_end, 1327971600);  // unix epoch for Jan 31 2012 0100 GMT.
64bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
65bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Change the start only and recheck.
66bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  json = "{ "
67bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen         "  \"topic\": {"
68bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen         "    \"answers\": ["
69bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen         "       {"
70bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen         "        \"name\": \"custom_logo_start\","
71bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen         "        \"inproduct\": \"28/02/10 14:00 GMT\""
72bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen         "       },"
73bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen         "       {"
74bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen         "        \"name\": \"custom_logo_end\","
75bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen         "        \"inproduct\": \"31/01/12 01:00 GMT\""
76bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen         "       }"
77bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen         "    ]"
78bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen         "  }"
79bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen         "}";
80bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  test_json->Clear();
81bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  test_json.reset(static_cast<DictionaryValue*>(
82bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      base::JSONReader::Read(json, false)));
83bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
84bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Check that prefs are set correctly.
85bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  web_resource_service->UnpackLogoSignal(*(test_json.get()));
8672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
8772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  logo_start = prefs->GetDouble(prefs::kNTPCustomLogoStart);
8872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(logo_start, 1267365600);  // date changes to Feb 28 2010 1400 GMT.
89bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
90bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // If no date is included in the prefs, reset custom logo dates to 0.
91bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  json = "{ "
92bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen         "  \"topic\": {"
93bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen         "    \"answers\": ["
94bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen         "       {"
95bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen         "       }"
96bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen         "    ]"
97bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen         "  }"
98bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen         "}";
99bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  test_json->Clear();
100bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  test_json.reset(static_cast<DictionaryValue*>(
101bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen      base::JSONReader::Read(json, false)));
102bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
103bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  // Check that prefs are set correctly.
104bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen  web_resource_service->UnpackLogoSignal(*(test_json.get()));
10572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  logo_start = prefs->GetDouble(prefs::kNTPCustomLogoStart);
10672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(logo_start, 0);  // date value reset to 0;
10772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  logo_end = prefs->GetDouble(prefs::kNTPCustomLogoEnd);
10872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(logo_end, 0);  // date value reset to 0;
109ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
110ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  testing_browser_process->SetPrefService(NULL);
111bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen}
112bda42a81ee5f9b20d2bebedcf0bbef1e30e5b293Kristian Monsen
113dc0f95d653279beabeb9817299e2902918ba123eKristian MonsenTEST_F(PromoResourceServiceTest, UnpackPromoSignal) {
114dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  // Set up a testing profile and create a promo resource service.
115201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  TestingProfile profile;
116ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  TestingPrefService local_state;
117ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  TestingBrowserProcess* testing_browser_process =
118ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      static_cast<TestingBrowserProcess*>(g_browser_process);
119ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  testing_browser_process->SetPrefService(&local_state);
120ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  browser::RegisterLocalState(&local_state);
121ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
122dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen  scoped_refptr<PromoResourceService> web_resource_service(
123dc0f95d653279beabeb9817299e2902918ba123eKristian Monsen      new PromoResourceService(&profile));
124201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
125201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Set up start and end dates and promo line in a Dictionary as if parsed
126201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // from the service.
127201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  std::string json = "{ "
128201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                     "  \"topic\": {"
129201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                     "    \"answers\": ["
130201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                     "       {"
131201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                     "        \"name\": \"promo_start\","
13272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen                     "        \"question\": \"3:2\","
133201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                     "        \"tooltip\": \"Eat more pie!\","
134201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                     "        \"inproduct\": \"31/01/10 01:00 GMT\""
135201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                     "       },"
136201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                     "       {"
137201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                     "        \"name\": \"promo_end\","
138201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                     "        \"inproduct\": \"31/01/12 01:00 GMT\""
139201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                     "       }"
140201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                     "    ]"
141201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                     "  }"
142201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch                     "}";
143201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  scoped_ptr<DictionaryValue> test_json(static_cast<DictionaryValue*>(
144201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch      base::JSONReader::Read(json, false)));
145201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
146201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Initialize a message loop for this to run on.
147201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  MessageLoop loop;
148201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
149201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  // Check that prefs are set correctly.
150201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  web_resource_service->UnpackPromoSignal(*(test_json.get()));
15172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  PrefService* prefs = profile.GetPrefs();
15272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  ASSERT_TRUE(prefs != NULL);
15372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
15472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  std::string promo_line = prefs->GetString(prefs::kNTPPromoLine);
15572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(promo_line, "Eat more pie!");
15672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
15772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  int promo_group = prefs->GetInteger(prefs::kNTPPromoGroup);
15872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_GE(promo_group, 0);
15972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_LT(promo_group, 16);
16072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
16172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  int promo_build_type = prefs->GetInteger(prefs::kNTPPromoBuild);
162ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(promo_build_type & PromoResourceService::DEV_BUILD,
163ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            PromoResourceService::DEV_BUILD);
164ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(promo_build_type & PromoResourceService::BETA_BUILD,
165ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen            PromoResourceService::BETA_BUILD);
166ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(promo_build_type & PromoResourceService::STABLE_BUILD, 0);
16772a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
16872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  int promo_time_slice = prefs->GetInteger(prefs::kNTPPromoGroupTimeSlice);
16972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(promo_time_slice, 2);
17072a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
171201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  double promo_start =
17272a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      prefs->GetDouble(prefs::kNTPPromoStart);
17372a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  int64 actual_start = 1264899600 +  // unix epoch for Jan 31 2010 0100 GMT.
17472a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      promo_group * 2 * 60 * 60;
17572a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(promo_start, actual_start);
17672a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
177201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch  double promo_end =
17872a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen      prefs->GetDouble(prefs::kNTPPromoEnd);
17972a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen  EXPECT_EQ(promo_end, 1327971600);  // unix epoch for Jan 31 2012 0100 GMT.
180ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
181ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  testing_browser_process->SetPrefService(NULL);
182201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch}
183201ade2fbba22bfb27ae029f4d23fca6ded109a0Ben Murdoch
184ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(PromoResourceServiceTest, UnpackWebStoreSignal) {
185ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Set up a testing profile and create a promo resource service.
186ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  TestingProfile profile;
187ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  TestingPrefService local_state;
188ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  TestingBrowserProcess* testing_browser_process =
189ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      static_cast<TestingBrowserProcess*>(g_browser_process);
190ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  testing_browser_process->SetPrefService(&local_state);
19172a454cd3513ac24fbdd0e0cb9ad70b86a99b801Kristian Monsen
192ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  browser::RegisterLocalState(&local_state);
193ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
194ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_refptr<PromoResourceService> web_resource_service(
195ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      new PromoResourceService(&profile));
196ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
197ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  web_resource_service->set_channel("dev");
198ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
199ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Set up start and end dates and promo line in a Dictionary as if parsed
200ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // from the service.
201ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  std::string json = "{ "
202ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                     "  \"topic\": {"
203ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                     "    \"answers\": ["
204ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                     "       {"
205ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                     "        \"answer_id\": \"341252\","
206ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                     "        \"name\": \"webstore_promo:15\","
207ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                     "        \"question\": \"The header!\","
208ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                     "        \"inproduct_target\": \"The button label!\","
209ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                     "        \"inproduct\": \"http://link.com\","
210ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                     "        \"tooltip\": \"No thanks, hide this.\""
211ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                     "       }"
212ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                     "    ]"
213ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                     "  }"
214ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen                     "}";
215ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  scoped_ptr<DictionaryValue> test_json(static_cast<DictionaryValue*>(
216ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen      base::JSONReader::Read(json, false)));
217ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
218ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Initialize a message loop for this to run on.
219ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  MessageLoop loop;
220ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
221ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // Check that prefs are set correctly.
222ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  web_resource_service->UnpackWebStoreSignal(*(test_json.get()));
223ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  PrefService* prefs = profile.GetPrefs();
224ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  ASSERT_TRUE(prefs != NULL);
225ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
226ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ("341252", AppsPromo::GetPromoId());
227ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ("The header!", AppsPromo::GetPromoHeaderText());
228ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ("The button label!", AppsPromo::GetPromoButtonText());
229ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ(GURL("http://link.com"), AppsPromo::GetPromoLink());
230ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_EQ("No thanks, hide this.", AppsPromo::GetPromoExpireText());
231ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
232ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  testing_browser_process->SetPrefService(NULL);
233ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
234ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
235ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian MonsenTEST_F(PromoResourceServiceTest, IsBuildTargeted) {
236ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // canary
237ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_FALSE(PromoResourceService::IsBuildTargeted("canary", 1));
238ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_FALSE(PromoResourceService::IsBuildTargeted("canary", 3));
239ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_FALSE(PromoResourceService::IsBuildTargeted("canary", 7));
240ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(PromoResourceService::IsBuildTargeted("canary", 15));
241ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(PromoResourceService::IsBuildTargeted("canary", 8));
242ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(PromoResourceService::IsBuildTargeted("canary", 11));
243ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
244ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // dev
245ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(PromoResourceService::IsBuildTargeted("dev", 1));
246ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(PromoResourceService::IsBuildTargeted("dev", 3));
247ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(PromoResourceService::IsBuildTargeted("dev", 7));
248ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(PromoResourceService::IsBuildTargeted("dev", 15));
249ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_FALSE(PromoResourceService::IsBuildTargeted("dev", 8));
250ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(PromoResourceService::IsBuildTargeted("dev", 11));
251ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
252ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // beta
253ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_FALSE(PromoResourceService::IsBuildTargeted("beta", 1));
254ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(PromoResourceService::IsBuildTargeted("beta", 3));
255ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(PromoResourceService::IsBuildTargeted("beta", 7));
256ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(PromoResourceService::IsBuildTargeted("beta", 15));
257ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_FALSE(PromoResourceService::IsBuildTargeted("beta", 8));
258ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(PromoResourceService::IsBuildTargeted("beta", 11));
259ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen
260ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  // stable
261ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_FALSE(PromoResourceService::IsBuildTargeted("", 1));
262ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_FALSE(PromoResourceService::IsBuildTargeted("", 3));
263ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(PromoResourceService::IsBuildTargeted("", 7));
264ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(PromoResourceService::IsBuildTargeted("", 15));
265ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_FALSE(PromoResourceService::IsBuildTargeted("", 8));
266ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_FALSE(PromoResourceService::IsBuildTargeted("", 11));
267ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen  EXPECT_TRUE(PromoResourceService::IsBuildTargeted("", 12));
268ddb351dbec246cf1fab5ec20d2d5520909041de1Kristian Monsen}
269