diff --git a/apps/api/src/orders/order-repository.ts b/apps/api/src/orders/order-repository.ts index 5a904e1..21cd809 100644 --- a/apps/api/src/orders/order-repository.ts +++ b/apps/api/src/orders/order-repository.ts @@ -37,11 +37,13 @@ function toOrderItemDetail(row: { export async function listOrderSummaries(context: DatabaseContext, query?: string) { const search = query?.trim(); + // Support staff type search terms in any case. instr() is case-sensitive, so compare lowercased + // values; LIKE is avoided because it would treat % and _ in the search text as wildcards. const filters = search ? or( - sql`instr(${orders.orderNumber}, ${search}) > 0`, - sql`instr(${users.name}, ${search}) > 0`, - sql`instr(${users.email}, ${search}) > 0` + sql`instr(lower(${orders.orderNumber}), lower(${search})) > 0`, + sql`instr(lower(${users.name}), lower(${search})) > 0`, + sql`instr(lower(${users.email}), lower(${search})) > 0` ) : undefined; diff --git a/apps/api/src/orders/orders-routes.test.ts b/apps/api/src/orders/orders-routes.test.ts index 9266907..8885282 100644 --- a/apps/api/src/orders/orders-routes.test.ts +++ b/apps/api/src/orders/orders-routes.test.ts @@ -44,6 +44,20 @@ describe("order routes", () => { expect(response.json()).toHaveLength(7); }); + test("finds orders by customer name regardless of letter case", async () => { + const response = await app.inject({ method: "GET", url: "/api/orders?query=JOHN", headers: { cookie: employeeCookie } }); + + expect(response.statusCode).toBe(200); + expect(response.json().map((order: { orderNumber: string }) => order.orderNumber)).toEqual(["ORD-1001", "ORD-1003"]); + }); + + test("finds orders by order number regardless of letter case", async () => { + const response = await app.inject({ method: "GET", url: "/api/orders?query=ord-1001", headers: { cookie: employeeCookie } }); + + expect(response.statusCode).toBe(200); + expect(response.json().map((order: { orderNumber: string }) => order.orderNumber)).toEqual(["ORD-1001"]); + }); + test("returns order detail", async () => { const response = await app.inject({ method: "GET", url: "/api/orders/order_1", headers: { cookie: employeeCookie } }); const order = response.json();