service-worker: testing if a failed fetch in first plugin does not stop a second configured plugin from working (ref. #8)

merge-requests/9/merge
Michał 'rysiek' Woźniak 2021-09-06 12:12:55 +00:00
rodzic 7bd024f2c7
commit 8148c76eb2
1 zmienionych plików z 86 dodań i 1 usunięć

Wyświetl plik

@ -109,6 +109,91 @@ describe("service-worker", () => {
expect(response.headers.get('X-LibResilient-ETag')).toEqual('TestingETagHeader')
});
test("failed fetch by first configured plugin should not affect a successful fetch by a second one", async () => {
self.LibResilientConfig = {
plugins: {
'reject-all': {},
'resolve-all': {}
},
loggedComponents: [
'service-worker'
]
}
let rejectingFetch = jest.fn((request, init)=>{ return Promise.reject(request); })
let resolvingFetch = jest.fn((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'
})
)
})
self.LibResilientPlugins.push({
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
})
require("../service-worker.js");
var response = await self.trigger('fetch', new Request('/test.json'))
expect(rejectingFetch).toHaveBeenCalled();
expect(resolvingFetch).toHaveBeenCalled();
expect(await response.json()).toEqual({ test: "success" })
});
test("defaultPluginTimeout should be respected", async () => {
jest.useFakeTimers()
self.LibResilientConfig = {
defaultPluginTimeout: 1000,
plugins: {
'resolve-with-timeout': {}
},
loggedComponents: [
'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)
})
}
})
require("../service-worker.js");
var response = self.trigger('fetch', new Request('/test.json'))
jest.advanceTimersByTime(1000);
expect.assertions(2)
try {
await response
} catch(e) {
expect(e.toString()).toBe("Error: LibResilient request using resolve-with-timeout timed out after 1000ms.")
}
expect(rwtCallback).not.toHaveBeenCalled()
});
test("making an external request should work and not go through the plugins", async () => {
global.fetch.mockImplementation((request, init) => {
return Promise.resolve(
@ -440,7 +525,7 @@ describe("service-worker", () => {
}
self.LibResilientPlugins.push({
name: 'resolve-all',
description: 'Reject all requests.',
description: 'Resolve all requests.',
version: '0.0.1',
fetch: (request, init)=>{
return Promise.resolve(