kopia lustrzana https://gitlab.com/rysiekpl/libresilient
service-worker: tests fixed for the new plugin loader, and a test added for using multiple instances of the same plugin (ref. #15)
rodzic
8603237db0
commit
672be5d223
|
@ -142,17 +142,21 @@ describe("service-worker", () => {
|
|||
})
|
||||
)
|
||||
})
|
||||
self.LibResilientPlugins.push({
|
||||
name: 'reject-all',
|
||||
description: 'Reject all requests.',
|
||||
version: '0.0.1',
|
||||
fetch: rejectingFetch
|
||||
global.LibResilientPluginConstructors.set('reject-all', ()=>{
|
||||
return {
|
||||
name: 'reject-all',
|
||||
description: 'Reject all requests.',
|
||||
version: '0.0.1',
|
||||
fetch: rejectingFetch
|
||||
}
|
||||
})
|
||||
self.LibResilientPlugins.push({
|
||||
name: 'resolve-all',
|
||||
description: 'Resolve all requests.',
|
||||
version: '0.0.1',
|
||||
fetch: resolvingFetch
|
||||
global.LibResilientPluginConstructors.set('resolve-all', ()=>{
|
||||
return {
|
||||
name: 'resolve-all',
|
||||
description: 'Resolve all requests.',
|
||||
version: '0.0.1',
|
||||
fetch: resolvingFetch
|
||||
}
|
||||
})
|
||||
|
||||
require("../service-worker.js");
|
||||
|
@ -175,15 +179,17 @@ describe("service-worker", () => {
|
|||
]
|
||||
}
|
||||
let rwtCallback = jest.fn()
|
||||
self.LibResilientPlugins.push({
|
||||
name: 'resolve-with-timeout',
|
||||
description: 'Resolve all requests after a timeout.',
|
||||
version: '0.0.1',
|
||||
fetch: (request, init)=>{
|
||||
return new Promise((resolve, reject)=>{
|
||||
setTimeout(rwtCallback, 5000)
|
||||
})
|
||||
}
|
||||
global.LibResilientPluginConstructors.set('resolve-with-timeout', ()=>{
|
||||
return {
|
||||
name: 'resolve-with-timeout',
|
||||
description: 'Resolve all requests after a timeout.',
|
||||
version: '0.0.1',
|
||||
fetch: (request, init)=>{
|
||||
return new Promise((resolve, reject)=>{
|
||||
setTimeout(rwtCallback, 5000)
|
||||
})
|
||||
}
|
||||
}
|
||||
})
|
||||
|
||||
require("../service-worker.js");
|
||||
|
@ -226,11 +232,13 @@ describe("service-worker", () => {
|
|||
'service-worker'
|
||||
]
|
||||
}
|
||||
self.LibResilientPlugins.push({
|
||||
name: 'reject-all',
|
||||
description: 'Reject all requests.',
|
||||
version: '0.0.1',
|
||||
fetch: (request, init)=>{ return Promise.reject(request); }
|
||||
global.LibResilientPluginConstructors.set('reject-all', ()=>{
|
||||
return {
|
||||
name: 'reject-all',
|
||||
description: 'Reject all requests.',
|
||||
version: '0.0.1',
|
||||
fetch: (request, init)=>{ return Promise.reject(request); }
|
||||
}
|
||||
})
|
||||
require("../service-worker.js");
|
||||
var response = await self.trigger('fetch', new Request('https://example.com/test.json'))
|
||||
|
@ -264,11 +272,13 @@ describe("service-worker", () => {
|
|||
'service-worker'
|
||||
]
|
||||
}
|
||||
self.LibResilientPlugins.push({
|
||||
name: 'reject-all',
|
||||
description: 'Reject all requests.',
|
||||
version: '0.0.1',
|
||||
fetch: (request, init)=>{ return Promise.reject(request); }
|
||||
global.LibResilientPluginConstructors.set('reject-all', ()=>{
|
||||
return {
|
||||
name: 'reject-all',
|
||||
description: 'Reject all requests.',
|
||||
version: '0.0.1',
|
||||
fetch: (request, init)=>{ return Promise.reject(request); }
|
||||
}
|
||||
})
|
||||
require("../service-worker.js");
|
||||
var response = await self.trigger('fetch', new Request('/test.json', {method: "POST"}))
|
||||
|
@ -340,18 +350,22 @@ describe("service-worker", () => {
|
|||
let rejectingFetch = jest.fn((request, init)=>{ return Promise.reject(request); })
|
||||
let stashingStash = jest.fn()
|
||||
|
||||
self.LibResilientPlugins.push({
|
||||
name: 'stashing-test',
|
||||
description: 'Mock stashing plugin.',
|
||||
version: '0.0.1',
|
||||
fetch: resolvingFetch,
|
||||
stash: stashingStash
|
||||
global.LibResilientPluginConstructors.set('stashing-test', ()=>{
|
||||
return {
|
||||
name: 'stashing-test',
|
||||
description: 'Mock stashing plugin.',
|
||||
version: '0.0.1',
|
||||
fetch: resolvingFetch,
|
||||
stash: stashingStash
|
||||
}
|
||||
})
|
||||
self.LibResilientPlugins.push({
|
||||
name: 'reject-all',
|
||||
description: 'Reject all requests.',
|
||||
version: '0.0.1',
|
||||
fetch: rejectingFetch
|
||||
global.LibResilientPluginConstructors.set('reject-all', ()=>{
|
||||
return {
|
||||
name: 'reject-all',
|
||||
description: 'Reject all requests.',
|
||||
version: '0.0.1',
|
||||
fetch: rejectingFetch
|
||||
}
|
||||
})
|
||||
|
||||
require("../service-worker.js");
|
||||
|
@ -414,18 +428,22 @@ describe("service-worker", () => {
|
|||
expect(response.headers.get('ETag')).toEqual('NewTestingETagHeader')
|
||||
})
|
||||
|
||||
self.LibResilientPlugins.push({
|
||||
name: 'stashing-test',
|
||||
description: 'Mock stashing plugin.',
|
||||
version: '0.0.1',
|
||||
fetch: resolvingFetch,
|
||||
stash: stashingStash
|
||||
global.LibResilientPluginConstructors.set('stashing-test', ()=>{
|
||||
return {
|
||||
name: 'stashing-test',
|
||||
description: 'Mock stashing plugin.',
|
||||
version: '0.0.1',
|
||||
fetch: resolvingFetch,
|
||||
stash: stashingStash
|
||||
}
|
||||
})
|
||||
self.LibResilientPlugins.push({
|
||||
name: 'resolve-all',
|
||||
description: 'Resolve all requests.',
|
||||
version: '0.0.1',
|
||||
fetch: resolvingFetch2
|
||||
global.LibResilientPluginConstructors.set('resolve-all', ()=>{
|
||||
return {
|
||||
name: 'resolve-all',
|
||||
description: 'Resolve all requests.',
|
||||
version: '0.0.1',
|
||||
fetch: resolvingFetch2
|
||||
}
|
||||
})
|
||||
|
||||
var testClient = new Client()
|
||||
|
@ -481,18 +499,22 @@ describe("service-worker", () => {
|
|||
})
|
||||
let stashingStash = jest.fn()
|
||||
|
||||
self.LibResilientPlugins.push({
|
||||
name: 'stashing-test',
|
||||
description: 'Mock stashing plugin.',
|
||||
version: '0.0.1',
|
||||
fetch: resolvingFetch,
|
||||
stash: stashingStash
|
||||
global.LibResilientPluginConstructors.set('stashing-test', ()=>{
|
||||
return {
|
||||
name: 'stashing-test',
|
||||
description: 'Mock stashing plugin.',
|
||||
version: '0.0.1',
|
||||
fetch: resolvingFetch,
|
||||
stash: stashingStash
|
||||
}
|
||||
})
|
||||
self.LibResilientPlugins.push({
|
||||
name: 'resolve-all',
|
||||
description: 'Resolve all requests.',
|
||||
version: '0.0.1',
|
||||
fetch: resolvingFetch
|
||||
global.LibResilientPluginConstructors.set('resolve-all', ()=>{
|
||||
return {
|
||||
name: 'resolve-all',
|
||||
description: 'Resolve all requests.',
|
||||
version: '0.0.1',
|
||||
fetch: resolvingFetch
|
||||
}
|
||||
})
|
||||
|
||||
require("../service-worker.js");
|
||||
|
@ -621,12 +643,14 @@ describe("service-worker", () => {
|
|||
]
|
||||
}
|
||||
var result = false
|
||||
self.LibResilientPlugins.push({
|
||||
name: 'publish-test',
|
||||
description: 'Publish plugin fixture.',
|
||||
version: '0.0.1',
|
||||
publish: (request)=>{
|
||||
result = 'publish-test success: ' + request.url
|
||||
global.LibResilientPluginConstructors.set('publish-test', ()=>{
|
||||
return {
|
||||
name: 'publish-test',
|
||||
description: 'Publish plugin fixture.',
|
||||
version: '0.0.1',
|
||||
publish: (request)=>{
|
||||
result = 'publish-test success: ' + request.url
|
||||
}
|
||||
}
|
||||
})
|
||||
require("../service-worker.js");
|
||||
|
@ -655,7 +679,6 @@ describe("service-worker", () => {
|
|||
test("using plugins with dependencies should work", async () => {
|
||||
self.LibResilientConfig = {
|
||||
plugins: [{
|
||||
// TODO: actually implement the test?
|
||||
name: 'dependent-test',
|
||||
uses: [{
|
||||
name: 'dependency1-test'
|
||||
|
@ -667,29 +690,62 @@ describe("service-worker", () => {
|
|||
'service-worker'
|
||||
]
|
||||
}
|
||||
self.LibResilientPlugins.push({
|
||||
name: 'dependent-test',
|
||||
description: 'Dependent plugin fixture.',
|
||||
version: '0.0.1',
|
||||
uses: {
|
||||
'dependency1-test': {},
|
||||
'dependency2-test': {}
|
||||
global.LibResilientPluginConstructors.set('dependent-test', ()=>{
|
||||
return {
|
||||
name: 'dependent-test',
|
||||
description: 'Dependent plugin fixture.',
|
||||
version: '0.0.1',
|
||||
uses: [{
|
||||
name: 'dependency1-test'
|
||||
},{
|
||||
name: 'dependency2-test'
|
||||
}]
|
||||
}
|
||||
})
|
||||
self.LibResilientPlugins.push({
|
||||
name: 'dependency1-test',
|
||||
description: 'First dependency plugin fixture.',
|
||||
version: '0.0.1'
|
||||
global.LibResilientPluginConstructors.set('dependency1-test', ()=>{
|
||||
return {
|
||||
name: 'dependency1-test',
|
||||
description: 'First dependency plugin fixture.',
|
||||
version: '0.0.1'
|
||||
}
|
||||
})
|
||||
self.LibResilientPlugins.push({
|
||||
name: 'dependency2-test',
|
||||
description: 'Second dependency plugin fixture.',
|
||||
version: '0.0.1'
|
||||
global.LibResilientPluginConstructors.set('dependency2-test', ()=>{
|
||||
return {
|
||||
name: 'dependency2-test',
|
||||
description: 'Second dependency plugin fixture.',
|
||||
version: '0.0.1'
|
||||
}
|
||||
})
|
||||
require("../service-worker.js");
|
||||
expect(Object.keys(self.LibResilientConfig.plugins)).toEqual(['dependent-test', 'dependency1-test', 'dependency2-test'])
|
||||
expect(self.LibResilientConfig.plugins['dependency1-test'].indirect).toEqual(true)
|
||||
expect(self.LibResilientConfig.plugins['dependency2-test'].indirect).toEqual(true)
|
||||
expect(self.LibResilientPlugins.map(p=>p.name)).toEqual(['dependent-test'])
|
||||
expect(self.LibResilientPlugins[0].uses.map(p=>p.name)).toEqual(['dependency1-test', 'dependency2-test'])
|
||||
})
|
||||
|
||||
test("using multiple instances of the same plugin should work", async () => {
|
||||
self.LibResilientConfig = {
|
||||
plugins: [{
|
||||
name: 'plugin-test',
|
||||
},{
|
||||
name: 'plugin-test',
|
||||
},{
|
||||
name: 'plugin-test',
|
||||
}],
|
||||
loggedComponents: [
|
||||
'service-worker'
|
||||
]
|
||||
}
|
||||
var pver = 0
|
||||
global.LibResilientPluginConstructors.set('plugin-test', ()=>{
|
||||
pver += 1
|
||||
return {
|
||||
name: 'plugin-test',
|
||||
description: 'Simple plugin stub.',
|
||||
version: '0.0.' + pver
|
||||
}
|
||||
})
|
||||
require("../service-worker.js");
|
||||
expect(self.LibResilientPlugins.map(p=>p.name)).toEqual(['plugin-test', 'plugin-test', 'plugin-test'])
|
||||
expect(self.LibResilientPlugins.map(p=>p.version)).toEqual(['0.0.1', '0.0.2', '0.0.3'])
|
||||
})
|
||||
|
||||
test("should error out if all plugins fail", async () => {
|
||||
|
@ -701,11 +757,13 @@ describe("service-worker", () => {
|
|||
'service-worker'
|
||||
]
|
||||
}
|
||||
self.LibResilientPlugins.push({
|
||||
name: 'reject-all',
|
||||
description: 'Reject all requests.',
|
||||
version: '0.0.1',
|
||||
fetch: (request, init)=>{ return Promise.reject(request); }
|
||||
global.LibResilientPluginConstructors.set('reject-all', ()=>{
|
||||
return {
|
||||
name: 'reject-all',
|
||||
description: 'Reject all requests.',
|
||||
version: '0.0.1',
|
||||
fetch: (request, init)=>{ return Promise.reject(request); }
|
||||
}
|
||||
})
|
||||
require("../service-worker.js");
|
||||
expect.assertions(1)
|
||||
|
@ -725,26 +783,28 @@ describe("service-worker", () => {
|
|||
'service-worker'
|
||||
]
|
||||
}
|
||||
self.LibResilientPlugins.push({
|
||||
name: 'resolve-all',
|
||||
description: 'Resolve all requests.',
|
||||
version: '0.0.1',
|
||||
fetch: (request, init)=>{
|
||||
return Promise.resolve(
|
||||
new Response(
|
||||
new Blob(
|
||||
[JSON.stringify({ test: "success" })],
|
||||
{type: "application/json"}
|
||||
),
|
||||
{
|
||||
status: 200,
|
||||
statusText: "OK",
|
||||
headers: {
|
||||
'ETag': 'TestingETagHeader'
|
||||
},
|
||||
url: self.location.origin + '/test.json'
|
||||
})
|
||||
)
|
||||
global.LibResilientPluginConstructors.set('resolve-all', ()=>{
|
||||
return {
|
||||
name: 'resolve-all',
|
||||
description: 'Resolve all requests.',
|
||||
version: '0.0.1',
|
||||
fetch: (request, init)=>{
|
||||
return Promise.resolve(
|
||||
new Response(
|
||||
new Blob(
|
||||
[JSON.stringify({ test: "success" })],
|
||||
{type: "application/json"}
|
||||
),
|
||||
{
|
||||
status: 200,
|
||||
statusText: "OK",
|
||||
headers: {
|
||||
'ETag': 'TestingETagHeader'
|
||||
},
|
||||
url: self.location.origin + '/test.json'
|
||||
})
|
||||
)
|
||||
}
|
||||
}
|
||||
})
|
||||
var testClient = new Client()
|
||||
|
|
Ładowanie…
Reference in New Issue