From 0de6d1edc4c902044744cdf832113f9aeb167fc5 Mon Sep 17 00:00:00 2001 From: Luca Casonato Date: Tue, 9 Nov 2021 12:10:40 +0100 Subject: fix(fetch): set content-length for empty POST/PUT (#12703) This commit changes `fetch` to set `content-length: 0` on POST and PUT requests with no body. --- cli/tests/unit/fetch_test.ts | 58 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 58 insertions(+) (limited to 'cli/tests') diff --git a/cli/tests/unit/fetch_test.ts b/cli/tests/unit/fetch_test.ts index 98134728e..8fe8db17e 100644 --- a/cli/tests/unit/fetch_test.ts +++ b/cli/tests/unit/fetch_test.ts @@ -640,6 +640,7 @@ unitTest( const actual = new TextDecoder().decode((await bufPromise).bytes()); const expected = [ "POST /blah HTTP/1.1\r\n", + "content-length: 0\r\n", "hello: World\r\n", "foo: Bar\r\n", "accept: */*\r\n", @@ -1416,3 +1417,60 @@ unitTest( assertEquals(await res.text(), fixture); }, ); + +unitTest( + { permissions: { net: true } }, + async function fetchContentLengthPost() { + const response = await fetch("http://localhost:4545/content_length", { + method: "POST", + }); + const length = await response.text(); + assertEquals(length, 'Some("0")'); + }, +); + +unitTest( + { permissions: { net: true } }, + async function fetchContentLengthPut() { + const response = await fetch("http://localhost:4545/content_length", { + method: "PUT", + }); + const length = await response.text(); + assertEquals(length, 'Some("0")'); + }, +); + +unitTest( + { permissions: { net: true } }, + async function fetchContentLengthPatch() { + const response = await fetch("http://localhost:4545/content_length", { + method: "PATCH", + }); + const length = await response.text(); + assertEquals(length, "None"); + }, +); + +unitTest( + { permissions: { net: true } }, + async function fetchContentLengthPostWithStringBody() { + const response = await fetch("http://localhost:4545/content_length", { + method: "POST", + body: "Hey!", + }); + const length = await response.text(); + assertEquals(length, 'Some("4")'); + }, +); + +unitTest( + { permissions: { net: true } }, + async function fetchContentLengthPostWithBufferBody() { + const response = await fetch("http://localhost:4545/content_length", { + method: "POST", + body: new TextEncoder().encode("Hey!"), + }); + const length = await response.text(); + assertEquals(length, 'Some("4")'); + }, +); -- cgit v1.2.3