| // 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. |
| |
| /** @fileoverview Suite of tests for Easy Unlock within People section. */ |
| |
| GEN_INCLUDE(['settings_page_browsertest.js']); |
| |
| /** |
| * @constructor |
| * @extends {SettingsPageBrowserTest} |
| */ |
| function SettingsEasyUnlockBrowserTest() {} |
| |
| SettingsEasyUnlockBrowserTest.prototype = { |
| __proto__: SettingsPageBrowserTest.prototype, |
| |
| /** @override */ |
| extraLibraries: PolymerTest.getLibraries(ROOT_PATH).concat([ |
| '../test_browser_proxy.js', |
| ]), |
| }; |
| |
| // Times out on debug builders and may time out on memory bots because |
| // the Settings page can take several seconds to load in a Release build |
| // and several times that in a Debug build. See https://crbug.com/558434 |
| // and http://crbug.com/711256. |
| |
| // Runs easy unlock tests. |
| TEST_F('SettingsEasyUnlockBrowserTest', 'DISABLED_EasyUnlock', function() { |
| /** |
| * A test version of EasyUnlockBrowserProxy. Provides helper methods |
| * for allowing tests to know when a method was called, as well as |
| * specifying mock responses. |
| * |
| * @implements {settings.EasyUnlockBrowserProxy} |
| */ |
| class TestEasyUnlockBrowserProxy extends TestBrowserProxy { |
| constructor() { |
| super([ |
| 'getEnabledStatus', |
| 'getTurnOffFlowStatus', |
| 'startTurnOffFlow', |
| 'cancelTurnOffFlow', |
| ]); |
| |
| /** @private {boolean} */ |
| this.isEnabled_ = false; |
| } |
| |
| /** |
| * @param {boolean} easyUnlockEnabled |
| */ |
| setEnabledStatus(easyUnlockEnabled) { |
| this.isEnabled_ = easyUnlockEnabled; |
| } |
| |
| /** @override */ |
| getEnabledStatus() { |
| this.methodCalled('getEnabledStatus'); |
| return Promise.resolve(this.isEnabled_); |
| } |
| |
| /** @override */ |
| getTurnOffFlowStatus() { |
| this.methodCalled('getTurnOffFlowStatus'); |
| return Promise.resolve('idle'); |
| } |
| |
| /** @override */ |
| startTurnOffFlow() { |
| this.methodCalled('startTurnOffFlow'); |
| } |
| |
| /** @override */ |
| cancelTurnOffFlow() { |
| this.methodCalled('cancelTurnOffFlow'); |
| } |
| } |
| |
| /** @type {?SettingsLockScreenElement} */ |
| let lockScreen = null; |
| |
| /** @type {?TestEasyUnlockBrowserProxy} */ |
| let browserProxy = null; |
| |
| suite('SettingsEasyUnlock', function() { |
| suiteSetup(function() { |
| Polymer.dom.flush(); |
| |
| // These overrides are necessary for this test to function on ChromeOS |
| // bots that do not have Bluetooth (don't actually support Easy Unlock). |
| loadTimeData.overrideValues({ |
| easyUnlockAllowed: true, |
| |
| easyUnlockSectionTitle: '', |
| easyUnlockLearnMoreURL: '', |
| easyUnlockSetupIntro: '', |
| |
| easyUnlockDescription: '', |
| easyUnlockTurnOffTitle: '', |
| easyUnlockTurnOffDescription: '', |
| easyUnlockTurnOffButton: '', |
| }); |
| }); |
| |
| setup(function() { |
| browserProxy = new TestEasyUnlockBrowserProxy(); |
| settings.EasyUnlockBrowserProxyImpl.instance_ = browserProxy; |
| |
| PolymerTest.clearBody(); |
| lockScreen = document.createElement('settings-lock-screen'); |
| }); |
| |
| test('turn off dialog', function() { |
| browserProxy.setEnabledStatus(true); |
| document.body.appendChild(lockScreen); |
| |
| let turnOffDialog = null; |
| |
| return browserProxy.whenCalled('getEnabledStatus') |
| .then(function() { |
| assertTrue(lockScreen.easyUnlockAllowed_); |
| expectTrue(lockScreen.easyUnlockEnabled_); |
| |
| Polymer.dom.flush(); |
| |
| const turnOffButton = lockScreen.$$('#easyUnlockTurnOff'); |
| assertTrue(!!turnOffButton); |
| expectFalse(turnOffButton.hidden); |
| |
| turnOffButton.click(); |
| return browserProxy.whenCalled('getTurnOffFlowStatus'); |
| }) |
| .then(function() { |
| Polymer.dom.flush(); |
| |
| turnOffDialog = lockScreen.$$('#easyUnlockTurnOffDialog'); |
| assertTrue(!!turnOffDialog); |
| |
| // Verify that elements on the turn off dialog are hidden or active |
| // according to the easy unlock turn off status. |
| const turnOffDialogButtonContainer = |
| turnOffDialog.$$('[slot=button-container]'); |
| const turnOffDialogButtonSpinner = |
| turnOffDialog.$$('paper-spinner-lite'); |
| const turnOffDialogConfirmButton = turnOffDialog.$$('#turnOff'); |
| const turnOffDialogCancelButton = |
| turnOffDialog.$$('.cancel-button'); |
| assertTrue(!!turnOffDialogButtonContainer); |
| assertTrue(!!turnOffDialogButtonSpinner); |
| assertTrue(!!turnOffDialogConfirmButton); |
| assertTrue(!!turnOffDialogCancelButton); |
| |
| cr.webUIListenerCallback( |
| 'easy-unlock-turn-off-flow-status', 'offline'); |
| expectTrue(turnOffDialogButtonContainer.hidden); |
| expectFalse(turnOffDialogButtonSpinner.active); |
| |
| cr.webUIListenerCallback( |
| 'easy-unlock-turn-off-flow-status', 'pending'); |
| expectFalse(turnOffDialogButtonContainer.hidden); |
| expectTrue(turnOffDialogButtonSpinner.active); |
| |
| cr.webUIListenerCallback( |
| 'easy-unlock-turn-off-flow-status', 'server-error'); |
| expectFalse(turnOffDialogButtonContainer.hidden); |
| expectTrue(turnOffDialogCancelButton.hidden); |
| |
| cr.webUIListenerCallback( |
| 'easy-unlock-turn-off-flow-status', 'idle'); |
| expectFalse(turnOffDialogConfirmButton.hidden); |
| |
| turnOffDialogConfirmButton.click(); |
| |
| return browserProxy.whenCalled('startTurnOffFlow'); |
| }) |
| .then(function() { |
| // To signal successful turnoff, the enabled status is broadcast |
| // as false. At that point, the dialog should close and cancel |
| // any in-progress turnoff flow. The cancellation should be |
| // a no-op assuming the turnoff originated from this tab. |
| cr.webUIListenerCallback('easy-unlock-enabled-status', false); |
| return browserProxy.whenCalled('cancelTurnOffFlow'); |
| }) |
| .then(function() { |
| Polymer.dom.flush(); |
| expectFalse(turnOffDialog.$.dialog.open); |
| }); |
| }); |
| }); |
| |
| // Run all registered tests. |
| mocha.run(); |
| }); |