import { describe, expect, it } from "vitest"; import { lookupTable } from "@/rules/tables"; import { findCreatureByName, findItemById, findRoomTemplateForLookup, findTableByCode, } from "./contentHelpers"; import { sampleContentPack } from "./sampleContentPack"; function createSequenceRoller(values: number[]) { let index = 0; return () => { const next = values[index]; index += 1; return next; }; } describe("level 1 content helpers", () => { it("finds encoded level 1 encounter tables by code", () => { const table = findTableByCode(sampleContentPack, "L1A"); expect(table.name).toBe("Level 1 Animals"); expect(table.entries).toHaveLength(6); }); it("resolves a small room template from a table lookup", () => { const lookup = lookupTable(findTableByCode(sampleContentPack, "L1SR"), { roller: createSequenceRoller([3, 4]), }); const roomTemplate = findRoomTemplateForLookup(sampleContentPack, lookup); expect(lookup.roll.total).toBe(7); expect(roomTemplate.title).toBe("Murtayne Effigy"); expect(roomTemplate.roomClass).toBe("small"); }); it("resolves a large room template from a table lookup", () => { const lookup = lookupTable(findTableByCode(sampleContentPack, "L1LR"), { roller: createSequenceRoller([5, 5]), }); const roomTemplate = findRoomTemplateForLookup(sampleContentPack, lookup); expect(lookup.roll.total).toBe(10); expect(roomTemplate.title).toBe("Slate Shrine"); expect(roomTemplate.roomClass).toBe("large"); }); it("finds a creature definition by display name", () => { const creature = findCreatureByName(sampleContentPack, "Guard"); expect(creature.id).toBe("creature.level1.guard"); expect(creature.hp).toBeGreaterThan(0); }); it("finds a loot item definition by id", () => { const item = findItemById(sampleContentPack, "item.silver-clasp"); expect(item.name).toBe("Silver Clasp"); expect(item.itemType).toBe("treasure"); }); });