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

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

Issue 1997453006: MD Settings: About page, updating buttons based on current update status. (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@about_page_main3
Patch Set: Nits. Created 4 years, 7 months 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
OLDNEW
1 // Copyright 2016 The Chromium Authors. All rights reserved. 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 2 // Use of this source code is governed by a BSD-style license that can be
3 // found in the LICENSE file. 3 // found in the LICENSE file.
4 4
5 cr.define('settings_about_page', function() { 5 cr.define('settings_about_page', function() {
6 /** 6 /**
7 * @constructor 7 * @constructor
8 * @implements {settings.AboutPageBrowserProxy} 8 * @implements {settings.AboutPageBrowserProxy}
9 * @extends {settings.TestBrowserProxy} 9 * @extends {settings.TestBrowserProxy}
10 */ 10 */
11 var TestAboutPageBrowserProxy = function() { 11 var TestAboutPageBrowserProxy = function() {
12 settings.TestBrowserProxy.call(this, [ 12 settings.TestBrowserProxy.call(this, [
13 'pageReady', 13 'pageReady',
14 'refreshUpdateStatus', 14 'refreshUpdateStatus',
15 'openHelpPage', 15 'openHelpPage',
16 'openFeedbackDialog', 16 'openFeedbackDialog',
17 'getCurrentChannel', 17 'getCurrentChannel',
18 'getTargetChannel', 18 'getTargetChannel',
19 'getVersionInfo', 19 'getVersionInfo',
20 ]); 20 ]);
21 21
22 /** @type {!VersionInfo} */ 22 /** @type {!VersionInfo} */
23 this.versionInfo_ = { 23 this.versionInfo_ = {
24 arcVersion: '', 24 arcVersion: '',
25 osFirmware: '', 25 osFirmware: '',
26 osVersion: '', 26 osVersion: '',
27 }; 27 };
28
29 /** @private {!UpdateStatus} */
30 this.updateStatus_ = UpdateStatus.UPDATED;
31
32 if (cr.isChromeOS) {
33 /** @private {!BrowserChannel} */
34 this.currentChannel_ = BrowserChannel.BETA;
35
36 /** @private {!BrowserChannel} */
37 this.targetChannel_ = BrowserChannel.BETA;
38 }
28 }; 39 };
29 40
30 TestAboutPageBrowserProxy.prototype = { 41 TestAboutPageBrowserProxy.prototype = {
31 __proto__: settings.TestBrowserProxy.prototype, 42 __proto__: settings.TestBrowserProxy.prototype,
32 43
33 /** @param {!VersionInfo} */ 44 /** @param {!VersionInfo} */
34 setVersionInfo: function(versionInfo) { 45 setVersionInfo: function(versionInfo) {
35 this.versionInfo_ = versionInfo; 46 this.versionInfo_ = versionInfo;
36 }, 47 },
37 48
49 /** @param {!UpdateStatus} updateStatus */
50 setUpdateStatus: function(updateStatus) {
51 this.updateStatus_ = updateStatus;
52 },
53
38 /** @override */ 54 /** @override */
39 pageReady: function() { 55 pageReady: function() {
40 this.methodCalled('pageReady'); 56 this.methodCalled('pageReady');
41 }, 57 },
42 58
43 /** @override */ 59 /** @override */
44 refreshUpdateStatus: function() { 60 refreshUpdateStatus: function() {
61 cr.webUIListenerCallback(
62 'update-status-changed', {status: this.updateStatus_});
45 this.methodCalled('refreshUpdateStatus'); 63 this.methodCalled('refreshUpdateStatus');
46 }, 64 },
47 65
48 /** @override */ 66 /** @override */
49 getCurrentChannel: function() {
50 this.methodCalled('getCurrentChannel');
51 return Promise.resolve(BrowserChannel.BETA);
52 },
53
54 /** @override */
55 getTargetChannel: function() {
56 this.methodCalled('getTargetChannel');
57 return Promise.resolve(BrowserChannel.BETA);
58 },
59
60 /** @override */
61 getVersionInfo: function() {
62 this.methodCalled('getVersionInfo');
63 return Promise.resolve(this.versionInfo_);
64 },
65
66 /** @override */
67 openFeedbackDialog: function() { 67 openFeedbackDialog: function() {
68 this.methodCalled('openFeedbackDialog'); 68 this.methodCalled('openFeedbackDialog');
69 }, 69 },
70 70
71 /** @override */ 71 /** @override */
72 openHelpPage: function() { 72 openHelpPage: function() {
73 this.methodCalled('openHelpPage'); 73 this.methodCalled('openHelpPage');
74 }, 74 },
75 }; 75 };
76 76
77 if (cr.isChromeOS) {
78 /**
79 * @param {!BrowserChannel} current
80 * @param {!BrowserChannel} target
81 */
82 TestAboutPageBrowserProxy.prototype.setChannels = function(
83 current, target) {
84 this.currentChannel_ = current;
85 this.targetChannel_ = target;
86 };
87
88 /** @override */
89 TestAboutPageBrowserProxy.prototype.getCurrentChannel = function() {
90 this.methodCalled('getCurrentChannel');
91 return Promise.resolve(this.currentChannel_);
92 };
93
94 /** @override */
95 TestAboutPageBrowserProxy.prototype.getTargetChannel = function() {
96 this.methodCalled('getTargetChannel');
97 return Promise.resolve(this.targetChannel_);
98 };
99
100 /** @override */
101 TestAboutPageBrowserProxy.prototype.getVersionInfo = function() {
102 this.methodCalled('getVersionInfo');
103 return Promise.resolve(this.versionInfo_);
104 };
105 }
106
107
77 function registerAboutPageTests() { 108 function registerAboutPageTests() {
109 function fireStatusChanged(status) {
110 cr.webUIListenerCallback('update-status-changed', {status: status});
111 }
112
78 suite('AboutPageTest', function() { 113 suite('AboutPageTest', function() {
79 var page = null; 114 var page = null;
80 var browserProxy = null; 115 var browserProxy = null;
81 116
82 setup(function() { 117 setup(function() {
83 browserProxy = new TestAboutPageBrowserProxy(); 118 browserProxy = new TestAboutPageBrowserProxy();
84 settings.AboutPageBrowserProxyImpl.instance_ = browserProxy; 119 settings.AboutPageBrowserProxyImpl.instance_ = browserProxy;
120 return initNewPage();
121 });
122
123 function initNewPage() {
tommycli 2016/05/20 22:53:18 I assume you have to re-init the page because the
dpapad 2016/05/20 23:25:35 Right, so far the channel is only queried when pag
124 browserProxy.resetResolver('refreshUpdateStatus');
85 PolymerTest.clearBody(); 125 PolymerTest.clearBody();
86 page = document.createElement('settings-about-page'); 126 page = document.createElement('settings-about-page');
87 document.body.appendChild(page); 127 document.body.appendChild(page);
88 return browserProxy.whenCalled('refreshUpdateStatus'); 128 return browserProxy.whenCalled('refreshUpdateStatus');
89 }); 129 }
90 130
91 /** 131 /**
92 * Test that the status icon updates according to incoming 132 * Test that the status icon updates according to incoming
93 * 'update-status-chanhed' events. 133 * 'update-status-changed' events.
94 */ 134 */
95 test('IconUpdates', function() { 135 test('IconUpdates', function() {
96 function fireStatusChanged(status) {
97 cr.webUIListenerCallback('update-status-changed', {
98 status: status, message: '', progress: 0,
99 });
100 }
101
102 var SPINNER_ICON = 'chrome://resources/images/throbber_small.svg'; 136 var SPINNER_ICON = 'chrome://resources/images/throbber_small.svg';
103 137
104 var icon = page.$$('iron-icon'); 138 var icon = page.$$('iron-icon');
105 assertTrue(!!icon); 139 assertTrue(!!icon);
106 assertEquals(null, icon.getAttribute('icon'));
107 140
108 fireStatusChanged(UpdateStatus.CHECKING); 141 fireStatusChanged(UpdateStatus.CHECKING);
109 assertEquals(SPINNER_ICON, icon.src); 142 assertEquals(SPINNER_ICON, icon.src);
110 assertEquals(null, icon.getAttribute('icon')); 143 assertEquals(null, icon.getAttribute('icon'));
111 144
112 fireStatusChanged(UpdateStatus.UPDATING); 145 fireStatusChanged(UpdateStatus.UPDATING);
113 assertEquals(SPINNER_ICON, icon.src); 146 assertEquals(SPINNER_ICON, icon.src);
114 assertEquals(null, icon.getAttribute('icon')); 147 assertEquals(null, icon.getAttribute('icon'));
115 148
116 fireStatusChanged(UpdateStatus.NEARLY_UPDATED); 149 fireStatusChanged(UpdateStatus.NEARLY_UPDATED);
(...skipping 10 matching lines...) Expand all
127 160
128 fireStatusChanged(UpdateStatus.FAILED); 161 fireStatusChanged(UpdateStatus.FAILED);
129 assertEquals(null, icon.src); 162 assertEquals(null, icon.src);
130 assertEquals('settings:error', icon.icon); 163 assertEquals('settings:error', icon.icon);
131 164
132 fireStatusChanged(UpdateStatus.DISABLED); 165 fireStatusChanged(UpdateStatus.DISABLED);
133 assertEquals(null, icon.src); 166 assertEquals(null, icon.src);
134 assertEquals(null, icon.getAttribute('icon')); 167 assertEquals(null, icon.getAttribute('icon'));
135 }); 168 });
136 169
170 if (cr.isChromeOS) {
171 /**
172 * Test that all buttons update according to incoming
173 * 'update-status-changed' events for the case where target and current
174 * channel are the same.
175 */
176 test('ButtonsUpdate_SameChannel', function() {
177 var relaunch = page.$.relaunch;
178 var checkForUpdates = page.$.checkForUpdates;
179 var relaunchAndPowerwash = page.$.relaunchAndPowerwash;
180
181 assertTrue(!!relaunch);
182 assertTrue(!!relaunchAndPowerwash);
183 assertTrue(!!checkForUpdates);
184
185 function assertAllHidden() {
186 assertTrue(checkForUpdates.hidden);
187 assertTrue(relaunch.hidden);
188 assertTrue(relaunchAndPowerwash.hidden);
189 }
190
191 // Check that |UPDATED| status is ignored if the user has not
192 // explicitly checked for updates yet.
193 fireStatusChanged(UpdateStatus.UPDATED);
194 assertFalse(checkForUpdates.hidden);
195 assertTrue(relaunch.hidden);
196 assertTrue(relaunchAndPowerwash.hidden);
197
198 fireStatusChanged(UpdateStatus.CHECKING);
199 assertAllHidden();
200
201 fireStatusChanged(UpdateStatus.UPDATING);
202 assertAllHidden();
203
204 fireStatusChanged(UpdateStatus.NEARLY_UPDATED);
205 assertTrue(checkForUpdates.hidden);
206 assertFalse(relaunch.hidden);
207 assertTrue(relaunchAndPowerwash.hidden);
208
209 fireStatusChanged(UpdateStatus.UPDATED);
210 assertAllHidden();
211
212 fireStatusChanged(UpdateStatus.FAILED);
213 assertFalse(checkForUpdates.hidden);
214 assertTrue(relaunch.hidden);
215 assertTrue(relaunchAndPowerwash.hidden);
216
217 fireStatusChanged(UpdateStatus.DISABLED);
218 assertAllHidden();
219
220 fireStatusChanged(UpdateStatus.DISABLED_BY_ADMIN);
221 assertAllHidden();
222 });
223
224 /**
225 * Test that buttons update according to incoming
226 * 'update-status-changed' events for the case where the target channel
227 * is more stable than current channel.
228 */
229 test('ButtonsUpdate_BetaToStable', function() {
230 browserProxy.setChannels(BrowserChannel.BETA, BrowserChannel.STABLE);
231 browserProxy.setUpdateStatus(UpdateStatus.NEARLY_UPDATED);
232
233 return initNewPage().then(function() {
234 assertTrue(!!page.$.relaunch);
235 assertTrue(!!page.$.relaunchAndPowerwash);
236
237 assertTrue(page.$.relaunch.hidden);
238 assertFalse(page.$.relaunchAndPowerwash.hidden);
239 });
240 });
241
242 /**
243 * Test that buttons update according to incoming
244 * 'update-status-changed' events for the case where the target channel
245 * is less stable than current channel.
246 */
247 test('ButtonsUpdate_StableToBeta', function() {
248 browserProxy.setChannels(BrowserChannel.STABLE, BrowserChannel.BETA);
249 browserProxy.setUpdateStatus(UpdateStatus.NEARLY_UPDATED);
250
251 return initNewPage().then(function() {
252 assertTrue(!!page.$.relaunch);
253 assertTrue(!!page.$.relaunchAndPowerwash);
254
255 assertFalse(page.$.relaunch.hidden);
256 assertTrue(page.$.relaunchAndPowerwash.hidden);
257 });
258 });
259 } else {
tommycli 2016/05/20 22:53:19 Nit: since this is so far down, would it be more r
dpapad 2016/05/20 23:25:35 Done.
260 /*
261 * Test that the "Check for updates" button updates according to
262 * incoming 'update-status-changed' events.
263 */
264 test('ButtonsUpdate', function() {
265 var relaunch = page.$.relaunch;
266 assertTrue(!!relaunch);
267
268 fireStatusChanged(UpdateStatus.CHECKING);
269 assertTrue(relaunch.hidden);
270
271 fireStatusChanged(UpdateStatus.UPDATING);
272 assertTrue(relaunch.hidden);
273
274 fireStatusChanged(UpdateStatus.NEARLY_UPDATED);
275 assertFalse(relaunch.hidden);
276
277 fireStatusChanged(UpdateStatus.UPDATED);
278 assertTrue(relaunch.hidden);
279
280 fireStatusChanged(UpdateStatus.FAILED);
281 assertTrue(relaunch.hidden);
282
283 fireStatusChanged(UpdateStatus.DISABLED);
284 assertTrue(relaunch.hidden);
285
286 fireStatusChanged(UpdateStatus.DISABLED_BY_ADMIN);
287 assertTrue(relaunch.hidden);
288 });
289 }
290
137 test('GetHelp', function() { 291 test('GetHelp', function() {
138 assertTrue(!!page.$.help); 292 assertTrue(!!page.$.help);
139 MockInteractions.tap(page.$.help); 293 MockInteractions.tap(page.$.help);
140 return browserProxy.whenCalled('openHelpPage'); 294 return browserProxy.whenCalled('openHelpPage');
141 }); 295 });
142 }); 296 });
143 } 297 }
144 298
145 function registerOfficialBuildTests() { 299 function registerOfficialBuildTests() {
146 suite('AboutPageTest_OfficialBuild', function() { 300 suite('AboutPageTest_OfficialBuild', function() {
(...skipping 50 matching lines...) Expand 10 before | Expand all | Expand 10 after
197 assertEquals(versionInfo.osVersion, page.$.osVersion.textContent); 351 assertEquals(versionInfo.osVersion, page.$.osVersion.textContent);
198 assertEquals(versionInfo.osFirmware, page.$.osFirmware.textContent); 352 assertEquals(versionInfo.osFirmware, page.$.osFirmware.textContent);
199 }); 353 });
200 }); 354 });
201 }); 355 });
202 } 356 }
203 } 357 }
204 358
205 return { 359 return {
206 registerTests: function() { 360 registerTests: function() {
207 if (cr.isChromeOS) { 361 /*if (cr.isChromeOS) {
208 registerDetailedBuildInfoTests(); 362 registerDetailedBuildInfoTests();
209 } 363 }*/
210 registerAboutPageTests(); 364 registerAboutPageTests();
211 }, 365 },
212 registerOfficialBuildTests: registerOfficialBuildTests, 366 registerOfficialBuildTests: registerOfficialBuildTests,
213 }; 367 };
214 }); 368 });
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698