Files
2D6-Dungeon/src/data/contentHelpers.test.ts

69 lines
2.0 KiB
TypeScript

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");
});
});