blob: 189d0e480927f5d889293bfb1931a21d0016b347 [file] [log] [blame]
// Copyright 2016 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.
cr.define('user_manager.import_supervised_user_tests', function() {
function registerTests() {
suite('ImportSupervisedUserTests', function() {
/** @type {?ImportSupervisedUserElement} */
let importElement = null;
/**
* @param {!HTMLElement} element
* @return {string}
*/
const getProfileName = function(element) {
return element.querySelector('.profile-name').textContent.trim();
};
setup(function() {
importElement = document.createElement('import-supervised-user');
document.body.appendChild(importElement);
// Make sure DOM is up to date.
Polymer.dom.flush();
});
teardown(function(done) {
importElement.remove();
// Allow asynchronous tasks to finish.
setTimeout(done);
});
test('Dialog does not show if no signed-in user is provided', function() {
// The dialog is initially not visible.
assertFalse(importElement.$.dialog.open);
importElement.show(undefined, []);
Polymer.dom.flush();
// The dialog is still not visible.
assertFalse(importElement.$.dialog.open);
});
test('Can import supervised user', function() {
return new Promise(function(resolve, reject) {
/** @type {!SignedInUser} */
const signedInUser = {username: 'username',
profilePath: 'path/to/profile'};
/** @type {!Array<!SupervisedUser>} */
const supervisedUsers = [{name: 'supervised user 1',
onCurrentDevice: true},
{name: 'supervised user 3',
onCurrentDevice: false},
{name: 'supervised user 2',
onCurrentDevice: false}];
// Expect an event to import the selected supervised user to be fired.
importElement.addEventListener('import', function(event) {
if (event.detail.signedInUser == signedInUser &&
event.detail.supervisedUser.name == 'supervised user 2') {
Polymer.dom.flush();
// The dialog is no longer visible.
assertFalse(importElement.$.dialog.open);
resolve();
}
});
// The dialog is initially not visible.
assertFalse(importElement.$.dialog.open);
importElement.show(signedInUser, supervisedUsers);
Polymer.dom.flush();
// The dialog becomes visible.
assertTrue(importElement.$.dialog.open);
// The correct message is displayed.
assertEquals(loadTimeData.getString('supervisedUserImportText'),
importElement.$$('#message').textContent.trim());
const selectorElement = importElement.$$('paper-listbox');
assertTrue(!!selectorElement);
// Supervised users are ordered correctly (Ones that are not on the
// current device appear first, then they are alphabetically order in
// ascending order).
const items = selectorElement.querySelectorAll('paper-item');
assertEquals(3, items.length);
assertEquals('supervised user 2', getProfileName(items[0]));
assertEquals('supervised user 3', getProfileName(items[1]));
assertEquals('supervised user 1', getProfileName(items[2]));
// Supervised users that are on this device are disabled.
const selectableItems =
selectorElement.querySelectorAll('[disabled]');
assertEquals(1, selectableItems.length);
assertEquals('supervised user 1', getProfileName(selectableItems[0]));
// No user is initially selected.
assertEquals(-1, selectorElement.selected);
// The import button is disabled if no supervised user is selected.
assertTrue(importElement.$$('#import').disabled);
// Simulate selecting the third user which is disabled.
MockInteractions.tap(items[2]);
// Confirm no user is selected.
assertEquals(-1, selectorElement.selected);
// Simulate selecting the first user.
MockInteractions.tap(items[0]);
// Confirm the user is selected.
assertEquals(0, selectorElement.selected);
// The import button becomes enabled once a user is selected.
assertFalse(importElement.$$('#import').disabled);
// Simulate clicking 'Import'.
MockInteractions.tap(importElement.$$('#import'));
});
});
});
}
return {
registerTests: registerTests,
};
});