diff --git a/examples/lib/cache.js b/examples/lib/cache.js index a402e30339..969ea3c627 100644 --- a/examples/lib/cache.js +++ b/examples/lib/cache.js @@ -1,6 +1,8 @@ +const { reject } = require("lodash"); + var setupCache = function() { let newWorker; // When sw.js is changed, this is the new service worker generated. - + // Toggle a CSS class to display a popup prompting the user to fetch a new version. function showUpdateModal() { $('#update-prompt-modal').addClass('show'); @@ -22,6 +24,11 @@ var setupCache = function() { registration.addEventListener('updatefound', () => { // When sw.js has been changed, get a reference to the new service worker. newWorker = registration.installing; + + if(!newWorker){ + return reject(new Error('error in installing service worker')); + } + newWorker.addEventListener('statechange', () => { // Check if service worker state has changed. switch(newWorker.state) { @@ -29,24 +36,23 @@ var setupCache = function() { if(navigator.serviceWorker.controller) { // New service worker available; prompt the user to update. showUpdateModal(); + $('#reload').on('click',(e) => { + e.preventDefault(); + console.log('New Service Worker Installed Successfully'); + location.reload(); + return resolve(); + }) } // No updates available; do nothing. break; - } - }); - }); - const installingWorker = registration.installing; - installingWorker.onstatechange = () => { - console.log(installingWorker); - if (installingWorker.state === 'installed') { - location.reload(); - } - }; - console.log('Registration successful, scope is:', registration.scope); - }) - .catch(function(error) { - console.log('Service worker registration failed, error:', error); + case 'redundant': + return reject(new Error('installing new service worker now became redundant')); + } + }) + }) + }).catch(err => { + console.log('Failed In Registering Service Worker: ',err); }); /** @@ -69,21 +75,22 @@ var setupCache = function() { }); } - $('#clear-cache').click(function() { + const clearCache = () => { if ('serviceWorker' in navigator) { - caches.keys().then(function(cacheNames) { - cacheNames.forEach(function(cacheName) { - caches.delete(cacheName); - }); + return caches.keys() + .then(function(cache) { + return Promise.all(cache.map(function(cacheItem) { + return caches.delete(cacheItem); + })); }); } + } + + $('#clear-cache').click(function() { + clearCache(); location.reload(); }); - - - - }; module.exports = setupCache; diff --git a/test/core/sequencer/sw.js b/test/core/sequencer/sw.js new file mode 100644 index 0000000000..42bd900e67 --- /dev/null +++ b/test/core/sequencer/sw.js @@ -0,0 +1,37 @@ +var setUpCache = new require('../../../examples/lib/cache')(); +var test = require('tape'); + +function SWInstallation(){ + return new Promise(() => { + return setupCache(); + }); +} + +function UnRegisterSW(){ + + function unregister() { + return navigator.serviceWorker.getRegistrations() + .then(function(registrations) { + var unRegisteredWorker = registrations.map(function(registration) { + return registration.unregister(); + }); + return Promise.all(unRegisteredWorker); + }); + } + + return Promise.all([ + unregister(), + setUpCache.clearCache() + ]); +} + +test('Register service worker',function(t) { + + t.test('unregister service worker',function(st) { + st.equal(UnRegisterSW(),true,'unregistered successfully and cleared the cache') + }) + + t.test('install service worker',function(st) { + st.equal(SWInstallation(),true,'successfully installed new service worker') + }); +});