1// Copyright (c) 2012 The Chromium Authors. All rights reserved.
2// Use of this source code is governed by a BSD-style license that can be
3// found in the LICENSE file.
4
5#include "chrome/browser/chromeos/mobile_config.h"
6
7#include "base/time/time.h"
8#include "testing/gtest/include/gtest/gtest.h"
9
10namespace {
11
12const char kBadManifest[] = "{\"version\": \"1\"}";
13
14const char kGoodMobileConfig[] =
15    "{"
16    "  \"version\": \"1.0\","
17    "  \"carriers\" : {\n"
18    "    \"carrier (country)\" : {\n"
19    "      \"ids\" : [\n"
20    "        {\n"
21    "          \"id\": \"cr (country)\",\n"
22    "          \"_comment\" : \"Based on SPN.\",\n"
23    "        },\n"
24    "        {\n"
25    "          \"id\": \"Carrier (country)\",\n"
26    "          \"_comment\" : \"Legacy ID when SPN is empty.\",\n"
27    "        },\n"
28    "      ],\n"
29    "      \"top_up_url\" : \"http://www.carrier.com/\",\n"
30    "      \"show_portal_button\" : true,\n"
31    "      \"deals\" : [\n"
32    "        {\n"
33    "          \"deal_id\" : \"0\",\n"
34    "          \"locales\" : [ \"en-US\", ],\n"
35    "          \"expire_date\" : \"31/12/2099 0:0\",\n"
36    "          \"notification_count\" : 1,\n"
37    "          \"localized_content\" : {\n"
38    "            \"en-US\" : {\n"
39    "              \"notification_text\" : \"3G connectivity : Carrier.\",\n"
40    "            },\n"
41    "            \"default\" : {\n"
42    "              \"notification_text\" : \"default_text.\",\n"
43    "            },\n"
44    "          },\n"
45    "        },\n"
46    "      ],\n"
47    "    },"
48    "  },"
49    " \"initial_locales\" : {\n"
50    "  \"en-US\" : {\n"
51    "    \"setup_url\" : \"accounts.carrier.com\",\n"
52    "  },"
53    " },"
54    "}";
55
56const char kOldDealMobileConfig[] =
57    "{"
58    "  \"version\": \"1.0\","
59    "  \"carriers\" : {\n"
60     "    \"Carrier (country)\" : {\n"
61     "      \"top_up_url\" : \"http://www.carrier.com/\",\n"
62     "      \"deals\" : [\n"
63     "        {\n"
64     "          \"deal_id\" : \"0\",\n"
65     "          \"locales\" : [ \"en-US\", ],\n"
66     "          \"expire_date\" : \"01/01/01 0:0\",\n"
67     "          \"notification_count\" : 1,\n"
68     "          \"localized_content\" : {\n"
69     "            \"en-US\" : {\n"
70     "              \"notification_text\" : \"3G connectivity : Carrier.\",\n"
71     "            },\n"
72     "            \"default\" : {\n"
73     "              \"notification_text\" : \"default_text.\",\n"
74     "            },\n"
75     "          },\n"
76     "        },\n"
77     "      ],\n"
78     "    },"
79     "  },"
80    "}";
81
82const char kLocalMobileConfigNoDeals[] =
83    "{"
84    "  \"version\": \"1.0\","
85    "  \"exclude_deals\": true,"
86    "  \"carriers\" : {\n"
87     "  },"
88    "}";
89
90const char kLocalMobileConfig[] =
91    "{"
92    "  \"version\": \"1.0\","
93    "  \"carriers\" : {\n"
94    "    \"carrier (country)\" : {\n"
95    "      \"exclude_deals\": true,"
96    "      \"top_up_url\" : \"http://www.carrier-new-url.com/\",\n"
97    "      \"deals\" : [\n"
98    "        {\n"
99    "          \"deal_id\" : \"1\",\n"
100    "          \"locales\" : [ \"en-GB\", ],\n"
101    "          \"expire_date\" : \"31/12/2099 0:0\",\n"
102    "          \"notification_count\" : 2,\n"
103    "          \"localized_content\" : {\n"
104    "            \"en-GB\" : {\n"
105    "              \"notification_text\" : \"3G connectivity : Carrier.\",\n"
106    "            },\n"
107    "            \"default\" : {\n"
108    "              \"notification_text\" : \"default_text from local.\",\n"
109    "            },\n"
110    "          },\n"
111    "        },\n"
112    "      ],\n"
113    "    },"
114    "  },"
115    " \"initial_locales\" : {\n"
116    "  \"en-US\" : {\n"
117    "    \"setup_url\" : \"accounts.carrier.com/localized/\",\n"
118    "  },"
119    " },"
120    "}";
121
122}  // anonymous namespace
123
124namespace chromeos {
125
126TEST(MobileConfigTest, Basic) {
127  MobileConfig config(kGoodMobileConfig, "en-US");
128  EXPECT_TRUE(config.IsReady());
129
130  const MobileConfig::Carrier* carrier;
131  carrier = config.GetCarrier("Carrier (country)");
132  EXPECT_TRUE(carrier != NULL);
133  carrier = config.GetCarrier("cr (country)");
134  EXPECT_TRUE(carrier != NULL);
135  EXPECT_EQ("http://www.carrier.com/", carrier->top_up_url());
136  EXPECT_EQ(true, carrier->show_portal_button());
137  const MobileConfig::CarrierDeal* deal;
138  deal = carrier->GetDefaultDeal();
139  EXPECT_TRUE(deal != NULL);
140  deal = carrier->GetDeal("0");
141  EXPECT_TRUE(deal != NULL);
142  EXPECT_EQ("en-US", deal->locales()[0]);
143  EXPECT_EQ(1, deal->notification_count());
144  EXPECT_EQ("3G connectivity : Carrier.",
145            deal->GetLocalizedString("en-US", "notification_text"));
146  EXPECT_EQ("default_text.",
147            deal->GetLocalizedString("en", "notification_text"));
148
149  base::Time reference_time;
150  base::Time::FromString("31/12/2099 0:00", &reference_time);
151  EXPECT_EQ(reference_time, deal->expire_date());
152
153  const MobileConfig::LocaleConfig* locale_config;
154  locale_config = config.GetLocaleConfig();
155  EXPECT_TRUE(locale_config != NULL);
156  EXPECT_EQ("accounts.carrier.com", locale_config->setup_url());
157
158  // Check same manifest but with another initial locale.
159  MobileConfig config_uk(kGoodMobileConfig, "en-GB");
160  EXPECT_TRUE(config_uk.IsReady());
161  locale_config = config_uk.GetLocaleConfig();
162  EXPECT_TRUE(locale_config == NULL);
163}
164
165TEST(MobileConfigTest, OldDeal) {
166  MobileConfig config(kOldDealMobileConfig, "en-US");
167  EXPECT_TRUE(config.IsReady());
168  const MobileConfig::Carrier* carrier;
169  carrier = config.GetCarrier("Carrier (country)");
170  EXPECT_TRUE(carrier != NULL);
171  // Check default value.
172  EXPECT_FALSE(carrier->show_portal_button());
173  const MobileConfig::CarrierDeal* deal;
174  // TODO(nkostylev): Pass fixed time instead of relying on Time::Now().
175  deal = carrier->GetDefaultDeal();
176  EXPECT_TRUE(deal == NULL);
177}
178
179TEST(MobileConfigTest, DealOtherLocale) {
180  MobileConfig config(kGoodMobileConfig, "en-GB");
181  EXPECT_TRUE(config.IsReady());
182  const MobileConfig::Carrier* carrier;
183  carrier = config.GetCarrier("Carrier (country)");
184  EXPECT_TRUE(carrier != NULL);
185  const MobileConfig::CarrierDeal* deal;
186  deal = carrier->GetDefaultDeal();
187  EXPECT_TRUE(deal == NULL);
188}
189
190TEST(MobileConfigTest, BadManifest) {
191  MobileConfig config(kBadManifest, "en-US");
192  EXPECT_FALSE(config.IsReady());
193}
194
195TEST(MobileConfigTest, LocalConfigNoDeals) {
196  MobileConfig config(kGoodMobileConfig, "en-US");
197  EXPECT_TRUE(config.IsReady());
198  config.LoadManifestFromString(kLocalMobileConfigNoDeals);
199  EXPECT_TRUE(config.IsReady());
200  const MobileConfig::Carrier* carrier;
201  carrier = config.GetCarrier("Carrier (country)");
202  EXPECT_TRUE(carrier != NULL);
203  const MobileConfig::CarrierDeal* deal;
204  deal = carrier->GetDefaultDeal();
205  EXPECT_TRUE(deal == NULL);
206  deal = carrier->GetDeal("0");
207  EXPECT_TRUE(deal == NULL);
208}
209
210TEST(MobileConfigTest, LocalConfig) {
211  MobileConfig config(kGoodMobileConfig, "en-GB");
212  EXPECT_TRUE(config.IsReady());
213  config.LoadManifestFromString(kLocalMobileConfig);
214  EXPECT_TRUE(config.IsReady());
215
216  const MobileConfig::Carrier* carrier;
217  carrier = config.GetCarrier("Carrier (country)");
218  EXPECT_TRUE(carrier != NULL);
219  EXPECT_EQ("http://www.carrier-new-url.com/", carrier->top_up_url());
220
221  const MobileConfig::CarrierDeal* deal;
222  deal = carrier->GetDeal("0");
223  EXPECT_TRUE(deal == NULL);
224  deal = carrier->GetDefaultDeal();
225  EXPECT_TRUE(deal != NULL);
226  deal = carrier->GetDeal("1");
227  EXPECT_TRUE(deal != NULL);
228  EXPECT_EQ("en-GB", deal->locales()[0]);
229  EXPECT_EQ(2, deal->notification_count());
230  EXPECT_EQ("3G connectivity : Carrier.",
231            deal->GetLocalizedString("en-GB", "notification_text"));
232  EXPECT_EQ("default_text from local.",
233            deal->GetLocalizedString("en", "notification_text"));
234  base::Time reference_time;
235  base::Time::FromString("31/12/2099 0:00", &reference_time);
236  EXPECT_EQ(reference_time, deal->expire_date());
237
238  // Now reload same global/local config files but with proper initial locale.
239  MobileConfig config_us(kGoodMobileConfig, "en-US");
240  EXPECT_TRUE(config_us.IsReady());
241  config_us.LoadManifestFromString(kLocalMobileConfig);
242  EXPECT_TRUE(config_us.IsReady());
243  const MobileConfig::LocaleConfig* locale_config;
244  locale_config = config_us.GetLocaleConfig();
245  EXPECT_TRUE(locale_config != NULL);
246  EXPECT_EQ("accounts.carrier.com/localized/", locale_config->setup_url());
247}
248
249}  // namespace chromeos
250