47 lines
2.0 KiB
TypeScript
47 lines
2.0 KiB
TypeScript
import { companyResponseSchema, errorResponseSchema } from "@deadhead/schema";
|
|
import { describe, expect, it } from "vitest";
|
|
import { companyName } from "../src/game/names";
|
|
import { useTestDatabase } from "./db";
|
|
import { call, getState, signUp, useTestApp } from "./game";
|
|
|
|
const database = useTestDatabase();
|
|
const testApp = useTestApp(database);
|
|
|
|
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 <script>"],
|
|
["emoji", "Space 🚀 Co"],
|
|
])("rejects a name that is %s, changing nothing", async (_why, name) => {
|
|
const { guest, before, response } = await rename(name);
|
|
expect(response.statusCode).toBe(400);
|
|
expect(errorResponseSchema.parse(response.json()).error.code).toBe("validation-error");
|
|
expect((await getState(testApp().app, guest)).company.name).toBe(before);
|
|
});
|
|
});
|