From 60b34e9091a19a0fc3172f452df1adc35fc37042 Mon Sep 17 00:00:00 2001 From: Ross Wollman Date: Mon, 11 Jul 2022 16:32:42 -0700 Subject: [PATCH] test: page-level request/response events with SW fetch handlers and interception (#15544) Relates #15474. --- tests/library/chromium/chromium.spec.ts | 33 +++++++++++++++++++++++++ 1 file changed, 33 insertions(+) diff --git a/tests/library/chromium/chromium.spec.ts b/tests/library/chromium/chromium.spec.ts index 61e006ef3b..8d105f2b5f 100644 --- a/tests/library/chromium/chromium.spec.ts +++ b/tests/library/chromium/chromium.spec.ts @@ -358,6 +358,39 @@ test('setOffline', async ({ context, page, server }) => { expect(error).toMatch(/REJECTED.*Failed to fetch/); }); +test('should emit page-level request event for respondWith', async ({ page, server }) => { + await page.goto(server.PREFIX + '/serviceworkers/fetchdummy/sw.html'); + await page.evaluate(() => window['activationPromise']); + + // Sanity check. + const [pageReq, swResponse] = await Promise.all([ + page.waitForEvent('request'), + page.evaluate(() => window['fetchDummy']('foo')), + ]); + expect(swResponse).toBe('responseFromServiceWorker:foo'); + expect(pageReq.url()).toMatch(/fetchdummy\/foo$/); + expect(pageReq.serviceWorker()).toBe(null); + expect((await pageReq.response()).fromServiceWorker()).toBe(true); +}); + +test('should emit page-level request event for respondWith when interception enabled', async ({ page, server, context }) => { + test.fixme(); + test.info().annotations.push({ type: 'issue', description: 'https://github.com/microsoft/playwright/issues/15474' }); + + await context.route('**', route => route.continue()); + await page.goto(server.PREFIX + '/serviceworkers/fetchdummy/sw.html'); + await page.evaluate(() => window['activationPromise']); + + // Sanity check. + const [pageReq, swResponse] = await Promise.all([ + page.waitForEvent('request'), + page.evaluate(() => window['fetchDummy']('foo')), + ]); + expect(swResponse).toBe('responseFromServiceWorker:foo'); + expect(pageReq.url()).toMatch(/fetchdummy\/foo$/); + expect(pageReq.serviceWorker()).toBe(null); + expect((await pageReq.response()).fromServiceWorker()).toBe(true); +}); test('setExtraHTTPHeaders', async ({ context, page, server }) => { const [worker] = await Promise.all([