From 5c6c5e633acb16b86c6d44fb24106dbc7c686761 Mon Sep 17 00:00:00 2001 From: roottool Date: Fri, 6 Mar 2026 01:03:20 +0900 Subject: [PATCH 1/2] test: add missing parse test cases for confirmed specs - Empty FormData returns data: {} and issues: [] - File values are stored as-is in data - Duplicate key appended 3+ times reports an issue per extra occurrence --- src/parse.test.ts | 37 +++++++++++++++++++++++++++++++++++++ 1 file changed, 37 insertions(+) diff --git a/src/parse.test.ts b/src/parse.test.ts index 2705022..0d50ad3 100644 --- a/src/parse.test.ts +++ b/src/parse.test.ts @@ -15,6 +15,27 @@ describe("valid input", () => { age: "20", }); }); + + it("returns empty data and no issues for empty FormData", () => { + const fd = new FormData(); + + const result = parse(fd); + + expect(result.issues).toEqual([]); + expect(result.data).toEqual({}); + }); + + it("stores File values in data", () => { + const fd = new FormData(); + const file = new File(["content"], "test.txt", { type: "text/plain" }); + fd.append("upload", file); + + const result = parse(fd); + + assert(result.data !== null); + expect(result.issues).toEqual([]); + expect(result.data.upload).toBeInstanceOf(File); + }); }); describe("duplicate key detection", () => { @@ -34,6 +55,22 @@ describe("duplicate key detection", () => { expect(issue.key).toBe("a"); }); + it("reports an issue for each occurrence beyond the first", () => { + const fd = new FormData(); + fd.append("a", "1"); + fd.append("a", "2"); + fd.append("a", "3"); + + const result = parse(fd); + + expect(result.data).toBeNull(); + expect(result.issues).toHaveLength(2); + for (const issue of result.issues) { + expect(issue.code).toBe("duplicate_key"); + expect(issue.key).toBe("a"); + } + }); + it("treats bracket notation as opaque keys", () => { const fd = new FormData(); fd.append("items[]", "1"); From e9fa2cdc318503c06ca5c154cb45be9fa9f2a59b Mon Sep 17 00:00:00 2001 From: roottool Date: Fri, 6 Mar 2026 01:04:39 +0900 Subject: [PATCH 2/2] fix: use bracket notation for index signature access in test --- src/parse.test.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/parse.test.ts b/src/parse.test.ts index 0d50ad3..be79b67 100644 --- a/src/parse.test.ts +++ b/src/parse.test.ts @@ -34,7 +34,7 @@ describe("valid input", () => { assert(result.data !== null); expect(result.issues).toEqual([]); - expect(result.data.upload).toBeInstanceOf(File); + expect(result.data["upload"]).toBeInstanceOf(File); }); });