diff --git a/addon/instance-initializers/sw.js b/addon/instance-initializers/sw.js index dc7d252..0482849 100644 --- a/addon/instance-initializers/sw.js +++ b/addon/instance-initializers/sw.js @@ -47,6 +47,7 @@ export default { initialize(appInstance) { const { autoRegister } = getConfig(appInstance); + /* istanbul ignore else */ if (autoRegister) { initialize(appInstance); } diff --git a/addon/services/service-worker.js b/addon/services/service-worker.js index f8c9f18..70d80dc 100644 --- a/addon/services/service-worker.js +++ b/addon/services/service-worker.js @@ -32,6 +32,7 @@ export default class ServiceWorker extends EventedService { const sw = window.navigator.serviceWorker; let isSupported = false; + /* istanbul ignore else */ if (sw) { isSupported = ['getRegistrations', 'register'].every( (func) => func in sw @@ -43,6 +44,7 @@ export default class ServiceWorker extends EventedService { } _log(message) { + /* istanbul ignore else */ if (this.debug) { debug(`ember-cli-workbox: ${message}`); } @@ -90,10 +92,12 @@ export default class ServiceWorker extends EventedService { this._log(`Registration succeeded. Scope is ${registration.scope}`); this.trigger('registrationComplete'); + /* istanbul ignore else */ if (!registration) { return; } + /* istanbul ignore else */ if (registration.waiting) { // SW is waiting to activate. Can occur if multiple clients open and // one of the clients is refreshed. @@ -105,6 +109,7 @@ export default class ServiceWorker extends EventedService { registration.addEventListener('updatefound', () => { const installingWorker = registration.installing; + /* istanbul ignore else */ if (!installingWorker) { return; } @@ -120,8 +125,10 @@ export default class ServiceWorker extends EventedService { } _checkSWInstalled(installingWorker, registration) { + console.log('state: ' + installingWorker.state); switch (installingWorker.state) { case 'installed': + console.log('case installed '); if (navigator.serviceWorker.controller) { // At this point, the updated precached content has been fetched, // but the previous service worker will still serve the older diff --git a/index.js b/index.js index cf56bbb..45b5c79 100644 --- a/index.js +++ b/index.js @@ -33,6 +33,7 @@ module.exports = { env = env || process.env.EMBER_ENV; // Do nothing if no ENV. For example, when running an ember generator. + /* istanbul ignore else */ if (!env) { return; } diff --git a/lib/broccoli-workbox.js b/lib/broccoli-workbox.js index ca34d32..04259fd 100644 --- a/lib/broccoli-workbox.js +++ b/lib/broccoli-workbox.js @@ -35,6 +35,7 @@ class BroccoliWorkbox extends Plugin { } removeServiceWorker(filePath) { + /* istanbul ignore else */ if (fs.existsSync(filePath)) { debug(yellow('Addon disabled. Service worker exist, remove it')); fs.unlinkSync(filePath); @@ -56,6 +57,7 @@ class BroccoliWorkbox extends Plugin { ) ); + /* istanbul ignore else */ if (warnings) { debug(yellow(warnings)); } @@ -72,6 +74,7 @@ class BroccoliWorkbox extends Plugin { workboxOptions.swDest = path.join(directory, workboxOptions.swDest); + /* istanbul ignore else */ if (!this.options.enabled) { debug(yellow('Addon disabled. Disable and remove service worker...')); @@ -92,6 +95,7 @@ class BroccoliWorkbox extends Plugin { ); // Remove workbox libraries directory to prevent exception on recopying it. + /* istanbul ignore else */ if ( !workboxOptions.importWorkboxFromCDN && fs.existsSync(workboxDirectory) @@ -111,7 +115,7 @@ class BroccoliWorkbox extends Plugin { ); workboxOptions.importScripts = filesToIncludeInSW; - + /* istanbul ignore else */ if (this.options.importScriptsTransform) { workboxOptions.importScripts = this.options.importScriptsTransform( workboxOptions.importScripts diff --git a/tests/acceptance/simple-test.js b/tests/acceptance/simple-test.js index dfc7f89..5f3d544 100755 --- a/tests/acceptance/simple-test.js +++ b/tests/acceptance/simple-test.js @@ -1,5 +1,6 @@ import { module, test } from 'qunit'; import { setupApplicationTest } from 'ember-qunit'; +import sinon from 'sinon'; module('Acceptance | Simple Acceptance Test', (hooks) => { setupApplicationTest(hooks); @@ -48,6 +49,8 @@ module('Acceptance | Simple Acceptance Test', (hooks) => { const registrations = await window.navigator.serviceWorker.getRegistrations(); + console.log('ave4r si ' + JSON.stringify(registrations)); + assert.ok(registrations.length); }); @@ -74,6 +77,39 @@ module('Acceptance | Simple Acceptance Test', (hooks) => { assert.notOk(registrations.length); }); + test('it unregisters sw but fails', async function (assert) { + await this.swService.register('sw.js'); + + const registrations = await this.swService.sw.getRegistrations(); + const stubs = registrations.map((reg) => { + return sinon.stub(reg, 'unregister').callsFake(() => { + return Promise.resolve(false); + }); + }); + + const stubLog = sinon.stub(this.swService, '_log'); + + assert.deepEqual( + this.events, + ['registrationComplete'], + 'Event triggered: registrationComplete' + ); + + await this.swService.unregisterAll(); + + assert.ok(stubLog.called); + assert.ok(registrations.length); + + assert.deepEqual( + this.events, + ['registrationComplete', 'unregistrationComplete'], + 'Service worker does not exists' + ); + + stubs.forEach((stubReg) => stubReg.restore()); + stubLog.restore(); + }); + test.skip('it triggers "update" event on sw response', async function (assert) { const _reload = window.location.reload; let called = 0;