aboutsummaryrefslogtreecommitdiff
path: root/test/js/web/html/FormData.test.ts
diff options
context:
space:
mode:
authorGravatar Jarred Sumner <jarred@jarredsumner.com> 2023-05-31 19:17:01 -0700
committerGravatar GitHub <noreply@github.com> 2023-05-31 19:17:01 -0700
commitcb0f76aa73f6b85667b57015a77ac39d9c78aa0b (patch)
tree949bcc466b3afbbb69a070d35d2b814f0e66be40 /test/js/web/html/FormData.test.ts
parent79d7b2075e63f79ec6d1d2a904178969eb701f0b (diff)
parent110d0752f333e4c32c9226e4a94e93f18837f9c7 (diff)
downloadbun-cb0f76aa73f6b85667b57015a77ac39d9c78aa0b.tar.gz
bun-cb0f76aa73f6b85667b57015a77ac39d9c78aa0b.tar.zst
bun-cb0f76aa73f6b85667b57015a77ac39d9c78aa0b.zip
Merge branch 'main' into jarred/port
Diffstat (limited to 'test/js/web/html/FormData.test.ts')
-rw-r--r--test/js/web/html/FormData.test.ts119
1 files changed, 119 insertions, 0 deletions
diff --git a/test/js/web/html/FormData.test.ts b/test/js/web/html/FormData.test.ts
index abb298c1a..cbaf5aaa7 100644
--- a/test/js/web/html/FormData.test.ts
+++ b/test/js/web/html/FormData.test.ts
@@ -302,6 +302,125 @@ describe("FormData", () => {
server.stop(true);
});
+ for (let useRequestConstructor of [true, false]) {
+ describe(useRequestConstructor ? "Request constructor" : "fetch()", () => {
+ function send(args: Parameters<typeof fetch>) {
+ if (useRequestConstructor) {
+ return fetch(new Request(...args));
+ } else {
+ return fetch(...args);
+ }
+ }
+ for (let headers of [{}, undefined, { headers: { X: "Y" } }]) {
+ describe("headers: " + Bun.inspect(headers).replaceAll(/([\n ])/gim, ""), () => {
+ it("send on HTTP server with FormData & Blob (roundtrip)", async () => {
+ let contentType = "";
+ const server = Bun.serve({
+ port: 0,
+ development: false,
+ async fetch(req) {
+ const formData = await req.formData();
+ contentType = req.headers.get("Content-Type")!;
+ return new Response(formData);
+ },
+ });
+
+ const form = new FormData();
+ form.append("foo", new Blob(["baz"], { type: "text/plain" }), "bar");
+ form.append("bar", "baz");
+
+ // @ts-ignore
+ const reqBody = [
+ `http://${server.hostname}:${server.port}`,
+ {
+ body: form,
+
+ headers,
+ method: "POST",
+ },
+ ];
+ const res = await send(reqBody);
+ const body = await res.formData();
+ expect(await (body.get("foo") as Blob).text()).toBe("baz");
+ expect(body.get("bar")).toBe("baz");
+ server.stop(true);
+ });
+
+ it("send on HTTP server with FormData & Bun.file (roundtrip)", async () => {
+ let contentType = "";
+ const server = Bun.serve({
+ port: 0,
+ development: false,
+ async fetch(req) {
+ const formData = await req.formData();
+ contentType = req.headers.get("Content-Type")!;
+ return new Response(formData);
+ },
+ });
+
+ const form = new FormData();
+ const file = Bun.file(import.meta.dir + "/form-data-fixture.txt");
+ const text = await file.text();
+ form.append("foo", file);
+ form.append("bar", "baz");
+
+ // @ts-ignore
+ const reqBody = [
+ `http://${server.hostname}:${server.port}`,
+ {
+ body: form,
+
+ headers,
+ method: "POST",
+ },
+ ];
+ const res = await send(reqBody);
+ const body = await res.formData();
+ expect(await (body.get("foo") as Blob).text()).toBe(text);
+ expect(contentType).toContain("multipart/form-data");
+ expect(body.get("bar")).toBe("baz");
+ expect(contentType).toContain("multipart/form-data");
+
+ server.stop(true);
+ });
+
+ it("send on HTTP server with FormData (roundtrip)", async () => {
+ let contentType = "";
+ const server = Bun.serve({
+ port: 0,
+ development: false,
+ async fetch(req) {
+ const formData = await req.formData();
+ contentType = req.headers.get("Content-Type")!;
+ return new Response(formData);
+ },
+ });
+
+ const form = new FormData();
+ form.append("foo", "boop");
+ form.append("bar", "baz");
+
+ // @ts-ignore
+ const reqBody = [
+ `http://${server.hostname}:${server.port}`,
+ {
+ body: form,
+
+ headers,
+ method: "POST",
+ },
+ ];
+ const res = await send(reqBody);
+ const body = await res.formData();
+ expect(contentType).toContain("multipart/form-data");
+ expect(body.get("foo")).toBe("boop");
+ expect(body.get("bar")).toBe("baz");
+ server.stop(true);
+ });
+ });
+ }
+ });
+ }
describe("Bun.file support", () => {
describe("roundtrip", () => {
const path = import.meta.dir + "/form-data-fixture.txt";