Web   ·   Wiki   ·   Activities   ·   Blog   ·   Lists   ·   Chat   ·   Meeting   ·   Bugs   ·   Git   ·   Translate   ·   Archive   ·   People   ·   Donate
summaryrefslogtreecommitdiffstats
path: root/apps/system/test/unit/update_manager_test.js
diff options
context:
space:
mode:
Diffstat (limited to 'apps/system/test/unit/update_manager_test.js')
-rw-r--r--apps/system/test/unit/update_manager_test.js1449
1 files changed, 0 insertions, 1449 deletions
diff --git a/apps/system/test/unit/update_manager_test.js b/apps/system/test/unit/update_manager_test.js
deleted file mode 100644
index 2b2ef4c..0000000
--- a/apps/system/test/unit/update_manager_test.js
+++ /dev/null
@@ -1,1449 +0,0 @@
-'use strict';
-
-requireApp('system/js/update_manager.js');
-
-requireApp('system/test/unit/mock_app.js');
-requireApp('system/test/unit/mock_updatable.js');
-requireApp('system/test/unit/mock_apps_mgmt.js');
-requireApp('system/test/unit/mock_custom_dialog.js');
-requireApp('system/test/unit/mock_utility_tray.js');
-requireApp('system/test/unit/mock_system_banner.js');
-requireApp('system/test/unit/mock_chrome_event.js');
-requireApp('system/test/unit/mock_settings_listener.js');
-requireApp('system/test/unit/mock_statusbar.js');
-requireApp('system/test/unit/mock_notification_screen.js');
-requireApp('system/test/unit/mock_navigator_settings.js');
-requireApp('system/test/unit/mock_navigator_wake_lock.js');
-requireApp('system/test/unit/mock_navigator_moz_mobile_connection.js');
-requireApp('system/test/unit/mock_l10n.js');
-requireApp('system/test/unit/mock_asyncStorage.js');
-
-requireApp('system/test/unit/mocks_helper.js');
-
-var mocksForUpdateManager = [
- 'StatusBar',
- 'SystemBanner',
- 'NotificationScreen',
- 'UtilityTray',
- 'CustomDialog',
- 'SystemUpdatable',
- 'AppUpdatable',
- 'SettingsListener',
- 'asyncStorage'
-];
-
-mocksForUpdateManager.forEach(function(mockName) {
- if (! window[mockName]) {
- window[mockName] = null;
- }
-});
-
-suite('system/UpdateManager', function() {
- var realL10n;
- var realWifiManager;
- var realRequestWakeLock;
- var realNavigatorSettings;
- var realDispatchEvent;
-
- var apps;
- var updatableApps;
- var uAppWithDownloadAvailable;
- var appWithDownloadAvailable;
- var fakeNode;
- var fakeToaster;
- var fakeDialog;
- var fakeWarning;
-
- var tinyTimeout = 10;
- var lastDispatchedEvent = null;
-
- var mocksHelper;
-
- suiteSetup(function() {
- realNavigatorSettings = navigator.mozSettings;
- navigator.mozSettings = MockNavigatorSettings;
-
- realL10n = navigator.mozL10n;
- navigator.mozL10n = MockL10n;
-
- realWifiManager = navigator.mozWifiManager;
- navigator.mozWifiManager = {
- connection: {
- status: 'connected'
- }
- };
-
- realRequestWakeLock = navigator.requestWakeLock;
- navigator.requestWakeLock = MockNavigatorWakeLock.requestWakeLock;
-
- realDispatchEvent = UpdateManager._dispatchEvent;
- UpdateManager._dispatchEvent = function fakeDispatch(type, value) {
- lastDispatchedEvent = {
- type: type,
- value: value
- };
- };
-
- mocksHelper = new MocksHelper(mocksForUpdateManager);
- mocksHelper.suiteSetup();
-
- UpdateManager.NOTIFICATION_BUFFERING_TIMEOUT = 0;
- UpdateManager.TOASTER_TIMEOUT = 0;
- });
-
- suiteTeardown(function() {
- navigator.mozSettings = realNavigatorSettings;
- realNavigatorSettings = null;
-
- navigator.mozL10n = realL10n;
- navigator.mozWifiManager = realWifiManager;
- navigator.requestWakeLock = realRequestWakeLock;
- realRequestWakeLock = null;
-
- UpdateManager._dispatchEvent = realDispatchEvent;
-
- mocksHelper.suiteTeardown();
- });
-
- setup(function() {
- UpdateManager._mgmt = MockAppsMgmt;
-
- apps = [new MockApp(), new MockApp(), new MockApp()];
- updatableApps = apps.map(function(app) {
- return new AppUpdatable(app);
- });
- MockAppsMgmt.mApps = apps;
-
- uAppWithDownloadAvailable = updatableApps[2];
- appWithDownloadAvailable = apps[2];
- appWithDownloadAvailable.downloadAvailable = true;
-
- fakeNode = document.createElement('div');
- fakeNode.id = 'update-manager-container';
- fakeNode.innerHTML = [
- '<div class="icon">',
- '</div>',
- '<div class="activity">',
- '</div>',
- '<div class="message">',
- '</div>'
- ].join('');
-
- fakeToaster = document.createElement('div');
- fakeToaster.id = 'update-manager-toaster';
- fakeToaster.innerHTML = [
- '<div class="icon">',
- '</div>',
- '<div class="message">',
- '</div>'
- ].join('');
-
- fakeDialog = document.createElement('form');
- fakeDialog.id = 'updates-download-dialog';
- fakeDialog.innerHTML = [
- '<section>',
- '<h1>',
- 'Updates',
- '</h1>',
- '<ul>',
- '</ul>',
- '<menu>',
- '<button id="updates-later-button" type="reset">',
- 'Later',
- '</button>',
- '<button id="updates-download-button" type="submit">',
- 'Download',
- '</button>',
- '</menu>',
- '</section>'
- ].join('');
-
- fakeWarning = document.createElement('form');
- fakeWarning.id = 'updates-viaDataConnection-dialog';
- fakeWarning.innerHTML = [
- '<section>',
- '<h1>',
- 'Updates',
- '</h1>',
- '<p>',
- '</p>',
- '<menu>',
- '<button id="updates-viaDataConnection-notnow-button" type="reset">',
- 'Not Now',
- '</button>',
- '<button id="updates-viaDataConnection-download-button" type="submit">',
- 'Download',
- '</button>',
- '</menu>',
- '</section>'
- ].join('');
-
- document.body.appendChild(fakeNode);
- document.body.appendChild(fakeToaster);
- document.body.appendChild(fakeDialog);
- document.body.appendChild(fakeWarning);
-
- mocksHelper.setup();
- });
-
- teardown(function(done) {
- // We wait for the nextTick in order to let the UpdateManger's
- // timeouts finish (they are all set to 0)
- setTimeout(function() {
- UpdateManager.updatableApps = [];
- UpdateManager.systemUpdatable = null;
- UpdateManager.updatesQueue = [];
- UpdateManager.downloadsQueue = [];
- UpdateManager._downloading = false;
- UpdateManager._uncompressing = false;
- UpdateManager.container = null;
- UpdateManager.message = null;
- UpdateManager.toaster = null;
- UpdateManager.toasterMessage = null;
- UpdateManager.laterButton = null;
- UpdateManager.downloadButton = null;
- UpdateManager.downloadDialog = null;
- UpdateManager.downloadDialogTitle = null;
- UpdateManager.downloadDialogList = null;
- UpdateManager.lastUpdatesAvailable = 0;
-
- MockAppsMgmt.mTeardown();
-
- mocksHelper.teardown();
-
- fakeNode.parentNode.removeChild(fakeNode);
- fakeToaster.parentNode.removeChild(fakeToaster);
- fakeDialog.parentNode.removeChild(fakeDialog);
-
- lastDispatchedEvent = null;
- MockNavigatorWakeLock.mTeardown();
- MockNavigatorSettings.mTeardown();
-
- done();
- });
- });
-
- suite('init', function() {
- test('should get all applications', function(done) {
- MockAppsMgmt.mNext = function() {
- done();
- };
- UpdateManager.init();
- });
-
- test('should create AppUpdatable on init', function(done) {
- MockAppUpdatable.mTeardown();
-
- MockAppsMgmt.mNext = function() {
- assert.equal(MockAppUpdatable.mCount, apps.length);
- done();
- };
- UpdateManager.init();
- });
-
- test('should bind dom elements', function() {
- UpdateManager.init();
- assert.equal('update-manager-container', UpdateManager.container.id);
- assert.equal('message', UpdateManager.message.className);
-
- assert.equal('update-manager-toaster', UpdateManager.toaster.id);
- assert.equal('message', UpdateManager.toasterMessage.className);
-
- assert.equal('updates-later-button', UpdateManager.laterButton.id);
- assert.equal('updates-download-button', UpdateManager.downloadButton.id);
- assert.equal('updates-download-dialog', UpdateManager.downloadDialog.id);
- assert.equal('updates-viaDataConnection-dialog',
- UpdateManager.downloadViaDataConnectionDialog.id);
- assert.equal('updates-viaDataConnection-notnow-button',
- UpdateManager.notnowButton.id);
- assert.equal('updates-viaDataConnection-download-button',
- UpdateManager.downloadViaDataConnectionButton.id);
- assert.equal('H1', UpdateManager.downloadDialogTitle.tagName);
- assert.equal('UL', UpdateManager.downloadDialogList.tagName);
- });
-
- test('should bind to the click event', function() {
- UpdateManager.init();
- assert.equal(UpdateManager.containerClicked.name,
- UpdateManager.container.onclick.name);
-
- assert.equal(UpdateManager.requestDownloads.name,
- UpdateManager.downloadButton.onclick.name);
-
- assert.equal(UpdateManager.cancelPrompt.name,
- UpdateManager.laterButton.onclick.name);
-
- assert.equal(UpdateManager.cancelDataConnectionUpdatesPrompt.name,
- UpdateManager.notnowButton.onclick.name);
-
- assert.equal(UpdateManager.requestDownloads.name,
- UpdateManager.downloadViaDataConnectionButton.onclick.name);
- });
- });
-
- suite('events', function() {
- suite('app install', function() {
- var installedApp;
-
- setup(function() {
- MockAppUpdatable.mTeardown();
-
- UpdateManager.init();
-
- installedApp = new MockApp();
- installedApp.downloadAvailable = true;
- MockAppsMgmt.mTriggerOninstall(installedApp);
- });
-
- test('should instantiate an updatable app', function() {
- assert.equal(MockAppUpdatable.mCount, 1);
- });
- });
-
- suite('app uninstall', function() {
- var partialApp;
-
- setup(function() {
- UpdateManager.init();
- UpdateManager.updatableApps = updatableApps;
- UpdateManager.addToUpdatesQueue(uAppWithDownloadAvailable);
-
- partialApp = {
- origin: appWithDownloadAvailable.origin,
- manifestURL: appWithDownloadAvailable.manifestURL
- };
- });
-
- test('should remove the updatable app', function() {
- var initialLength = UpdateManager.updatableApps.length;
- MockAppsMgmt.mTriggerOnuninstall(partialApp);
- assert.equal(initialLength - 1, UpdateManager.updatableApps.length);
- });
-
- test('should remove from the update queue', function() {
- var initialLength = UpdateManager.updatesQueue.length;
- MockAppsMgmt.mTriggerOnuninstall(partialApp);
- assert.equal(initialLength - 1, UpdateManager.updatesQueue.length);
- });
-
- test('should remove from the update queue even if no downloadavailable',
- function() {
- uAppWithDownloadAvailable.app.downloadAvailable = false;
- var initialLength = UpdateManager.updatesQueue.length;
- MockAppsMgmt.mTriggerOnuninstall(partialApp);
- assert.equal(initialLength - 1, UpdateManager.updatesQueue.length);
- });
-
- test('should call uninit on the updatable', function() {
- var lastIndex = UpdateManager.updatesQueue.length - 1;
- var updatableApp = UpdateManager.updatesQueue[lastIndex];
- MockAppsMgmt.mTriggerOnuninstall(partialApp);
- assert.isTrue(updatableApp.mUninitCalled);
- });
- });
-
- suite('system update available', function() {
- var event;
-
- setup(function() {
- UpdateManager.init();
- event = new MockChromeEvent({
- type: 'update-available',
- size: 42
- });
- UpdateManager.handleEvent(event);
- });
-
- test('should add a system updatable to the updates', function() {
- var lastIndex = UpdateManager.updatesQueue.length - 1;
- assert.equal(undefined, UpdateManager.updatesQueue[lastIndex].app);
- });
-
- test('should init the updatable with the download size', function() {
- var lastIndex = UpdateManager.updatesQueue.length - 1;
- assert.equal(42, UpdateManager.updatesQueue[lastIndex].size);
- });
-
- test('should not add or instanciate a system updatable if there is one',
- function() {
- var initialLength = UpdateManager.updatesQueue.length;
-
- UpdateManager.handleEvent(event);
-
- assert.equal(UpdateManager.updatesQueue.length, initialLength);
- assert.equal(MockSystemUpdatable.mInstancesCount, 1);
- });
-
- test('should remember that update is available', function() {
- assert.isTrue(UpdateManager.systemUpdatable.mKnownUpdate);
- });
- });
-
- suite('no system update available', function() {
- setup(function() {
- UpdateManager.init();
- });
-
- test('should not remember about the update', function() {
- assert.isUndefined(UpdateManager.systemUpdatable.mKnownUpdate);
- });
- });
-
- });
-
- suite('UI', function() {
- setup(function() {
- MockAppsMgmt.mApps = [];
- UpdateManager.init();
- UpdateManager.updatableApps = updatableApps;
- });
-
- suite('downloading state', function() {
- test('should add the css class if downloading', function() {
- UpdateManager._downloading = true;
- UpdateManager.render();
- var css = UpdateManager.container.classList;
- assert.isTrue(css.contains('downloading'));
- });
-
- test('should remove the css class if not downloading', function() {
- UpdateManager._downloading = true;
- UpdateManager.render();
-
- UpdateManager._downloading = false;
- UpdateManager.render();
- var css = UpdateManager.container.classList;
- assert.isFalse(css.contains('downloading'));
- });
-
- test('should show the downloading progress if downloading', function() {
- UpdateManager._downloading = true;
- UpdateManager.render();
- assert.equal('downloadingUpdateMessage{"progress":"0.00 bytes"}',
- UpdateManager.message.textContent);
- });
-
- test('should not show the toaster if downloading', function(done) {
- UpdateManager.NOTIFICATION_BUFFERING_TIMEOUT = tinyTimeout;
- UpdateManager.TOASTER_TIMEOUT = tinyTimeout;
- UpdateManager._downloading = true;
- UpdateManager.addToUpdatesQueue(uAppWithDownloadAvailable);
-
- setTimeout(function() {
- var css = UpdateManager.toaster.classList;
- assert.isFalse(css.contains('displayed'));
- UpdateManager.NOTIFICATION_BUFFERING_TIMEOUT = 0;
- UpdateManager.TOASTER_TIMEOUT = 0;
- done();
- }, tinyTimeout * 1.5);
- });
-
- test('should show the available message if not downloading', function() {
- UpdateManager.updatesQueue = updatableApps;
- UpdateManager.render();
- assert.equal('updateAvailableInfo{"n":3}',
- UpdateManager.message.textContent);
- });
- });
-
- suite('progress display', function() {
- setup(function() {
- UpdateManager.updatesQueue = [uAppWithDownloadAvailable];
-
- var evt = document.createEvent('MouseEvents');
- evt.initEvent('click', true, true);
- UpdateManager.startDownloads(evt);
-
- UpdateManager.addToDownloadsQueue(uAppWithDownloadAvailable);
-
- UpdateManager.downloadProgressed(1234);
- });
-
- test('downloadedBytes should be reset by startDownloads', function() {
- var evt = document.createEvent('MouseEvents');
- evt.initEvent('click', true, true);
- UpdateManager.startDownloads(evt);
-
- assert.equal('downloadingUpdateMessage{"progress":"0.00 bytes"}',
- UpdateManager.message.textContent);
- });
-
- test('downloadedBytes should be reset when stopping the download',
- function() {
-
- UpdateManager.removeFromDownloadsQueue(uAppWithDownloadAvailable);
- UpdateManager.addToDownloadsQueue(uAppWithDownloadAvailable);
-
- assert.equal('downloadingUpdateMessage{"progress":"0.00 bytes"}',
- UpdateManager.message.textContent);
- });
-
- test('should increment the downloadedBytes', function() {
- UpdateManager.downloadProgressed(100);
- assert.equal('downloadingUpdateMessage{"progress":"1.30 kB"}',
- UpdateManager.message.textContent);
- });
-
- test('should not update if bytes <= 0', function() {
- UpdateManager.downloadProgressed(-100);
- assert.equal('downloadingUpdateMessage{"progress":"1.21 kB"}',
- UpdateManager.message.textContent);
- });
-
- test('should display the notification', function() {
- assert.isTrue(fakeNode.classList.contains('displayed'));
- });
-
- });
-
- suite('uncompress display', function() {
- var systemUpdatable;
-
- setup(function() {
- systemUpdatable = new MockSystemUpdatable();
- });
-
- suite('when we only have the system update', function() {
- setup(function() {
- UpdateManager.addToUpdatesQueue(systemUpdatable);
- UpdateManager.addToDownloadsQueue(systemUpdatable);
- UpdateManager.startedUncompressing();
- });
-
- test('should render in uncompressing mode', function() {
- assert.equal(UpdateManager.message.textContent,
- 'uncompressingMessage');
- });
- });
-
- suite('when we have various ongoing updates', function() {
- setup(function() {
- UpdateManager.addToUpdatableApps(uAppWithDownloadAvailable);
- UpdateManager.addToUpdatesQueue(uAppWithDownloadAvailable);
- UpdateManager.addToDownloadsQueue(uAppWithDownloadAvailable);
-
- UpdateManager.addToUpdatesQueue(systemUpdatable);
- UpdateManager.addToDownloadsQueue(systemUpdatable);
-
- UpdateManager.startedUncompressing();
- });
-
- test('should stay in downloading mode', function() {
- assert.include(UpdateManager.message.textContent,
- 'downloadingUpdateMessage');
- });
-
- suite('once the app updates are done', function() {
- setup(function() {
- UpdateManager.removeFromDownloadsQueue(uAppWithDownloadAvailable);
- UpdateManager.removeFromUpdatesQueue(uAppWithDownloadAvailable);
- });
-
- test('should render in uncompressing mode', function() {
- assert.equal(UpdateManager.message.textContent,
- 'uncompressingMessage');
- });
- });
- });
- });
-
- suite('container visibility', function() {
- suiteSetup(function() {
- UpdateManager.NOTIFICATION_BUFFERING_TIMEOUT = tinyTimeout;
- UpdateManager.TOASTER_TIMEOUT = tinyTimeout;
- });
-
- suiteTeardown(function() {
- UpdateManager.NOTIFICATION_BUFFERING_TIMEOUT = 0;
- UpdateManager.TOASTER_TIMEOUT = 0;
- });
-
- setup(function() {
- UpdateManager.addToUpdatesQueue(uAppWithDownloadAvailable);
- });
-
- teardown(function(done) {
- // wait for all actions to happen in UpdateManager before reseting
- setTimeout(function() {
- done();
- }, tinyTimeout * 2);
- });
-
- suite('notification behavior after addToDownloadsQueue', function() {
- setup(function() {
- var css = UpdateManager.container.classList;
- assert.isFalse(css.contains('displayed'));
- UpdateManager.addToDownloadsQueue(uAppWithDownloadAvailable);
- });
-
- test('should be displayed only once', function() {
- var css = UpdateManager.container.classList;
- assert.isTrue(css.contains('displayed'));
- assert.equal(MockNotificationScreen.wasMethodCalled['incExternalNotifications'], 1);
- });
-
- test('should not be displayed after timeout', function(done) {
- setTimeout(function() {
- var css = UpdateManager.container.classList;
- assert.isTrue(css.contains('displayed'));
- assert.equal(MockNotificationScreen.wasMethodCalled['incExternalNotifications'], 1);
- done();
- }, tinyTimeout * 2);
-
- });
- });
-
- suite('notification behavior after addToDownloadsQueue after timeout', function() {
- setup(function(done) {
- setTimeout(function() {
- var css = UpdateManager.container.classList;
- assert.isFalse(css.contains('displayed'));
- UpdateManager.addToDownloadsQueue(uAppWithDownloadAvailable);
- done();
- });
- });
-
- test('should not increment the counter if already displayed', function() {
- var css = UpdateManager.container.classList;
- assert.isTrue(css.contains('displayed'));
- assert.equal(MockNotificationScreen.wasMethodCalled['incExternalNotifications'], 1);
- });
- });
-
- suite('displaying the container after a timeout', function() {
- setup(function() {
- var css = UpdateManager.container.classList;
- assert.isFalse(css.contains('displayed'));
- });
-
- test('should display after a timeout', function(done) {
- setTimeout(function() {
- var css = UpdateManager.container.classList;
- assert.isTrue(css.contains('displayed'));
- assert.equal(MockNotificationScreen.wasMethodCalled['incExternalNotifications'], 1);
- done();
- }, tinyTimeout * 2);
- });
-
- test('should not display if there are no more updates', function(done) {
- UpdateManager.updatesQueue.forEach(function(uApp) {
- UpdateManager.removeFromUpdatesQueue(uApp);
- });
-
- setTimeout(function() {
- var css = UpdateManager.container.classList;
- assert.isFalse(css.contains('displayed'));
- done();
- }, tinyTimeout * 2);
- });
-
- test('should display an updated count', function(done) {
- UpdateManager.addToUpdatesQueue(updatableApps[1]);
- setTimeout(function() {
- assert.equal('updateAvailableInfo{"n":2}',
- UpdateManager.message.textContent);
- done();
- }, tinyTimeout * 2);
- });
-
- suite('update toaster', function() {
- test('should display after a timeout', function(done) {
- var css = UpdateManager.container.classList;
- assert.isFalse(css.contains('displayed'));
- setTimeout(function() {
- var css = UpdateManager.toaster.classList;
- assert.isTrue(css.contains('displayed'));
- assert.equal('updateAvailableInfo{"n":1}',
- UpdateManager.toasterMessage.textContent);
- done();
- }, tinyTimeout * 1.5);
- });
-
- test('should reset toaster value when notification was activated', function(done) {
- setTimeout(function() {
- UpdateManager.addToUpdatesQueue(updatableApps[1]);
- assert.equal('updateAvailableInfo{"n":1}',
- UpdateManager.toasterMessage.textContent);
- done();
- }, tinyTimeout * 2);
- });
-
- test('should show the right message', function(done) {
- setTimeout(function() {
- assert.equal('updateAvailableInfo{"n":1}',
- UpdateManager.toasterMessage.textContent);
- done();
- }, tinyTimeout * 2);
- });
-
-
- test('should hide after TOASTER_TIMEOUT', function(done) {
- UpdateManager.addToUpdatesQueue(updatableApps[1]);
- setTimeout(function() {
- setTimeout(function() {
- var css = UpdateManager.toaster.classList;
- assert.isFalse(css.contains('displayed'));
- done();
- }, tinyTimeout * 2);
- }, tinyTimeout * 2);
- });
-
- });
-
- test('should add a new statusbar notification', function(done) {
- var method1 = 'incExternalNotifications';
- setTimeout(function() {
- assert.ok(MockNotificationScreen.wasMethodCalled[method1]);
- done();
- }, tinyTimeout * 2);
- });
- });
-
- suite('no more updates', function() {
- setup(function() {
- UpdateManager.container.classList.add('displayed');
- UpdateManager.updatesQueue = [uAppWithDownloadAvailable];
- UpdateManager.removeFromUpdatesQueue(uAppWithDownloadAvailable);
- });
-
- test('should hide the container', function() {
- var css = UpdateManager.container.classList;
- assert.isFalse(css.contains('displayed'));
- });
-
- test('should decrease the external notifications count', function() {
- var method1 = 'decExternalNotifications';
- assert.ok(MockNotificationScreen.wasMethodCalled[method1]);
- });
- });
- });
-
- suite('after downloads', function() {
- test('should check if new updates where found', function() {
- var uApp = updatableApps[0];
-
- UpdateManager.updatableApps = updatableApps;
- UpdateManager.downloadsQueue = [uApp];
-
- UpdateManager.removeFromDownloadsQueue(uApp);
- assert.equal(uAppWithDownloadAvailable.app.mId,
- UpdateManager.updatesQueue[0].app.mId);
- });
- });
-
- suite('error banner requests', function() {
- suiteSetup(function() {
- UpdateManager.NOTIFICATION_BUFFERING_TIMEOUT = tinyTimeout;
- UpdateManager.TOASTER_TIMEOUT = tinyTimeout;
- });
-
- suiteTeardown(function() {
- UpdateManager.NOTIFICATION_BUFFERING_TIMEOUT = 0;
- UpdateManager.TOASTER_TIMEOUT = 0;
- });
-
- setup(function() {
- UpdateManager.init();
- UpdateManager.requestErrorBanner();
- });
-
- teardown(function(done) {
- // wait for all actions to happen in UpdateManager before reseting
- setTimeout(function() {
- done();
- }, tinyTimeout * 2);
- });
-
- test('should wait before showing the system banner', function(done) {
- assert.equal(0, MockSystemBanner.mShowCount);
-
- setTimeout(function() {
- done();
- }, tinyTimeout * 2);
- });
-
- test('should show after NOTIFICATION_BUFFERING_TIMEOUT', function(done) {
- setTimeout(function() {
- assert.equal(1, MockSystemBanner.mShowCount);
- assert.equal('downloadError', MockSystemBanner.mMessage);
- done();
- }, tinyTimeout * 2);
- });
-
- test('should show only once if called multiple time', function(done) {
- UpdateManager.requestErrorBanner();
- setTimeout(function() {
- assert.equal(1, MockSystemBanner.mShowCount);
- done();
- }, tinyTimeout * 2);
- });
- });
-
- suite('humanizeSize', function() {
- test('should handle 0', function() {
- assert.equal('0.00 bytes', UpdateManager._humanizeSize(0));
- });
-
- test('should handle bytes size', function() {
- assert.equal('42.00 bytes', UpdateManager._humanizeSize(42));
- });
-
- test('should handle kilobytes size', function() {
- assert.equal('1.00 kB', UpdateManager._humanizeSize(1024));
- });
-
- test('should handle megabytes size', function() {
- assert.equal('4.67 MB', UpdateManager._humanizeSize(4901024));
- });
-
- test('should handle gigabytes size', function() {
- assert.equal('3.73 GB', UpdateManager._humanizeSize(4000901024));
- });
- });
- });
-
- suite('actions', function() {
- setup(function() {
- UpdateManager.init();
- });
-
- suite('start downloads', function() {
- var systemUpdatable, appUpdatable, evt;
-
- setup(function() {
- UpdateManager.init();
-
- systemUpdatable = new MockSystemUpdatable();
-
- appUpdatable = new MockAppUpdatable(new MockApp());
- appUpdatable.name = 'Angry birds';
- appUpdatable.size = '423459';
-
- UpdateManager.addToUpdatableApps(appUpdatable);
- UpdateManager.addToUpdatesQueue(appUpdatable);
- UpdateManager.addToUpdatesQueue(systemUpdatable);
-
- UpdateManager.container.click();
-
- evt = document.createEvent('MouseEvents');
- evt.initEvent('click', true, true);
- });
-
- suite('data connection warning', function() {
- var downloadDialog;
- setup(function() {
- downloadDialog = UpdateManager.downloadDialog;
- });
-
- test('should switch the online data attribute when online',
- function() {
- downloadDialog.dataset.online = false;
- window.dispatchEvent(new CustomEvent('online'));
- assert.equal(downloadDialog.dataset.online, 'true');
- });
-
- test('should leave the online data attribute true when online',
- function() {
- downloadDialog.dataset.online = true;
- window.dispatchEvent(new CustomEvent('online'));
- assert.equal(downloadDialog.dataset.online, 'true');
- });
-
- test('should switch the nowifi data attribute when connected',
- function() {
- downloadDialog.dataset.nowifi = true;
- window.dispatchEvent(new CustomEvent('wifi-statuschange'));
- assert.equal(downloadDialog.dataset.nowifi, 'false');
- });
-
- test('should switch the nowifi data attribute when disconnected',
- function() {
- downloadDialog.dataset.nowifi = false;
- navigator.mozWifiManager.connection.status = 'disconnected';
- window.dispatchEvent(new CustomEvent('wifi-statuschange'));
- assert.equal(downloadDialog.dataset.nowifi, 'true');
- });
- });
-
- test('should enable the download button', function() {
- var downloadButton = UpdateManager.downloadButton;
- assert.isFalse(downloadButton.disabled);
- });
-
- suite('with all the checkboxes checked', function() {
- setup(function() {
- UpdateManager.startDownloads(evt);
- });
-
- test('should download system updates', function() {
- assert.isTrue(systemUpdatable.mDownloadCalled);
- });
-
- test('should call download on checked app updatables', function() {
- assert.isTrue(appUpdatable.mDownloadCalled);
- });
- });
-
- suite('with no checkbox checked', function() {
- setup(function() {
- var dialog = UpdateManager.downloadDialogList;
- var checkboxes = dialog.querySelectorAll('input[type="checkbox"]');
- for (var i = 0; i < checkboxes.length; i++) {
- var checkbox = checkboxes[i];
- if (checkbox.checked) {
- checkbox.click();
- }
- }
-
- UpdateManager.startDownloads(evt);
- });
-
- test('the download button should be enabled', function() {
- assert.isFalse(UpdateManager.downloadButton.disabled);
- });
-
- test('should still download system updates', function() {
- assert.isTrue(systemUpdatable.mDownloadCalled);
- });
-
- test('should not call download on unchecked app updatables',
- function() {
- assert.isFalse(appUpdatable.mDownloadCalled);
- });
- });
-
- suite('with only app updates', function() {
- setup(function() {
- UpdateManager.removeFromUpdatesQueue(systemUpdatable);
- UpdateManager.container.click();
- });
-
- suite('unchecking all the checkboxes', function() {
- var dialog, downloadButton;
-
- setup(function() {
- dialog = UpdateManager.downloadDialogList;
- var checkboxes = dialog.querySelectorAll('input[type="checkbox"]');
- for (var i = 0; i < checkboxes.length; i++) {
- var checkbox = checkboxes[i];
- if (checkbox.checked) {
- checkboxes[i].click();
- }
- }
-
- downloadButton = UpdateManager.downloadButton;
- });
-
- test('should disable the download button', function() {
- assert.isTrue(downloadButton.disabled);
- });
-
- suite('then checking one back', function() {
- setup(function() {
- var checkbox = dialog.querySelector('input[type="checkbox"]');
- checkbox.click();
- });
-
- test('should enable the download button back', function() {
- assert.isFalse(downloadButton.disabled);
- });
- });
- });
- });
- });
-
- suite('cancel all downloads', function() {
- var systemUpdatable;
-
- setup(function() {
- systemUpdatable = new MockSystemUpdatable();
- UpdateManager.updatableApps = updatableApps;
- [systemUpdatable, uAppWithDownloadAvailable].forEach(function(updatable) {
- UpdateManager.addToUpdatesQueue(updatable);
- UpdateManager.addToDownloadsQueue(updatable);
- });
-
- UpdateManager.cancelAllDownloads();
- });
-
- test('should call cancelDownload on the app updatables', function() {
- assert.isTrue(uAppWithDownloadAvailable.mCancelCalled);
- });
-
- test('should call cancelDownload on the system updatable', function() {
- assert.isTrue(systemUpdatable.mCancelCalled);
- });
-
- test('should empty the downloads queue', function() {
- assert.equal(UpdateManager.downloadsQueue.length, 0);
- });
-
- test('should leave the updates available', function() {
- assert.equal(UpdateManager.updatesQueue.length, 2);
- });
- });
-
- suite('download prompt', function() {
- setup(function() {
- MockUtilityTray.show();
- var systemUpdatable = new MockSystemUpdatable();
- systemUpdatable.size = 5296345;
- var appUpdatable = new MockAppUpdatable(new MockApp());
- appUpdatable.name = 'Angry birds';
- appUpdatable.size = '423459';
- var hostedAppUpdatable = new MockAppUpdatable(new MockApp());
- hostedAppUpdatable.name = 'Twitter';
- UpdateManager.updatesQueue = [hostedAppUpdatable, appUpdatable,
- systemUpdatable];
- UpdateManager.containerClicked();
- UpdateManager._isDataConnectionWarningDialogEnabled = true;
- UpdateManager.downloadDialog.dataset.nowifi = false;
- });
-
- suite('download prompt', function() {
- test('should hide the utility tray', function() {
- assert.isFalse(MockUtilityTray.mShown);
- });
-
- test('should show the download dialog', function() {
- var css = UpdateManager.downloadDialog.classList;
- assert.isTrue(css.contains('visible'));
- });
-
- test('should set the title', function() {
- var title = fakeDialog.querySelector('h1');
- assert.equal('numberOfUpdates{"n":3}', title.textContent);
- });
-
- suite('update list rendering', function() {
- test('should create an item for each update', function() {
- assert.equal(3, UpdateManager.downloadDialogList.children.length);
- });
-
- test('should render system update item first with required',
- function() {
- var item = UpdateManager.downloadDialogList.children[0];
-
- assert.include(item.textContent, 'systemUpdate');
- assert.include(item.textContent, '5.05 MB');
- assert.include(item.textContent, 'required');
- });
-
- test('should render packaged app items alphabetically with checkbox',
- function() {
- var item = UpdateManager.downloadDialogList.children[1];
-
- assert.include(item.textContent, 'Angry birds');
- assert.include(item.textContent, '413.53 kB');
-
- var checkbox = item.querySelector('input');
- assert.equal(checkbox.type, 'checkbox');
- assert.isTrue(checkbox.checked);
- assert.equal(checkbox.dataset.position, '1');
- });
-
- test('should render hosted app items alphabetically with checkbox',
- function() {
- var item = UpdateManager.downloadDialogList.children[2];
-
- assert.include(item.textContent, 'Twitter');
-
- var checkbox = item.querySelector('input');
- assert.equal(checkbox.type, 'checkbox');
- assert.isTrue(checkbox.checked);
- assert.equal(checkbox.dataset.position, '2');
- });
- });
- });
-
- test('should handle clicking download in the data connection warning dialog', function() {
- UpdateManager.downloadDialog.dataset.nowifi = true;
-
- var evt = {
- preventDefault: function() {},
- type: 'click',
- target: UpdateManager.downloadViaDataConnectionButton
- };
-
- UpdateManager.requestDownloads(evt);
- MockasyncStorage.getItem('gaia.system.isDataConnectionWarningDialogEnabled', function(value) {
- assert.isFalse(value);
- });
- assert.isFalse(UpdateManager._isDataConnectionWarningDialogEnabled);
- assert.equal(UpdateManager.downloadDialog.dataset.dataConnectionInlineWarning, 'true');
-
- MockasyncStorage.mTeardown();
- });
-
- test('should handle clicking download when using data connection in the first time', function() {
- UpdateManager.downloadDialog.dataset.nowifi = true;
-
- var evt = document.createEvent('MouseEvents');
- evt.initEvent('click', true, true);
-
- UpdateManager.requestDownloads(evt);
- var css = UpdateManager.downloadViaDataConnectionDialog.classList;
- assert.isTrue(css.contains('visible'));
- });
-
- test('should handle clicking download when using wifi', function() {
- UpdateManager._isDataConnectionWarningDialogEnabled = false;
-
- var calledToMockStartDownloads = false;
- var realStartDownloadsFunc = UpdateManager.startDownloads;
- UpdateManager.startDownloads = function() {
- calledToMockStartDownloads = true;
- };
-
- var evt = document.createEvent('MouseEvents');
- evt.initEvent('click', true, true);
-
- UpdateManager.requestDownloads(evt);
- assert.isTrue(calledToMockStartDownloads);
-
- UpdateManager.startDownloads = realStartDownloadsFunc;
- });
-
- test('should handle cancellation on the data connection warning dialog', function() {
- UpdateManager.cancelDataConnectionUpdatesPrompt();
-
- var css = UpdateManager.downloadViaDataConnectionDialog.classList;
- assert.isFalse(css.contains('visible'));
- css = UpdateManager.downloadDialog.classList;
- assert.isFalse(css.contains('visible'));
- });
-
- test('should handle cancellation', function() {
- UpdateManager.cancelPrompt();
-
- var css = UpdateManager.downloadDialog.classList;
- assert.isFalse(css.contains('visible'));
- });
-
- test('should handle confirmation', function() {
- UpdateManager._isDataConnectionWarningDialogEnabled = false;
-
- var evt = document.createEvent('MouseEvents');
- evt.initEvent('click', true, true);
-
- UpdateManager.requestDownloads(evt);
- var css = UpdateManager.downloadDialog.classList;
- assert.isFalse(css.contains('visible'));
- css = UpdateManager.downloadViaDataConnectionDialog.classList;
- assert.isFalse(css.contains('visible'));
- assert.isTrue(MockUtilityTray.mShown);
- assert.isTrue(evt.defaultPrevented);
- });
- });
-
- suite('cancel prompt', function() {
- setup(function() {
- UpdateManager._downloading = true;
- MockUtilityTray.show();
- UpdateManager.containerClicked();
- });
-
- test('should show the cancel', function() {
- assert.isTrue(MockCustomDialog.mShown);
- assert.isFalse(MockUtilityTray.mShown);
-
- assert.equal('cancelAllDownloads', MockCustomDialog.mShowedTitle);
- assert.equal('wantToCancelAll', MockCustomDialog.mShowedMsg);
-
- assert.equal('no', MockCustomDialog.mShowedCancel.title);
- assert.equal('yes', MockCustomDialog.mShowedConfirm.title);
- });
-
- test('should handle cancellation', function() {
- assert.equal('um_cancelPrompt',
- MockCustomDialog.mShowedCancel.callback.name);
-
- UpdateManager.cancelPrompt();
- assert.isFalse(MockCustomDialog.mShown);
- });
-
- test('should handle confirmation', function() {
- assert.equal('um_cancelAllDownloads',
- MockCustomDialog.mShowedConfirm.callback.name);
-
- UpdateManager.cancelAllDownloads();
- assert.isFalse(MockCustomDialog.mShown);
- });
- });
-
- suite('check for updates', function() {
- setup(function() {
- UpdateManager.init();
- });
-
- test('should observe the setting', function() {
- assert.equal('gaia.system.checkForUpdates', MockSettingsListener.mName);
- assert.equal(false, MockSettingsListener.mDefaultValue);
- assert.equal(UpdateManager.checkForUpdates.name,
- MockSettingsListener.mCallback.name);
- });
-
- suite('when asked to check', function() {
- setup(function() {
- UpdateManager.checkForUpdates(true);
- });
-
- test('should dispatch force update event if asked for', function() {
- assert.equal('force-update-check', lastDispatchedEvent.type);
- });
-
- test('should set the setting back to false', function() {
- var setting = 'gaia.system.checkForUpdates';
- assert.isFalse(MockNavigatorSettings.mSettings[setting]);
- });
- });
-
- test('should not dispatch force update event if not asked', function() {
- UpdateManager.checkForUpdates(false);
- assert.isNull(lastDispatchedEvent);
- });
- });
- });
-
- suite('queues support', function() {
- suite('updates queue', function() {
- suite('addToUpdatesQueue', function() {
- setup(function() {
- var installedApp = new MockApp();
- var updatableApp = new MockAppUpdatable(installedApp);
-
- var pendingApp = new MockApp({ installState: 'pending' }),
- uPendingApp = new MockAppUpdatable(pendingApp);
-
- UpdateManager.updatableApps = [updatableApp, uPendingApp];
- UpdateManager.init();
- });
-
- test('should add the updatable app to the array', function() {
- var updatableApp = UpdateManager.updatableApps[0];
-
- var initialLength = UpdateManager.updatesQueue.length;
- UpdateManager.addToUpdatesQueue(updatableApp);
- assert.equal(initialLength + 1, UpdateManager.updatesQueue.length);
- });
-
- test('should render', function() {
- var updatableApp = UpdateManager.updatableApps[0];
-
- UpdateManager.addToUpdatesQueue(updatableApp);
- assert.equal('updateAvailableInfo{"n":1}',
- UpdateManager.message.textContent);
- });
-
- test('should not add app if not in updatableApps array', function() {
- var updatableApp = new MockAppUpdatable(new MockApp);
- var initialLength = UpdateManager.updatesQueue.length;
- UpdateManager.addToUpdatesQueue(updatableApp);
- assert.equal(initialLength, UpdateManager.updatesQueue.length);
- });
-
- test('should add a system update to the array', function() {
- var systemUpdate = new MockSystemUpdatable();
-
- var initialLength = UpdateManager.updatesQueue.length;
- UpdateManager.addToUpdatesQueue(systemUpdate);
- assert.equal(initialLength + 1, UpdateManager.updatesQueue.length);
- });
-
- test('should not add more than one system update', function() {
- var systemUpdate = new MockSystemUpdatable();
-
- UpdateManager.updatesQueue.push(new MockSystemUpdatable());
- var initialLength = UpdateManager.updatesQueue.length;
- UpdateManager.addToUpdatesQueue(systemUpdate);
- assert.equal(initialLength, UpdateManager.updatesQueue.length);
- });
-
- test('should not add if app already in the array', function() {
- var updatableApp = UpdateManager.updatableApps[0];
- UpdateManager.addToUpdatesQueue(updatableApp);
-
- var initialLength = UpdateManager.updatesQueue.length;
- UpdateManager.addToUpdatesQueue(updatableApp);
- assert.equal(initialLength, UpdateManager.updatesQueue.length);
- });
-
- test('should not add if downloading', function() {
- UpdateManager._downloading = true;
- var updatableApp = UpdateManager.updatableApps[0];
-
- var initialLength = UpdateManager.updatesQueue.length;
- UpdateManager.addToUpdatesQueue(updatableApp);
- assert.equal(initialLength, UpdateManager.updatesQueue.length);
- });
-
- test('should not add a pending app to the array', function() {
- var updatableApp = UpdateManager.updatableApps[1];
-
- var initialLength = UpdateManager.updatesQueue.length;
-
- UpdateManager.addToUpdatesQueue(updatableApp);
- assert.equal(UpdateManager.updatesQueue.length, initialLength);
- });
-
- });
-
- suite('removeFromUpdatesQueue', function() {
- var updatableApp;
-
- setup(function() {
- var installedApp = new MockApp();
- updatableApp = new MockAppUpdatable(installedApp);
- UpdateManager.updatableApps = [updatableApp];
- UpdateManager.updatesQueue = [updatableApp];
- UpdateManager.init();
- });
-
- test('should remove if in updatesQueue array', function() {
- var initialLength = UpdateManager.updatesQueue.length;
- UpdateManager.removeFromUpdatesQueue(updatableApp);
- assert.equal(initialLength - 1, UpdateManager.updatesQueue.length);
- });
-
- test('should render', function() {
- UpdateManager.removeFromUpdatesQueue(updatableApp);
- assert.equal('updateAvailableInfo{"n":0}',
- UpdateManager.message.textContent);
- });
-
- test('should remove system updates too', function() {
- var systemUpdate = new MockSystemUpdatable();
- UpdateManager.updatesQueue.push(systemUpdate);
-
- var initialLength = UpdateManager.updatesQueue.length;
- UpdateManager.removeFromUpdatesQueue(systemUpdate);
- assert.equal(initialLength - 1, UpdateManager.updatesQueue.length);
- });
- });
- });
-
- suite('downloads queue', function() {
- suite('addToDownloadsQueue', function() {
- var updatableApp;
-
- setup(function() {
- var installedApp = new MockApp();
- updatableApp = new MockAppUpdatable(installedApp);
- UpdateManager.updatableApps = [updatableApp];
- UpdateManager.init();
- });
-
- test('should add the updatable to the array', function() {
- var initialLength = UpdateManager.downloadsQueue.length;
- UpdateManager.addToDownloadsQueue(updatableApp);
- assert.equal(initialLength + 1, UpdateManager.downloadsQueue.length);
- });
-
- test('should add system updates too', function() {
- var initialLength = UpdateManager.downloadsQueue.length;
- UpdateManager.addToDownloadsQueue(new MockSystemUpdatable());
- assert.equal(initialLength + 1, UpdateManager.downloadsQueue.length);
- });
-
- test('should not add more than one system updates', function() {
- var initialLength = UpdateManager.downloadsQueue.length;
- UpdateManager.addToDownloadsQueue(new MockSystemUpdatable());
- UpdateManager.addToDownloadsQueue(new MockSystemUpdatable());
- assert.equal(initialLength + 1, UpdateManager.downloadsQueue.length);
- });
-
- suite('switching to downloading mode on first add', function() {
- setup(function() {
- UpdateManager.addToDownloadsQueue(updatableApp);
- });
-
- test('should add css class', function() {
- var css = UpdateManager.container.classList;
- assert.isTrue(css.contains('downloading'));
- });
-
- test('should ask for statusbar indicator', function() {
- var incMethod = 'incSystemDownloads';
- assert.ok(MockStatusBar.wasMethodCalled[incMethod]);
- });
-
- test('should request wifi wake lock', function() {
- assert.equal('wifi', MockNavigatorWakeLock.mLastWakeLock.topic);
- assert.isFalse(MockNavigatorWakeLock.mLastWakeLock.released);
- });
- });
-
- test('should not add app if not in updatableApps array', function() {
- var updatableApp = new MockAppUpdatable(new MockApp);
- var initialLength = UpdateManager.downloadsQueue.length;
- UpdateManager.addToDownloadsQueue(updatableApp);
- assert.equal(initialLength, UpdateManager.downloadsQueue.length);
- });
-
- test('should not add if already in the array', function() {
- UpdateManager.addToDownloadsQueue(updatableApp);
-
- var initialLength = UpdateManager.downloadsQueue.length;
- UpdateManager.addToDownloadsQueue(updatableApp);
- assert.equal(initialLength, UpdateManager.downloadsQueue.length);
- });
- });
-
- suite('removeFromDownloadsQueue', function() {
- var updatableApp;
-
- setup(function() {
- var installedApp = new MockApp();
- updatableApp = new MockAppUpdatable(installedApp);
- UpdateManager.init();
-
- UpdateManager.addToUpdatableApps(updatableApp);
- UpdateManager.addToDownloadsQueue(updatableApp);
- });
-
- test('should remove if in downloadsQueue array', function() {
- var initialLength = UpdateManager.downloadsQueue.length;
- UpdateManager.removeFromDownloadsQueue(updatableApp);
- assert.equal(initialLength - 1, UpdateManager.downloadsQueue.length);
- });
-
- suite('should switch off downloading mode on last remove', function() {
- setup(function() {
- UpdateManager.removeFromDownloadsQueue(updatableApp);
- });
-
- test('should remove css class', function() {
- var css = UpdateManager.container.classList;
- assert.isFalse(css.contains('downloading'));
- });
-
- test('should remove statusbar indicator', function() {
- var decMethod = 'decSystemDownloads';
- assert.ok(MockStatusBar.wasMethodCalled[decMethod]);
- });
-
- test('should release the wifi wake lock', function() {
- assert.equal('wifi', MockNavigatorWakeLock.mLastWakeLock.topic);
- assert.isTrue(MockNavigatorWakeLock.mLastWakeLock.released);
- });
- });
-
- test('should not break if wifi unlock throws an exception',
- function() {
- MockNavigatorWakeLock.mThrowAtNextUnlock();
- UpdateManager.removeFromDownloadsQueue(updatableApp);
- assert.ok(true);
- });
-
- test('should remove system updates too', function() {
- var systemUpdate = new MockSystemUpdatable();
- UpdateManager.downloadsQueue.push(systemUpdate);
-
- var initialLength = UpdateManager.downloadsQueue.length;
- UpdateManager.removeFromDownloadsQueue(systemUpdate);
- assert.equal(initialLength - 1, UpdateManager.downloadsQueue.length);
- });
- });
- });
- });
-});