From 4e845e7b1dc1f18511eae105e6dea9cce942bd28 Mon Sep 17 00:00:00 2001 From: Yury Semikhatsky Date: Mon, 16 Oct 2023 16:33:49 -0700 Subject: [PATCH] fix(fetch): JSON.stringify on client (#27644) Fixes https://github.com/microsoft/playwright/issues/27602 --- packages/playwright-core/src/client/fetch.ts | 18 ++++++++++++++-- .../playwright-core/src/protocol/validator.ts | 2 +- packages/playwright-core/src/server/fetch.ts | 17 +-------------- packages/protocol/src/channels.ts | 4 ++-- packages/protocol/src/protocol.yml | 2 +- tests/library/global-fetch.spec.ts | 21 +++++++++++++++++++ 6 files changed, 42 insertions(+), 22 deletions(-) diff --git a/packages/playwright-core/src/client/fetch.ts b/packages/playwright-core/src/client/fetch.ts index 3bfeead355..307b92f3c3 100644 --- a/packages/playwright-core/src/client/fetch.ts +++ b/packages/playwright-core/src/client/fetch.ts @@ -168,13 +168,13 @@ export class APIRequestContext extends ChannelOwner { expect(serverRequest.rawHeaders).toContain('vaLUE'); await request.dispose(); }); + +it('should serialize post data on the client', async ({ playwright, server }) => { + const request = await playwright.request.newContext(); + const serverReq = server.waitForRequest('/empty.html'); + let onStack: boolean = true; + const postReq = request.post(server.EMPTY_PAGE, { + data: { + toJSON() { + if (!onStack) + throw new Error('Should not be called on the server'); + return { 'foo': 'bar' }; + } + } + }); + onStack = false; + await postReq; + const body = await (await serverReq).postBody; + expect(body.toString()).toBe('{"foo":"bar"}'); + // expect(serverRequest.rawHeaders).toContain('vaLUE'); + await request.dispose(); +});