69 lines
2.0 KiB
TypeScript
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");
|
|
});
|
|
});
|