import { describe, expect, it } from "vitest"; import { dungeonSpawnSelected, selectDungeonSessionPopulation } from "./dungeonSpawnSelection"; describe("dungeon spawn selection", () => { it("keeps ordinary spawns and honors source chance boundaries", () => { expect(dungeonSpawnSelected("deadmines", 1, { id: "ordinary" })).toBe(true); expect(dungeonSpawnSelected("deadmines", 1, { id: "never", spawnChance: 0 })).toBe(false); expect(dungeonSpawnSelected("deadmines", 1, { id: "always", spawnChance: 1 })).toBe(true); }); it("selects rare spawns deterministically within a dungeon session", () => { const results = Array.from({ length: 100 }, (_, sessionRevision) => ( dungeonSpawnSelected("blackrock-spire", sessionRevision, { id: "creature-43519", spawnChance: 0.15, }) )); expect(results.some(Boolean)).toBe(true); expect(results.some((selected) => !selected)).toBe(true); expect(results).toEqual(Array.from({ length: 100 }, (_, sessionRevision) => ( dungeonSpawnSelected("blackrock-spire", sessionRevision, { id: "creature-43519", spawnChance: 0.15, }) ))); }); it("filters static and roaming source populations with the same session rule", () => { const population = selectDungeonSessionPopulation("stockades", 4, [ { id: "ordinary", entityId: "guard", position: [0, 0, 0] }, { id: "removed", entityId: "rare", position: [1, 0, 0], spawnChance: 0 }, ], [{ id: "removed-patrol", name: "Rare Patrol", speed: 1, formationSource: "database-solo", spawnChance: 0, waypoints: [[0, 0, 0], [1, 0, 0]], members: [{ id: "member", entityId: "rare", role: "leader", formationOffset: [0, 0, 0] }], }]); expect(population.staticSpawns.map((spawn) => spawn.id)).toEqual(["ordinary"]); expect(population.roamingPacks).toEqual([]); }); });