// Ported from apps/server/test (CR-014 Step 14.5): now runs on the engine. import { companyResponseSchema, errorResponseSchema } from "@deadhead/schema"; import { describe, expect, it } from "vitest"; import { companyName } from "../../src/game/names"; import { useTestApp, signUp, call, getState } from "../support"; const testApp = useTestApp(); const rename = async (name: string) => { const guest = await signUp(testApp().app); const before = (await getState(testApp().app, guest)).company.name; const response = await call(testApp().app, guest, "POST", "/api/company/name", { name }); return { guest, before, response }; }; describe("company name (Step 10K.5)", () => { it("starts with a name made from the world seed", async () => { const guest = await signUp(testApp().app); const state = await getState(testApp().app, guest); expect(state.company.name.length).toBeGreaterThanOrEqual(3); expect(companyName(42)).toBe(companyName(42)); const names = new Set(Array.from({ length: 30 }, (_, i) => companyName(i))); expect(names.size).toBeGreaterThan(1); }); it("saves a valid name, trimmed", async () => { const { guest, response } = await rename(" Rosa & Sons Haulage! "); expect(response.statusCode).toBe(200); expect(companyResponseSchema.parse(response.json()).company.name).toBe("Rosa & Sons Haulage!"); expect((await getState(testApp().app, guest)).company.name).toBe("Rosa & Sons Haulage!"); }); it.each([ ["too short", "Ab"], ["too long", "A".repeat(33)], ["blank after trimming", " "], ["disallowed characters", "Freight