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