From 1ec84a1bad9f3813e44ce33c82bf0c3b1f97681e Mon Sep 17 00:00:00 2001 From: Sai Teja Bandaru Date: Fri, 12 Jun 2026 19:02:35 +0200 Subject: [PATCH 1/4] test: await ky post and add delete route test --- bun.lock | 1 + tests/routes/things/create.test.ts | 16 +++++++----- tests/routes/things/delete.test.ts | 42 ++++++++++++++++++++++++++++++ 3 files changed, 53 insertions(+), 6 deletions(-) create mode 100644 tests/routes/things/delete.test.ts diff --git a/bun.lock b/bun.lock index 7446eb6..1bee43e 100644 --- a/bun.lock +++ b/bun.lock @@ -1,5 +1,6 @@ { "lockfileVersion": 1, + "configVersion": 0, "workspaces": { "": { "name": "debug-api", diff --git a/tests/routes/things/create.test.ts b/tests/routes/things/create.test.ts index 65e9935..26fde9d 100644 --- a/tests/routes/things/create.test.ts +++ b/tests/routes/things/create.test.ts @@ -4,12 +4,16 @@ import { test, expect } from "bun:test" test("create a thing", async () => { const { ky } = await getTestServer() - ky.post("things/create", { - json: { - name: "Thing1", - description: "Thing1 Description", - }, - }) + const res = await ky + .post("things/create", { + json: { + name: "Thing1", + description: "Thing1 Description", + }, + }) + .json<{ ok: boolean }>() + + expect(res.ok).toBe(true) const data = await ky .get("things/list") diff --git a/tests/routes/things/delete.test.ts b/tests/routes/things/delete.test.ts new file mode 100644 index 0000000..55f545d --- /dev/null +++ b/tests/routes/things/delete.test.ts @@ -0,0 +1,42 @@ +import { getTestServer } from "tests/fixtures/get-test-server" +import { test, expect } from "bun:test" + +test("delete a thing", async () => { + const { ky } = await getTestServer() + + // 1. Create a thing first + const createRes = await ky + .post("things/create", { + json: { + name: "Thing to Delete", + description: "This thing will be deleted", + }, + }) + .json<{ ok: boolean }>() + + expect(createRes.ok).toBe(true) + + // 2. List the things to get its generated thing_id + const listBefore = await ky + .get("things/list") + .json<{ things: { thing_id: string; name: string }[] }>() + + expect(listBefore.things).toHaveLength(1) + const thingId = listBefore.things[0].thing_id + + // 3. Delete the thing using URL-encoded form data + const deleteRes = await ky + .post("things/delete", { + body: new URLSearchParams({ thing_id: thingId }), + }) + .json<{ ok: boolean }>() + + expect(deleteRes.ok).toBe(true) + + // 4. Verify that the list is empty now + const listAfter = await ky + .get("things/list") + .json<{ things: { thing_id: string; name: string }[] }>() + + expect(listAfter.things).toHaveLength(0) +}) From 579c8dee58d6afb7c1e1701c649b51d2ec32a2d6 Mon Sep 17 00:00:00 2001 From: Sai Teja Bandaru Date: Fri, 26 Jun 2026 14:26:48 +0200 Subject: [PATCH 2/4] test: tighten ky things route coverage --- tests/routes/things/create.test.ts | 10 +++++-- tests/routes/things/delete.test.ts | 31 ++++++++++++++++++++ tests/routes/things/list.test.ts | 46 ++++++++++++++++++++++++++++++ 3 files changed, 85 insertions(+), 2 deletions(-) create mode 100644 tests/routes/things/list.test.ts diff --git a/tests/routes/things/create.test.ts b/tests/routes/things/create.test.ts index 26fde9d..a2683a5 100644 --- a/tests/routes/things/create.test.ts +++ b/tests/routes/things/create.test.ts @@ -17,7 +17,13 @@ test("create a thing", async () => { const data = await ky .get("things/list") - .json<{ things: { name: string; description: string }[] }>() + .json<{ things: { thing_id: string; name: string; description: string }[] }>() - expect(data.things).toHaveLength(1) + expect(data.things).toEqual([ + { + thing_id: "0", + name: "Thing1", + description: "Thing1 Description", + }, + ]) }) diff --git a/tests/routes/things/delete.test.ts b/tests/routes/things/delete.test.ts index 55f545d..c2c87e5 100644 --- a/tests/routes/things/delete.test.ts +++ b/tests/routes/things/delete.test.ts @@ -40,3 +40,34 @@ test("delete a thing", async () => { expect(listAfter.things).toHaveLength(0) }) + +test("delete is a no-op for unknown thing ids", async () => { + const { ky } = await getTestServer() + + await ky.post("things/create", { + json: { + name: "Thing1", + description: "Thing1 Description", + }, + }) + + const deleteResponse = await ky + .post("things/delete", { + body: new URLSearchParams({ thing_id: "missing" }), + }) + .json<{ ok: boolean }>() + + expect(deleteResponse).toEqual({ ok: true }) + + const data = await ky.get("things/list").json<{ + things: { thing_id: string; name: string; description: string }[] + }>() + + expect(data.things).toEqual([ + { + thing_id: "0", + name: "Thing1", + description: "Thing1 Description", + }, + ]) +}) diff --git a/tests/routes/things/list.test.ts b/tests/routes/things/list.test.ts new file mode 100644 index 0000000..a9d4b7d --- /dev/null +++ b/tests/routes/things/list.test.ts @@ -0,0 +1,46 @@ +import { expect, test } from "bun:test" +import { getTestServer } from "tests/fixtures/get-test-server" + +test("list starts empty", async () => { + const { ky } = await getTestServer() + + const data = await ky.get("things/list").json<{ + things: { thing_id: string; name: string; description: string }[] + }>() + + expect(data.things).toEqual([]) +}) + +test("list preserves insertion order and generated ids", async () => { + const { ky } = await getTestServer() + + await ky.post("things/create", { + json: { + name: "Thing1", + description: "Thing1 Description", + }, + }) + await ky.post("things/create", { + json: { + name: "Thing2", + description: "Thing2 Description", + }, + }) + + const data = await ky.get("things/list").json<{ + things: { thing_id: string; name: string; description: string }[] + }>() + + expect(data.things).toEqual([ + { + thing_id: "0", + name: "Thing1", + description: "Thing1 Description", + }, + { + thing_id: "1", + name: "Thing2", + description: "Thing2 Description", + }, + ]) +}) From 4336b5314f561250a966b69eecc72c165ba4757c Mon Sep 17 00:00:00 2001 From: Sai Teja Bandaru Date: Tue, 30 Jun 2026 22:29:33 +0200 Subject: [PATCH 3/4] style: format code --- tests/routes/things/create.test.ts | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/tests/routes/things/create.test.ts b/tests/routes/things/create.test.ts index a2683a5..57c7183 100644 --- a/tests/routes/things/create.test.ts +++ b/tests/routes/things/create.test.ts @@ -17,7 +17,9 @@ test("create a thing", async () => { const data = await ky .get("things/list") - .json<{ things: { thing_id: string; name: string; description: string }[] }>() + .json<{ + things: { thing_id: string; name: string; description: string }[] + }>() expect(data.things).toEqual([ { From 30758134b46059681951c17354396f1936e1580e Mon Sep 17 00:00:00 2001 From: Sai Teja Bandaru Date: Tue, 30 Jun 2026 22:42:11 +0200 Subject: [PATCH 4/4] chore: format files --- tests/routes/things/create.test.ts | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/tests/routes/things/create.test.ts b/tests/routes/things/create.test.ts index 57c7183..b2cb970 100644 --- a/tests/routes/things/create.test.ts +++ b/tests/routes/things/create.test.ts @@ -15,11 +15,9 @@ test("create a thing", async () => { expect(res.ok).toBe(true) - const data = await ky - .get("things/list") - .json<{ - things: { thing_id: string; name: string; description: string }[] - }>() + const data = await ky.get("things/list").json<{ + things: { thing_id: string; name: string; description: string }[] + }>() expect(data.things).toEqual([ {