| // 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. |
| |
| /** @type {?SettingsAndroidAppsPageElement} */ |
| let androidAppsPage = null; |
| |
| /** @type {?TestAndroidAppsBrowserProxy} */ |
| let androidAppsBrowserProxy = null; |
| |
| const setAndroidAppsState = function(playStoreEnabled, settingsAppAvailable) { |
| const appsInfo = { |
| playStoreEnabled: playStoreEnabled, |
| settingsAppAvailable: settingsAppAvailable, |
| }; |
| androidAppsPage.androidAppsInfo = appsInfo; |
| Polymer.dom.flush(); |
| }; |
| |
| suite('AndroidAppsPageTests', function() { |
| setup(function() { |
| androidAppsBrowserProxy = new TestAndroidAppsBrowserProxy(); |
| settings.AndroidAppsBrowserProxyImpl.instance_ = androidAppsBrowserProxy; |
| PolymerTest.clearBody(); |
| androidAppsPage = document.createElement('settings-android-apps-page'); |
| document.body.appendChild(androidAppsPage); |
| testing.Test.disableAnimationsAndTransitions(); |
| }); |
| |
| teardown(function() { |
| androidAppsPage.remove(); |
| }); |
| |
| teardown(function() { |
| androidAppsPage.remove(); |
| }); |
| |
| suite('Main Page', function() { |
| setup(function() { |
| androidAppsPage.havePlayStoreApp = true; |
| androidAppsPage.prefs = {arc: {enabled: {value: false}}}; |
| setAndroidAppsState(false, false); |
| }); |
| |
| test('Enable', function() { |
| const button = androidAppsPage.$$('#enable'); |
| assertTrue(!!button); |
| assertFalse(!!androidAppsPage.$$('.subpage-arrow')); |
| |
| MockInteractions.tap(button); |
| Polymer.dom.flush(); |
| assertTrue(androidAppsPage.prefs.arc.enabled.value); |
| |
| setAndroidAppsState(true, false); |
| assertTrue(!!androidAppsPage.$$('.subpage-arrow')); |
| }); |
| }); |
| |
| suite('SubPage', function() { |
| let subpage; |
| |
| function flushAsync() { |
| Polymer.dom.flush(); |
| return new Promise(resolve => { |
| androidAppsPage.async(resolve); |
| }); |
| } |
| |
| /** |
| * Returns a new promise that resolves after a window 'popstate' event. |
| * @return {!Promise} |
| */ |
| function whenPopState() { |
| return new Promise(function(resolve) { |
| window.addEventListener('popstate', function callback() { |
| window.removeEventListener('popstate', callback); |
| resolve(); |
| }); |
| }); |
| } |
| |
| setup(function() { |
| androidAppsPage.havePlayStoreApp = true; |
| androidAppsPage.prefs = {arc: {enabled: {value: true}}}; |
| setAndroidAppsState(true, false); |
| settings.navigateTo(settings.routes.ANDROID_APPS); |
| MockInteractions.tap(androidAppsPage.$$('#android-apps')); |
| return flushAsync().then(() => { |
| subpage = androidAppsPage.$$('settings-android-apps-subpage'); |
| assertTrue(!!subpage); |
| }); |
| }); |
| |
| test('Sanity', function() { |
| assertTrue(!!subpage.$$('#remove')); |
| assertTrue(!subpage.$$('settings-android-settings-element')); |
| }); |
| |
| test('ManageAppsUpdate', function() { |
| assertTrue(!subpage.$$('settings-android-settings-element')); |
| setAndroidAppsState(true, true); |
| assertTrue(!!subpage.$$('settings-android-settings-element')); |
| assertTrue(!!subpage.$$('settings-android-settings-element'). |
| $$('#manageApps')); |
| setAndroidAppsState(true, false); |
| assertTrue(!subpage.$$('settings-android-settings-element')); |
| }); |
| |
| test('ManageAppsOpenRequest', function() { |
| setAndroidAppsState(true, true); |
| const button = subpage.$$('settings-android-settings-element'). |
| $$('#manageApps'); |
| assertTrue(!!button); |
| const promise = androidAppsBrowserProxy.whenCalled( |
| 'showAndroidAppsSettings'); |
| // MockInteractions.tap does not work here due style is not updated. |
| button.click(); |
| Polymer.dom.flush(); |
| return promise; |
| }); |
| |
| test('Disable', function() { |
| const dialog = subpage.$$('#confirmDisableDialog'); |
| assertTrue(!!dialog); |
| assertFalse(dialog.open); |
| |
| const remove = subpage.$$('#remove'); |
| assertTrue(!!remove); |
| |
| subpage.onRemoveTap_(); |
| Polymer.dom.flush(); |
| assertTrue(dialog.open); |
| dialog.close(); |
| }); |
| |
| test('HideOnDisable', function() { |
| assertEquals( |
| settings.getCurrentRoute(), settings.routes.ANDROID_APPS_DETAILS); |
| setAndroidAppsState(false, false); |
| return whenPopState().then(function() { |
| assertEquals(settings.getCurrentRoute(), settings.routes.ANDROID_APPS); |
| }); |
| }); |
| }); |
| |
| suite('Enforced', function() { |
| let subpage; |
| |
| setup(function() { |
| androidAppsPage.havePlayStoreApp = true; |
| androidAppsPage.prefs = { |
| arc: { |
| enabled: { |
| value: true, |
| enforcement: chrome.settingsPrivate.Enforcement.ENFORCED |
| } |
| } |
| }; |
| setAndroidAppsState(true, true); |
| MockInteractions.tap(androidAppsPage.$$('#android-apps')); |
| Polymer.dom.flush(); |
| subpage = androidAppsPage.$$('settings-android-apps-subpage'); |
| assertTrue(!!subpage); |
| }); |
| |
| test('Sanity', function() { |
| Polymer.dom.flush(); |
| assertFalse(!!subpage.$$('#remove')); |
| assertTrue(!!subpage.$$('settings-android-settings-element')); |
| assertTrue(!!subpage.$$('settings-android-settings-element'). |
| $$('#manageApps')); |
| }); |
| }); |
| |
| suite('NoPlayStore', function() { |
| setup(function() { |
| androidAppsPage.havePlayStoreApp = false; |
| androidAppsPage.prefs = {arc: {enabled: {value: true}}}; |
| setAndroidAppsState(true, true); |
| }); |
| |
| test('Sanity', function() { |
| assertTrue(!!androidAppsPage.$$('settings-android-settings-element')); |
| assertTrue(!!androidAppsPage.$$('settings-android-settings-element'). |
| $$("#manageApps")); |
| }); |
| |
| test('ManageAppsOpenRequest', function() { |
| const button = androidAppsPage.$$('settings-android-settings-element'). |
| $$('#manageApps'); |
| assertTrue(!!button); |
| const promise = androidAppsBrowserProxy.whenCalled( |
| 'showAndroidAppsSettings'); |
| // MockInteractions.tap does not work here due style is not updated. |
| button.click(); |
| Polymer.dom.flush(); |
| return promise; |
| }); |
| }); |
| |
| }); |