import { afterEach, beforeEach, describe, expect, test } from "bun:test"; import type { AppWithContext } from "../app"; import { buildApp } from "../app"; import { createUser } from "../users/user-repository"; let app: AppWithContext; let employeeCookie = ""; function firstHeader(value: string | string[] | undefined) { return Array.isArray(value) ? (value[0] ?? "") : value ?? ""; } async function login(username: string) { const response = await app.inject({ method: "POST", url: "/api/login", payload: { username } }); return firstHeader(response.headers["set-cookie"]); } beforeEach(async () => { app = await buildApp(":memory:"); await createUser(app.dbContext, { username: "dev-employee", name: "Dev Employee", email: "dev.employee@example.com", role: "employee" }); employeeCookie = await login("dev-employee"); }); afterEach(async () => { await app.close(); }); describe("assignment 1 search behavior", () => { test("searches orders case-insensitively by customer name", async () => { const response = await app.inject({ method: "GET", url: "/api/orders?query=JOHN", headers: { cookie: employeeCookie } }); const orders = response.json(); const orderNumbers = orders.map((order: { orderNumber: string }) => order.orderNumber); expect(response.statusCode).toBe(200); expect(orderNumbers).toContain("ORD-1001"); expect(orderNumbers).toContain("ORD-1003"); }); });