import { describe, expect, it } from "vitest"; import { sampleContentPack } from "@/data/sampleContentPack"; import { createStartingAdventurer, getCharacterCreationOptions } from "./character"; describe("character creation", () => { it("exposes legal starting options from the content pack", () => { const options = getCharacterCreationOptions(sampleContentPack); expect(options.weapons).toHaveLength(1); expect(options.armour).toHaveLength(1); expect(options.scrolls).toHaveLength(1); }); it("builds a valid starting adventurer from legal choices", () => { const adventurer = createStartingAdventurer(sampleContentPack, { name: "Mira", weaponId: "weapon.short-sword", armourId: "armour.leather-vest", scrollId: "scroll.lesser-heal", }); expect(adventurer.name).toBe("Mira"); expect(adventurer.level).toBe(1); expect(adventurer.stats.shift).toBe(2); expect(adventurer.manoeuvreIds).toEqual([ "manoeuvre.exact-strike", "manoeuvre.guard-break", ]); expect(adventurer.inventory.rationCount).toBe(3); expect(adventurer.inventory.carried).toEqual( expect.arrayContaining([ expect.objectContaining({ definitionId: "potion.healing", quantity: 1 }), expect.objectContaining({ definitionId: "scroll.lesser-heal", quantity: 1 }), ]), ); }); it("rejects an empty adventurer name", () => { expect(() => createStartingAdventurer(sampleContentPack, { name: " ", weaponId: "weapon.short-sword", armourId: "armour.leather-vest", scrollId: "scroll.lesser-heal", }), ).toThrow("Adventurer name is required."); }); });