From 5f0d91a42cfa4cf356444e3cccffc0d3a6c5bf77 Mon Sep 17 00:00:00 2001 From: Max Schmitt Date: Wed, 25 Oct 2023 19:33:00 +0200 Subject: [PATCH] test: add test for multipart keeping order (#27787) Test for https://github.com/microsoft/playwright/issues/27720 --- tests/library/browsercontext-fetch.spec.ts | 31 +++++++++++++++++++++- 1 file changed, 30 insertions(+), 1 deletion(-) diff --git a/tests/library/browsercontext-fetch.spec.ts b/tests/library/browsercontext-fetch.spec.ts index 3a3bdb0717..105eea9220 100644 --- a/tests/library/browsercontext-fetch.spec.ts +++ b/tests/library/browsercontext-fetch.spec.ts @@ -920,7 +920,7 @@ it('should support multipart/form-data', async function({ context, server }) { expect(response.status()).toBe(200); }); -it('should support multipart/form-data with ReadSream values', async function({ context, page, asset, server }) { +it('should support multipart/form-data with ReadStream values', async function({ context, page, asset, server }) { const formReceived = new Promise<{error: any, fields: formidable.Fields, files: Record, serverRequest: IncomingMessage}>(resolve => { server.setRoute('/empty.html', async (serverRequest, res) => { const form = new formidable.IncomingForm(); @@ -953,6 +953,35 @@ it('should support multipart/form-data with ReadSream values', async function({ expect(response.status()).toBe(200); }); +it('should support multipart/form-data and keep the order', async function({ context, page, asset, server }) { + const given = { + firstName: 'John', + lastName: 'Doe', + age: 27, + }; + given['foo'] = 'bar'; + const givenKeys = Object.keys(given); + const formReceived = new Promise<{error: any, fields: formidable.Fields}>(resolve => { + server.setRoute('/empty.html', async (serverRequest, res) => { + const form = new formidable.IncomingForm(); + form.parse(serverRequest, (error, fields, files) => { + server.serveFile(serverRequest, res); + resolve({ error, fields }); + }); + }); + }); + const [{ error, fields }, response] = await Promise.all([ + formReceived, + context.request.post(server.EMPTY_PAGE, { + multipart: given, + }) + ]); + expect(error).toBeFalsy(); + const actualKeys = Object.keys(fields); + expect(actualKeys).toEqual(givenKeys); + expect(response.status()).toBe(200); +}); + it('should serialize data to json regardless of content-type', async function({ context, server }) { const data = { firstName: 'John',