blob: 55436815f1606d0ca349d15093c8d23356ac4f3e [file] [log] [blame]
// Copyright 2018 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.
/**
* @fileoverview
* Suite of tests for settings-multidevice-feature-toggle element. For
* simplicity, we provide the toggle with a real feature (i.e. messages) as a
* stand-in for a generic feature.
*/
suite('Multidevice', () => {
/** @type {?SettingsMultideviceFeatureToggleElement} */
let featureToggle = null;
/** @type {?CrToggleElement} */
let crToggle = null;
/**
* Sets the state of the feature shown in the toggle (i.e. Messages). Note
* that in order to trigger featureToggle's bindings to update, we set its
* pageContentData to a new object as the actual UI does.
* @param {?settings.MultiDeviceFeatureState} newMessagesState. New value for
* featureToggle.pageContentData.messagesState.
*/
function setMessagesState(newMessagesState) {
featureToggle.pageContentData = Object.assign(
{}, featureToggle.pageContentData, {messagesState: newMessagesState});
Polymer.dom.flush();
}
/**
* Sets the state of the feature suite. Note that in order to trigger
* featureToggle's bindings to update, we set its pageContentData to a new
* object as the actual UI does.
* @param {?settings.MultiDeviceFeatureState} newSuiteState. New value for
* featureToggle.pageContentData.betterTogetherState.
*/
function setSuiteState(newSuiteState) {
featureToggle.pageContentData = Object.assign(
{}, featureToggle.pageContentData,
{betterTogetherState: newSuiteState});
Polymer.dom.flush();
}
setup(() => {
PolymerTest.clearBody();
featureToggle =
document.createElement('settings-multidevice-feature-toggle');
featureToggle.feature = settings.MultiDeviceFeature.MESSAGES;
// Initially toggle will be unchecked but not disabled. Note that the word
// "disabled" is ambiguous for feature toggles because it can refer to the
// feature or the cr-toggle property/attribute. DISABLED_BY_USER refers to
// the former so it unchecks but does not functionally disable the toggle.
featureToggle.pageContentData = {
betterTogetherState: settings.MultiDeviceFeatureState.ENABLED_BY_USER,
messagesState: settings.MultiDeviceFeatureState.DISABLED_BY_USER,
};
document.body.appendChild(featureToggle);
Polymer.dom.flush();
crToggle = featureToggle.$.toggle;
assertFalse(featureToggle.checked_);
assertFalse(crToggle.checked);
assertFalse(crToggle.disabled);
});
test('checked property can be set by feature state', () => {
setMessagesState(settings.MultiDeviceFeatureState.ENABLED_BY_USER);
assertTrue(featureToggle.checked_);
assertTrue(crToggle.checked);
setMessagesState(settings.MultiDeviceFeatureState.DISABLED_BY_USER);
assertFalse(featureToggle.checked_);
assertFalse(crToggle.checked);
});
test('disabled property can be set by feature state', () => {
setMessagesState(settings.MultiDeviceFeatureState.PROHIBITED_BY_POLICY);
assertTrue(crToggle.disabled);
setMessagesState(settings.MultiDeviceFeatureState.DISABLED_BY_USER);
assertFalse(crToggle.disabled);
});
test('disabled and checked properties update simultaneously', () => {
setMessagesState(settings.MultiDeviceFeatureState.ENABLED_BY_USER);
assertTrue(featureToggle.checked_);
assertTrue(crToggle.checked);
assertFalse(crToggle.disabled);
setMessagesState(settings.MultiDeviceFeatureState.PROHIBITED_BY_POLICY);
assertFalse(featureToggle.checked_);
assertFalse(crToggle.checked);
assertTrue(crToggle.disabled);
setMessagesState(settings.MultiDeviceFeatureState.DISABLED_BY_USER);
assertFalse(featureToggle.checked_);
assertFalse(crToggle.checked);
assertFalse(crToggle.disabled);
});
test('disabled property can be set by suite pref', () => {
setSuiteState(settings.MultiDeviceFeatureState.DISABLED_BY_USER);
Polymer.dom.flush();
assertTrue(crToggle.disabled);
setSuiteState(settings.MultiDeviceFeatureState.ENABLED_BY_USER);
Polymer.dom.flush();
assertFalse(crToggle.disabled);
});
test('checked property is unaffected by suite pref', () => {
setMessagesState(settings.MultiDeviceFeatureState.ENABLED_BY_USER);
assertTrue(featureToggle.checked_);
assertTrue(crToggle.checked);
assertFalse(crToggle.disabled);
setSuiteState(settings.MultiDeviceFeatureState.DISABLED_BY_USER);
Polymer.dom.flush();
assertTrue(featureToggle.checked_);
assertTrue(crToggle.checked);
assertTrue(crToggle.disabled);
});
test('clicking toggle does not change checked property', () => {
const preClickCrToggleChecked = crToggle.checked;
crToggle.click();
Polymer.dom.flush();
assertEquals(crToggle.checked, preClickCrToggleChecked);
});
});