Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(327)

Side by Side Diff: chrome/test/data/webui/settings/date_time_page_tests.js

Issue 2438443005: MD Settings: Date and Time page, part 2/3 (Closed)
Patch Set: rebase Created 4 years, 1 month ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
« no previous file with comments | « chrome/test/data/webui/settings/cr_settings_browsertest.js ('k') | no next file » | no next file with comments »
Toggle Intra-line Diffs ('i') | Expand Comments ('e') | Collapse Comments ('c') | Show Comments Hide Comments ('s')
OLDNEW
(Empty)
1 // Copyright 2016 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 (function() {
6 function getFakePrefs() {
7 return {
8 cros: {
9 system: {
10 timezone: {
11 key: 'cros.system.timezone',
12 type: chrome.settingsPrivate.PrefType.STRING,
13 value: 'Westeros/Kings_Landing',
14 },
15 },
16 },
17 settings: {
18 clock: {
19 use_24hour_clock: {
20 key: 'settings.clock.use_24hour_clock',
21 type: chrome.settingsPrivate.PrefType.BOOLEAN,
22 value: false,
23 },
24 },
25 resolve_timezone_by_geolocation: {
26 key: 'settings.resolve_timezone_by_geolocation',
27 type: chrome.settingsPrivate.PrefType.BOOLEAN,
28 value: true,
29 },
30 },
31 };
32 }
33
34 /**
35 * Sets up fakes and creates the date time element.
36 * @param {!Object} prefs
37 * @param {boolean} hasPolicy
38 * @param {boolean=} opt_autoDetectPolicyValue
39 * @return {!SettingsDateTimePage}
40 */
41 function initializeDateTime(prefs, hasPolicy, opt_autoDetectPolicyValue) {
42 // Find the desired initial time zone by ID.
43 var timeZone = assert(fakeTimeZones.find(function(timeZonePair) {
44 return timeZonePair[0] == prefs.cros.system.timezone.value;
45 }));
46
47 var data = {
48 timeZoneID: timeZone[0],
49 timeZoneName: timeZone[1],
50 controlledSettingPolicy: 'This setting is enforced by your administrator',
51 };
52
53 if (hasPolicy)
54 data.timeZoneAutoDetectValueFromPolicy = opt_autoDetectPolicyValue;
55
56 window.loadTimeData = new LoadTimeData;
57 loadTimeData.data = data;
58
59 var dateTime = document.createElement('settings-date-time-page');
60 dateTime.prefs = prefs;
61 CrSettingsPrefs.setInitialized();
62
63 document.body.appendChild(dateTime);
64 return dateTime;
65 }
66
67 // CrOS sends time zones as [id, friendly name] pairs.
68 var fakeTimeZones = [
69 ['Westeros/Highgarden', '(KNG-2:00) The Reach Time (Highgarden)'],
70 ['Westeros/Winterfell', '(KNG-1:00) The North Time (Winterfell)'],
71 ['Westeros/Kings_Landing',
72 '(KNG+0:00) Westeros Standard Time (King\'s Landing)'],
73 ['Westeros/TheEyrie', '(KNG+1:00) The Vale Time (The Eyrie)'],
74 ['Westeros/Sunspear', '(KNG+2:00) Dorne Time (Sunspear)'],
75 ['FreeCities/Pentos', '(KNG+6:00) Pentos Time (Pentos)'],
76 ['FreeCities/Volantis', '(KNG+9:00) Volantis Time (Volantis)'],
77 ['BayOfDragons/Daenerys', '(KNG+14:00) Daenerys Free Time (Meereen)'],
78 ];
79
80 suite('settings-date-time-page', function() {
81 var dateTime;
82
83 // Track whether handler functions have been called.
84 var dateTimePageReadyCalled;
85 var getTimeZonesCalled;
86
87 setup(function() {
88 PolymerTest.clearBody();
89 CrSettingsPrefs.resetForTesting();
90
91 dateTimePageReadyCalled = false;
92 getTimeZonesCalled = false;
93
94 registerMessageCallback('dateTimePageReady', null, function() {
95 assertFalse(dateTimePageReadyCalled);
96 dateTimePageReadyCalled = true;
97 });
98
99 registerMessageCallback('getTimeZones', null, function(callback) {
100 assertFalse(getTimeZonesCalled);
101 getTimeZonesCalled = true;
102 cr.webUIResponse(callback, true, fakeTimeZones);
103 });
104 });
105
106 suiteTeardown(function() {
107 // TODO(michaelpg): Removes the element before exiting, because the
108 // <paper-tooltip> in <cr-policy-pref-indicator> somehow causes warnings
109 // and/or script errors in axs_testing.js.
110 PolymerTest.clearBody();
111 });
112
113 function verifyAutoDetectSetting(autoDetect) {
114 assertEquals(autoDetect, dateTime.$$('settings-dropdown-menu').disabled);
115 assertEquals(autoDetect, dateTime.$.timeZoneAutoDetectCheckbox.checked);
116 }
117
118 function verifyPolicy(policy) {
119 Polymer.dom.flush();
120 var indicator = dateTime.$$('cr-policy-pref-indicator');
121
122 if (policy) {
123 assertTrue(!!indicator);
124 assertGT(indicator.clientHeight, 0);
125 } else {
126 // Indicator should be missing or hidden.
127 if (indicator)
128 assertEquals(0, indicator.clientHeight);
129 }
130
131 assertEquals(policy, dateTime.$.timeZoneAutoDetectCheckbox.disabled);
132 }
133
134 function verifyTimeZonesPopulated(populated) {
135 var dropdown = dateTime.$$('settings-dropdown-menu');
136 if (populated)
137 assertEquals(fakeTimeZones.length, dropdown.menuOptions.length);
138 else
139 assertEquals(1, dropdown.menuOptions.length);
140 }
141
142 test('auto-detect on', function(done) {
143 var prefs = getFakePrefs();
144 dateTime = initializeDateTime(prefs, false);
145
146 assertTrue(dateTimePageReadyCalled);
147 assertFalse(getTimeZonesCalled);
148
149 verifyAutoDetectSetting(true);
150 verifyTimeZonesPopulated(false);
151 verifyPolicy(false);
152
153 // Disable auto-detect.
154 MockInteractions.tap(dateTime.$.timeZoneAutoDetectCheckbox);
155 verifyAutoDetectSetting(false);
156 assertTrue(getTimeZonesCalled);
157
158 setTimeout(function() {
159 verifyTimeZonesPopulated(true);
160 done();
161 });
162 });
163
164 test('auto-detect off', function(done) {
165 var prefs = getFakePrefs();
166 prefs.settings.resolve_timezone_by_geolocation.value = false;
167 dateTime = initializeDateTime(prefs, false);
168
169 assertTrue(dateTimePageReadyCalled);
170 assertTrue(getTimeZonesCalled);
171
172 verifyAutoDetectSetting(false);
173 verifyPolicy(false);
174
175 setTimeout(function() {
176 verifyTimeZonesPopulated(true);
177
178 // Enable auto-detect.
179 MockInteractions.tap(dateTime.$.timeZoneAutoDetectCheckbox);
180 verifyAutoDetectSetting(true);
181 done();
182 });
183 });
184
185 test('auto-detect forced on', function(done) {
186 var prefs = getFakePrefs();
187 prefs.settings.resolve_timezone_by_geolocation.value = false;
188 dateTime = initializeDateTime(prefs, true, true);
189
190 assertTrue(dateTimePageReadyCalled);
191 assertFalse(getTimeZonesCalled);
192
193 verifyAutoDetectSetting(true);
194 verifyTimeZonesPopulated(false);
195 verifyPolicy(true);
196
197 // Cannot disable auto-detect.
198 MockInteractions.tap(dateTime.$.timeZoneAutoDetectCheckbox);
199 verifyAutoDetectSetting(true);
200 assertFalse(getTimeZonesCalled);
201
202 // Update the policy: force auto-detect off.
203 cr.webUIListenerCallback('time-zone-auto-detect-policy', true, false);
204 verifyAutoDetectSetting(false);
205 verifyPolicy(true);
206
207 assertTrue(getTimeZonesCalled);
208 setTimeout(function() {
209 verifyTimeZonesPopulated(true);
210 done();
211 });
212 });
213
214 test('auto-detect forced off', function(done) {
215 var prefs = getFakePrefs();
216 dateTime = initializeDateTime(prefs, true, false);
217
218 assertTrue(dateTimePageReadyCalled);
219 assertTrue(getTimeZonesCalled);
220
221 verifyAutoDetectSetting(false);
222 verifyPolicy(true);
223
224 setTimeout(function() {
225 verifyTimeZonesPopulated(true);
226
227 // Remove the policy so user's preference takes effect.
228 cr.webUIListenerCallback('time-zone-auto-detect-policy', false);
229 verifyAutoDetectSetting(true);
230 verifyPolicy(false);
231
232 // User can disable auto-detect.
233 MockInteractions.tap(dateTime.$.timeZoneAutoDetectCheckbox);
234 verifyAutoDetectSetting(false);
235 done();
236 });
237 });
238 });
239 })();
OLDNEW
« no previous file with comments | « chrome/test/data/webui/settings/cr_settings_browsertest.js ('k') | no next file » | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698