// Copyright (c) 2012 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 "chrome/browser/chromeos/mobile_config.h" #include "base/time/time.h" #include "testing/gtest/include/gtest/gtest.h" namespace { const char kBadManifest[] = "{\"version\": \"1\"}"; const char kGoodMobileConfig[] = "{" " \"version\": \"1.0\"," " \"carriers\" : {\n" " \"carrier (country)\" : {\n" " \"ids\" : [\n" " {\n" " \"id\": \"cr (country)\",\n" " \"_comment\" : \"Based on SPN.\",\n" " },\n" " {\n" " \"id\": \"Carrier (country)\",\n" " \"_comment\" : \"Legacy ID when SPN is empty.\",\n" " },\n" " ],\n" " \"top_up_url\" : \"http://www.carrier.com/\",\n" " \"show_portal_button\" : true,\n" " \"deals\" : [\n" " {\n" " \"deal_id\" : \"0\",\n" " \"locales\" : [ \"en-US\", ],\n" " \"expire_date\" : \"31/12/2099 0:0\",\n" " \"notification_count\" : 1,\n" " \"localized_content\" : {\n" " \"en-US\" : {\n" " \"notification_text\" : \"3G connectivity : Carrier.\",\n" " },\n" " \"default\" : {\n" " \"notification_text\" : \"default_text.\",\n" " },\n" " },\n" " },\n" " ],\n" " }," " }," " \"initial_locales\" : {\n" " \"en-US\" : {\n" " \"setup_url\" : \"accounts.carrier.com\",\n" " }," " }," "}"; const char kOldDealMobileConfig[] = "{" " \"version\": \"1.0\"," " \"carriers\" : {\n" " \"Carrier (country)\" : {\n" " \"top_up_url\" : \"http://www.carrier.com/\",\n" " \"deals\" : [\n" " {\n" " \"deal_id\" : \"0\",\n" " \"locales\" : [ \"en-US\", ],\n" " \"expire_date\" : \"01/01/01 0:0\",\n" " \"notification_count\" : 1,\n" " \"localized_content\" : {\n" " \"en-US\" : {\n" " \"notification_text\" : \"3G connectivity : Carrier.\",\n" " },\n" " \"default\" : {\n" " \"notification_text\" : \"default_text.\",\n" " },\n" " },\n" " },\n" " ],\n" " }," " }," "}"; const char kLocalMobileConfigNoDeals[] = "{" " \"version\": \"1.0\"," " \"exclude_deals\": true," " \"carriers\" : {\n" " }," "}"; const char kLocalMobileConfig[] = "{" " \"version\": \"1.0\"," " \"carriers\" : {\n" " \"carrier (country)\" : {\n" " \"exclude_deals\": true," " \"top_up_url\" : \"http://www.carrier-new-url.com/\",\n" " \"deals\" : [\n" " {\n" " \"deal_id\" : \"1\",\n" " \"locales\" : [ \"en-GB\", ],\n" " \"expire_date\" : \"31/12/2099 0:0\",\n" " \"notification_count\" : 2,\n" " \"localized_content\" : {\n" " \"en-GB\" : {\n" " \"notification_text\" : \"3G connectivity : Carrier.\",\n" " },\n" " \"default\" : {\n" " \"notification_text\" : \"default_text from local.\",\n" " },\n" " },\n" " },\n" " ],\n" " }," " }," " \"initial_locales\" : {\n" " \"en-US\" : {\n" " \"setup_url\" : \"accounts.carrier.com/localized/\",\n" " }," " }," "}"; } // anonymous namespace namespace chromeos { TEST(MobileConfigTest, Basic) { MobileConfig config(kGoodMobileConfig, "en-US"); EXPECT_TRUE(config.IsReady()); const MobileConfig::Carrier* carrier; carrier = config.GetCarrier("Carrier (country)"); EXPECT_TRUE(carrier != NULL); carrier = config.GetCarrier("cr (country)"); EXPECT_TRUE(carrier != NULL); EXPECT_EQ("http://www.carrier.com/", carrier->top_up_url()); EXPECT_EQ(true, carrier->show_portal_button()); const MobileConfig::CarrierDeal* deal; deal = carrier->GetDefaultDeal(); EXPECT_TRUE(deal != NULL); deal = carrier->GetDeal("0"); EXPECT_TRUE(deal != NULL); EXPECT_EQ("en-US", deal->locales()[0]); EXPECT_EQ(1, deal->notification_count()); EXPECT_EQ("3G connectivity : Carrier.", deal->GetLocalizedString("en-US", "notification_text")); EXPECT_EQ("default_text.", deal->GetLocalizedString("en", "notification_text")); base::Time reference_time; base::Time::FromString("31/12/2099 0:00", &reference_time); EXPECT_EQ(reference_time, deal->expire_date()); const MobileConfig::LocaleConfig* locale_config; locale_config = config.GetLocaleConfig(); EXPECT_TRUE(locale_config != NULL); EXPECT_EQ("accounts.carrier.com", locale_config->setup_url()); // Check same manifest but with another initial locale. MobileConfig config_uk(kGoodMobileConfig, "en-GB"); EXPECT_TRUE(config_uk.IsReady()); locale_config = config_uk.GetLocaleConfig(); EXPECT_TRUE(locale_config == NULL); } TEST(MobileConfigTest, OldDeal) { MobileConfig config(kOldDealMobileConfig, "en-US"); EXPECT_TRUE(config.IsReady()); const MobileConfig::Carrier* carrier; carrier = config.GetCarrier("Carrier (country)"); EXPECT_TRUE(carrier != NULL); // Check default value. EXPECT_FALSE(carrier->show_portal_button()); const MobileConfig::CarrierDeal* deal; // TODO(nkostylev): Pass fixed time instead of relying on Time::Now(). deal = carrier->GetDefaultDeal(); EXPECT_TRUE(deal == NULL); } TEST(MobileConfigTest, DealOtherLocale) { MobileConfig config(kGoodMobileConfig, "en-GB"); EXPECT_TRUE(config.IsReady()); const MobileConfig::Carrier* carrier; carrier = config.GetCarrier("Carrier (country)"); EXPECT_TRUE(carrier != NULL); const MobileConfig::CarrierDeal* deal; deal = carrier->GetDefaultDeal(); EXPECT_TRUE(deal == NULL); } TEST(MobileConfigTest, BadManifest) { MobileConfig config(kBadManifest, "en-US"); EXPECT_FALSE(config.IsReady()); } TEST(MobileConfigTest, LocalConfigNoDeals) { MobileConfig config(kGoodMobileConfig, "en-US"); EXPECT_TRUE(config.IsReady()); config.LoadManifestFromString(kLocalMobileConfigNoDeals); EXPECT_TRUE(config.IsReady()); const MobileConfig::Carrier* carrier; carrier = config.GetCarrier("Carrier (country)"); EXPECT_TRUE(carrier != NULL); const MobileConfig::CarrierDeal* deal; deal = carrier->GetDefaultDeal(); EXPECT_TRUE(deal == NULL); deal = carrier->GetDeal("0"); EXPECT_TRUE(deal == NULL); } TEST(MobileConfigTest, LocalConfig) { MobileConfig config(kGoodMobileConfig, "en-GB"); EXPECT_TRUE(config.IsReady()); config.LoadManifestFromString(kLocalMobileConfig); EXPECT_TRUE(config.IsReady()); const MobileConfig::Carrier* carrier; carrier = config.GetCarrier("Carrier (country)"); EXPECT_TRUE(carrier != NULL); EXPECT_EQ("http://www.carrier-new-url.com/", carrier->top_up_url()); const MobileConfig::CarrierDeal* deal; deal = carrier->GetDeal("0"); EXPECT_TRUE(deal == NULL); deal = carrier->GetDefaultDeal(); EXPECT_TRUE(deal != NULL); deal = carrier->GetDeal("1"); EXPECT_TRUE(deal != NULL); EXPECT_EQ("en-GB", deal->locales()[0]); EXPECT_EQ(2, deal->notification_count()); EXPECT_EQ("3G connectivity : Carrier.", deal->GetLocalizedString("en-GB", "notification_text")); EXPECT_EQ("default_text from local.", deal->GetLocalizedString("en", "notification_text")); base::Time reference_time; base::Time::FromString("31/12/2099 0:00", &reference_time); EXPECT_EQ(reference_time, deal->expire_date()); // Now reload same global/local config files but with proper initial locale. MobileConfig config_us(kGoodMobileConfig, "en-US"); EXPECT_TRUE(config_us.IsReady()); config_us.LoadManifestFromString(kLocalMobileConfig); EXPECT_TRUE(config_us.IsReady()); const MobileConfig::LocaleConfig* locale_config; locale_config = config_us.GetLocaleConfig(); EXPECT_TRUE(locale_config != NULL); EXPECT_EQ("accounts.carrier.com/localized/", locale_config->setup_url()); } } // namespace chromeos