Skip to content

Commit

Permalink
fix connection issue in service worker
Browse files Browse the repository at this point in the history
  • Loading branch information
ujjwalguptaofficial committed Jun 18, 2021
1 parent dd7c5f1 commit 25d2ae6
Show file tree
Hide file tree
Showing 4 changed files with 130 additions and 1 deletion.
2 changes: 1 addition & 1 deletion src/main/connection_helper.ts
Original file line number Diff line number Diff line change
Expand Up @@ -41,7 +41,7 @@ export class ConnectionHelper {
private $worker;

private get jsstoreWorker() {
return this.$worker || window['JsStoreWorker'];
return this.$worker || self['JsStoreWorker'];
}

constructor(worker?: Worker) {
Expand Down
51 changes: 51 additions & 0 deletions test/cases/service_worker.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,51 @@

describe('Test service worker', function () {
it('register service worker', function () {
var __waitForSWState = function(registration, desiredState) {
return new Promise((resolve, reject) => {
let serviceWorker = registration.installing;

if (!serviceWorker) {
return reject(new Error('The service worker is not installing. ' +
'Is the test environment clean?'));
}

const stateListener = (evt) => {
if (evt.target.state === desiredState) {
serviceWorker.removeEventListener('statechange', stateListener);
return resolve();
}

if (evt.target.state === 'redundant') {
serviceWorker.removeEventListener('statechange', stateListener);

return reject(new Error('Installing service worker became redundant'));
}
};

serviceWorker.addEventListener('statechange', stateListener);
});
}
return navigator.serviceWorker.register("/test/static/sw.js")
.then(function (reg ) {
return __waitForSWState(reg,'installed');
})

})

it('check if connection is created',function(){
window.caches.match('/__test/example')
.then((response) => {
if (!response) {
throw new Error('Eek, no response was found in the cache.');
}

return response.text();
})
.then((responseText) => {
if (responseText !== 'Hello, World!') {
throw new Error(`The response text was wrong!: '${responseText}'`);
}
});
})
})
6 changes: 6 additions & 0 deletions test/files.js
Original file line number Diff line number Diff line change
Expand Up @@ -24,11 +24,17 @@ exports.list_of_files = [
'test/cases/db_update_datatype.js',
'test/cases/multiple_connection.js',
'test/cases/db_upgrade.js',
'test/cases/service_worker.js',
{
pattern: 'test/static/*.json',
included: false,
served: true,
},
{
pattern: 'test/static/*.js',
included: false,
served: true,
},
{
pattern: 'output/*.js',
included: false,
Expand Down
72 changes: 72 additions & 0 deletions test/static/sw.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,72 @@
importScripts('/output/jsstore.js');
importScripts('/output/jsstore.worker.js');

self.addEventListener('fetch', function (event) {
console.log("fetch event:", event.request.url);
});

var dbName = "ServiceWorkerDemo";

function initDb() {
var connection = new JsStore.Connection();
return connection.initDb(getDbSchema()).then(function(isDbCreated){
if (isDbCreated) {
console.log('db created');
}
else {
console.log('db opened');
}
return connection;
})
}

function getDbSchema() {
var table = {
name: 'Student',
columns: {
id: {
primaryKey: true,
autoIncrement: true
},
name: {
notNull: true,
dataType: 'string'
},
gender: {
dataType: 'string',
default: 'male'
},
country: {
notNull: true,
dataType: 'string'
},
city: {
dataType: 'string',
notNull: true
}
}
}

var db = {
name: dbName,
tables: [table]
}
return db;
}

// throw "ss"

self.addEventListener('install', (event) => {
const promiseChain = caches.open('test-cache')
.then((openCache) => {
initDb().then(function (connection) {
return connection.terminate();
}).then(() => {
return openCache.put(
new Request('/__test/example'),
new Response('Hello, World!')
);
})
});
event.waitUntil(promiseChain);
});

0 comments on commit 25d2ae6

Please sign in to comment.