Don't show supervised user as "already on this device" while they're being imported.
[chromium-blink-merge.git] / chrome / browser / ui / webui / extensions / chromeos / kiosk_apps_browsertest.js
blobaaa7478538c805fe3535251281c000c3dd864291
1 // Copyright 2013 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.
5 /**
6  * TestFixture for kiosk app settings WebUI testing.
7  * @extends {testing.Test}
8  * @constructor
9  */
10 function KioskAppSettingsWebUITest() {}
12 KioskAppSettingsWebUITest.prototype = {
13   __proto__: testing.Test.prototype,
15   /**
16    * Browse to the kiosk app settings page.
17    */
18   browsePreload: 'chrome://extensions-frame/',
20   /**
21    * Mock settings data.
22    * @private
23    */
24   settings_: {
25     apps: [
26       {
27         id: 'app_1',
28         name: 'App1 Name',
29         iconURL: '',
30         autoLaunch: false,
31         isLoading: false,
32       },
33       {
34         id: 'app_2',
35         name: '',  // no name
36         iconURL: '',
37         autoLaunch: false,
38         isLoading: true,
39       },
40     ],
41     disableBailout: false,
42     hasAutoLaunchApp: false
43   },
45   /**
46    * Register a mock dictionary handler.
47    */
48   preLoad: function() {
49     this.makeAndRegisterMockHandler(
50         ['getKioskAppSettings',
51          'addKioskApp',
52          'removeKioskApp',
53          'enableKioskAutoLaunch',
54          'disableKioskAutoLaunch'
55         ]);
56     this.mockHandler.stubs().getKioskAppSettings().
57         will(callFunction(function() {
58           extensions.KioskAppsOverlay.setSettings(this.settings_);
59         }.bind(this)));
60     this.mockHandler.stubs().addKioskApp(ANYTHING);
61     this.mockHandler.stubs().removeKioskApp(ANYTHING);
62     this.mockHandler.stubs().enableKioskAutoLaunch(ANYTHING);
63     this.mockHandler.stubs().disableKioskAutoLaunch(ANYTHING);
64   },
66   setUp: function() {
67     // Shows the kiosk apps management overlay.
68     cr.dispatchSimpleEvent($('add-kiosk-app'), 'click');
69   }
72 // Test opening kiosk app settings has correct location and app items have
73 // correct label.
74 TEST_F('KioskAppSettingsWebUITest', 'testOpenKioskAppSettings', function() {
75   assertEquals(this.browsePreload, document.location.href);
77   var appItems = $('kiosk-app-list').items;
78   assertEquals(this.settings_.apps.length, appItems.length);
79   assertEquals(this.settings_.apps[0].name, appItems[0].name.textContent);
80   assertFalse(appItems[0].icon.classList.contains('spinner'));
81   assertEquals(this.settings_.apps[1].id, appItems[1].name.textContent);
82   assertTrue(appItems[1].icon.classList.contains('spinner'));
83 });
85 // Verify that enter key on 'kiosk-app-id-edit' adds an app.
86 TEST_F('KioskAppSettingsWebUITest', 'testAddKioskApp', function() {
87   var testAppId = 'app_3';
88   var appIdInput = $('kiosk-app-id-edit');
90   appIdInput.value = testAppId;
92   this.mockHandler.expects(once()).addKioskApp([testAppId]);
93   var keypress = document.createEvent('KeyboardEvents');
94   keypress.initKeyboardEvent('keypress', true, true, null, 'Enter', '');
95   appIdInput.dispatchEvent(keypress);
96 });
98 // Verify that the 'kiosk-app-add' button adds an app.
99 TEST_F('KioskAppSettingsWebUITest', 'testAddKioskAppByAddButton', function() {
100   var testAppId = 'app_3';
101   $('kiosk-app-id-edit').value = testAppId;
103   this.mockHandler.expects(once()).addKioskApp([testAppId]);
104   cr.dispatchSimpleEvent($('kiosk-app-add'), 'click');
107 // Verify that the 'done' button adds an app.
108 TEST_F('KioskAppSettingsWebUITest', 'testAddKioskAppByDoneButton', function() {
109   var testAppId = 'app_3';
110   $('kiosk-app-id-edit').value = testAppId;
112   this.mockHandler.expects(once()).addKioskApp([testAppId]);
113   cr.dispatchSimpleEvent($('kiosk-options-overlay-confirm'), 'click');
116 // Test the row delete button.
117 TEST_F('KioskAppSettingsWebUITest', 'testRemoveKioskApp', function() {
118   var appItem = $('kiosk-app-list').items[0];
119   var appId = appItem.data.id;
121   this.mockHandler.expects(once()).removeKioskApp([appId]);
122   appItem.querySelector('.row-delete-button').click();
125 // Test enable/disable auto launch buttons.
126 TEST_F('KioskAppSettingsWebUITest', 'testEnableDisableAutoLaunch', function() {
127   var appItem = $('kiosk-app-list').items[0];
128   var appId = appItem.data.id;
130   var enableAutoLaunchCalled = false;
131   this.mockHandler.expects(once()).enableKioskAutoLaunch([appId]).
132       will(callFunction(function() {
133         enableAutoLaunchCalled = true;
134       }));
135   appItem.querySelector('.enable-auto-launch-button').click();
136   expectTrue(enableAutoLaunchCalled);
138   var disableAutoLaunchCalled = false;
139   this.mockHandler.expects(once()).disableKioskAutoLaunch([appId]).
140       will(callFunction(function() {
141         disableAutoLaunchCalled = true;
142       }));
143   appItem.querySelector('.disable-auto-launch-button').click();
144   expectTrue(disableAutoLaunchCalled);
147 // Verify that updateApp updates app info.
148 TEST_F('KioskAppSettingsWebUITest', 'testUpdateApp', function() {
149   var appItems = $('kiosk-app-list').items;
150   assertEquals(appItems[1].data.id, 'app_2');
151   expectEquals(appItems[1].data.name, '');
152   expectTrue(appItems[1].icon.classList.contains('spinner'));
153   expectFalse(appItems[1].autoLaunch);
155   // New data changes name, autoLaunch and isLoading.
156   var newName = 'Name for App2';
157   var newApp2 = {
158     id: 'app_2',
159     name: newName,
160     iconURL: '',
161     autoLaunch: true,
162     isLoading: false,
163   };
164   extensions.KioskAppsOverlay.updateApp(newApp2);
166   assertEquals('app_2', appItems[1].data.id);
167   expectEquals(newName, appItems[1].data.name, newName);
168   expectEquals(newName, appItems[1].name.textContent);
169   expectFalse(appItems[1].icon.classList.contains('spinner'));
170   expectTrue(appItems[1].autoLaunch);
173 // Verify that showError makes error banner visible.
174 TEST_F('KioskAppSettingsWebUITest', 'testShowError', function() {
175   extensions.KioskAppsOverlay.showError('A bad app');
176   expectTrue($('kiosk-apps-error-banner').classList.contains('visible'));
179 // Verify that checking disable bailout checkbox brings up confirmation UI and
180 // the check only remains when the confirmation UI is acknowledged.
181 TEST_F('KioskAppSettingsWebUITest', 'testCheckDisableBailout', function() {
182   var checkbox = $('kiosk-disable-bailout-shortcut');
183   var confirmOverlay = $('kiosk-disable-bailout-confirm-overlay');
184   expectFalse(confirmOverlay.classList.contains('showing'));
186   // Un-checking the box does not trigger confirmation.
187   checkbox.checked = false;
188   cr.dispatchSimpleEvent(checkbox, 'change');
189   expectFalse(confirmOverlay.classList.contains('showing'));
191   // Checking the box trigger confirmation.
192   checkbox.checked = true;
193   cr.dispatchSimpleEvent(checkbox, 'change');
194   expectTrue(confirmOverlay.classList.contains('showing'));
196   // Confirm it and the check remains.
197   cr.dispatchSimpleEvent($('kiosk-disable-bailout-confirm-button'), 'click');
198   expectTrue(checkbox.checked);
199   expectFalse(confirmOverlay.classList.contains('showing'));
201   // And canceling resets the check.
202   checkbox.checked = true;
203   cr.dispatchSimpleEvent(checkbox, 'change');
204   expectTrue(confirmOverlay.classList.contains('showing'));
205   cr.dispatchSimpleEvent($('kiosk-disable-bailout-cancel-button'), 'click');
206   expectFalse(checkbox.checked);
207   expectFalse(confirmOverlay.classList.contains('showing'));
210 // Verify that disable bailout checkbox is hidden without kiosk auto launch.
211 TEST_F('KioskAppSettingsWebUITest', 'testHideDisableBailout', function() {
212   var checkbox = $('kiosk-disable-bailout-shortcut');
213   var kioskEnabledSettings = {
214     kioskEnabled: true,
215     autoLaunchEnabled: true
216   };
217   extensions.KioskAppsOverlay.enableKiosk(kioskEnabledSettings);
218   expectFalse(checkbox.parentNode.hidden);
220   kioskEnabledSettings.autoLaunchEnabled = false;
221   extensions.KioskAppsOverlay.enableKiosk(kioskEnabledSettings);
222   expectTrue(checkbox.parentNode.hidden);
225 // Verify that disable bailout checkbox is disabled with no auto launch app.
226 TEST_F('KioskAppSettingsWebUITest', 'testAllowDisableBailout', function() {
227   var checkbox = $('kiosk-disable-bailout-shortcut');
229   this.settings_.hasAutoLaunchApp = false;
230   extensions.KioskAppsOverlay.setSettings(this.settings_);
231   expectTrue(checkbox.disabled);
233   this.settings_.hasAutoLaunchApp = true;
234   extensions.KioskAppsOverlay.setSettings(this.settings_);
235   expectFalse(checkbox.disabled);