From f2ad97a5b51c54983a03572d1bcc3391b2eaf0e3 Mon Sep 17 00:00:00 2001 From: Ben Dixon Date: Thu, 16 Apr 2026 10:49:12 +0100 Subject: [PATCH 1/3] Added initial basic KV `ArrayBuffer` tests --- packages/miniflare/test/plugins/kv/index.spec.ts | 14 ++++++++++++++ .../test/plugins/local-explorer/kv.spec.ts | 13 +++++++++++++ 2 files changed, 27 insertions(+) diff --git a/packages/miniflare/test/plugins/kv/index.spec.ts b/packages/miniflare/test/plugins/kv/index.spec.ts index b540974570..b51f93c6d6 100644 --- a/packages/miniflare/test/plugins/kv/index.spec.ts +++ b/packages/miniflare/test/plugins/kv/index.spec.ts @@ -117,6 +117,20 @@ test("get: returns value", async ({ expect }) => { expect(result).toBe("value"); }); +test("get: returns ArrayBuffer values", async ({ expect }) => { + const { kv } = ctx; + const bytes = Uint8Array.from([0, 1, 2, 127, 128, 254, 255]); + await kv.put("array-buffer-key", bytes.buffer); + + const result = await kv.get("array-buffer-key", "arrayBuffer"); + expect(result).not.toBeNull(); + if (result === null) { + throw new Error("Expected array-buffer-key to be present in KV"); + } + + expect(new Uint8Array(result)).toEqual(bytes); +}); + test("bulk get: returns value", async ({ expect }) => { const { kv } = ctx; await kv.put("key1", "value1"); diff --git a/packages/miniflare/test/plugins/local-explorer/kv.spec.ts b/packages/miniflare/test/plugins/local-explorer/kv.spec.ts index 1b72a00928..02b95cd929 100644 --- a/packages/miniflare/test/plugins/local-explorer/kv.spec.ts +++ b/packages/miniflare/test/plugins/local-explorer/kv.spec.ts @@ -260,6 +260,19 @@ describe("KV API", () => { expect(response.status).toBe(200); expect(await response.text()).toBe("special-value"); }); + + test("returns raw bytes for ArrayBuffer values", async ({ expect }) => { + const kv = await mf.getKVNamespace("TEST_KV"); + const bytes = Uint8Array.from([0, 1, 2, 127, 128, 254, 255]); + await kv.put("binary-get-key", bytes.buffer); + + const response = await mf.dispatchFetch( + `${BASE_URL}/storage/kv/namespaces/test-kv-id/values/binary-get-key` + ); + + expect(response.status).toBe(200); + expect(new Uint8Array(await response.arrayBuffer())).toEqual(bytes); + }); }); describe("PUT /storage/kv/namespaces/:namespaceId/values/:keyName", () => { From f1d084d3c4a2cd5a92f04d7f63e154a79e616e2f Mon Sep 17 00:00:00 2001 From: Ben Dixon Date: Thu, 16 Apr 2026 10:50:21 +0100 Subject: [PATCH 2/3] Added initial basic KV stream tests --- .../miniflare/test/plugins/kv/index.spec.ts | 16 +++++++++++ .../test/plugins/local-explorer/kv.spec.ts | 27 +++++++++++++++++++ 2 files changed, 43 insertions(+) diff --git a/packages/miniflare/test/plugins/kv/index.spec.ts b/packages/miniflare/test/plugins/kv/index.spec.ts index b51f93c6d6..f6b3155b22 100644 --- a/packages/miniflare/test/plugins/kv/index.spec.ts +++ b/packages/miniflare/test/plugins/kv/index.spec.ts @@ -131,6 +131,22 @@ test("get: returns ArrayBuffer values", async ({ expect }) => { expect(new Uint8Array(result)).toEqual(bytes); }); +test("get: returns stream values", async ({ expect }) => { + const { kv } = ctx; + const bytes = Uint8Array.from([255, 0, 10, 20, 30, 200]); + await kv.put("stream-key", new Blob([bytes]).stream()); + + const result = await kv.get("stream-key", "stream"); + expect(result).not.toBeNull(); + if (result === null) { + throw new Error("Expected stream-key to be present in KV"); + } + + expect(new Uint8Array(await new Response(result).arrayBuffer())).toEqual( + bytes + ); +}); + test("bulk get: returns value", async ({ expect }) => { const { kv } = ctx; await kv.put("key1", "value1"); diff --git a/packages/miniflare/test/plugins/local-explorer/kv.spec.ts b/packages/miniflare/test/plugins/local-explorer/kv.spec.ts index 02b95cd929..a53b694515 100644 --- a/packages/miniflare/test/plugins/local-explorer/kv.spec.ts +++ b/packages/miniflare/test/plugins/local-explorer/kv.spec.ts @@ -329,6 +329,33 @@ describe("KV API", () => { errors: [expect.objectContaining({ code: 10013 })], }); }); + + test("writes streamed binary values", async ({ expect }) => { + const bytes = Uint8Array.from([255, 0, 10, 20, 30, 200]); + const response = await mf.dispatchFetch( + `${BASE_URL}/storage/kv/namespaces/test-kv-id/values/put-stream-key`, + { + body: new Blob([bytes]).stream(), + duplex: "half", + headers: { + "Content-Type": "application/octet-stream", + }, + method: "PUT", + } + ); + + expect(response.status).toBe(200); + expect(await response.json()).toMatchObject({ success: true }); + + const kv = await mf.getKVNamespace("TEST_KV"); + const stored = await kv.get("put-stream-key", { type: "arrayBuffer" }); + + expect(stored).not.toBeNull(); + if (stored === null) { + throw new Error("Expected put-stream-key to be stored in KV"); + } + expect(new Uint8Array(stored)).toEqual(bytes); + }); }); describe("DELETE /storage/kv/namespaces/:namespaceId/values/:keyName", () => { From d3d5975fba70ef1e08d704a3242293617d5038a3 Mon Sep 17 00:00:00 2001 From: Ben Dixon Date: Wed, 22 Apr 2026 14:23:40 +0100 Subject: [PATCH 3/3] Removed type guard errors from KV tests --- packages/miniflare/test/plugins/kv/index.spec.ts | 11 +---------- 1 file changed, 1 insertion(+), 10 deletions(-) diff --git a/packages/miniflare/test/plugins/kv/index.spec.ts b/packages/miniflare/test/plugins/kv/index.spec.ts index f6b3155b22..bb16aed11c 100644 --- a/packages/miniflare/test/plugins/kv/index.spec.ts +++ b/packages/miniflare/test/plugins/kv/index.spec.ts @@ -124,11 +124,7 @@ test("get: returns ArrayBuffer values", async ({ expect }) => { const result = await kv.get("array-buffer-key", "arrayBuffer"); expect(result).not.toBeNull(); - if (result === null) { - throw new Error("Expected array-buffer-key to be present in KV"); - } - - expect(new Uint8Array(result)).toEqual(bytes); + expect(new Uint8Array(result as NonNullable)).toEqual(bytes); }); test("get: returns stream values", async ({ expect }) => { @@ -137,11 +133,6 @@ test("get: returns stream values", async ({ expect }) => { await kv.put("stream-key", new Blob([bytes]).stream()); const result = await kv.get("stream-key", "stream"); - expect(result).not.toBeNull(); - if (result === null) { - throw new Error("Expected stream-key to be present in KV"); - } - expect(new Uint8Array(await new Response(result).arrayBuffer())).toEqual( bytes );