From 76ba94bce60766b5ab89bf3b582339be81ae49cc Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Fri, 14 Jun 2024 13:30:22 -0700 Subject: [PATCH] test: postBody for intercepted fetch FormData with Blob (#31321) Fixes https://github.com/microsoft/playwright/issues/24077 --- tests/page/page-request-intercept.spec.ts | 36 +++++++++++++++++++++++ 1 file changed, 36 insertions(+) diff --git a/tests/page/page-request-intercept.spec.ts b/tests/page/page-request-intercept.spec.ts index 024919c898..e87d99a87a 100644 --- a/tests/page/page-request-intercept.spec.ts +++ b/tests/page/page-request-intercept.spec.ts @@ -281,3 +281,39 @@ it('should fulfill popup main request using alias', async ({ page, server, isEle ]); await expect(popup.locator('body')).toHaveText('hello'); }); + +it('request.postData is not null when fetching FormData with a Blob', { + annotation: { type: 'issue', description: 'https://github.com/microsoft/playwright/issues/24077' } +}, async ({ server, page, browserName, isElectron }) => { + it.fixme(isElectron, 'error: Browser context management is not supported.'); + it.fixme(browserName === 'webkit', 'The body is empty in WebKit when intercepting'); + await page.goto(server.EMPTY_PAGE); + await page.setContent(` + + + +`); + let resolvePostData; + const postDataPromise = new Promise(resolve => resolvePostData = resolve); + await page.route(server.PREFIX + '/upload', async (route, request) => { + expect(request.method()).toBe('POST'); + resolvePostData(await request.postData()); + await route.fulfill({ + status: 200, + body: 'ok', + }); + }); + await page.getByTestId('click-me').click(); + const postData = await postDataPromise; + expect(postData).toContain('Content-Disposition: form-data; name="file"; filename="blob"'); + expect(postData).toContain('\r\nhello\r\n'); +}); \ No newline at end of file