import { describe, expect, it } from "vitest"; import { orderBossObjectives } from "../../scripts/runewaker-pipeline/lib/objective-order.mjs"; const bosses = [ { id: "boss-far", sourceSpawnId: 20, position: [20, 0, 0] as const }, { id: "boss-near", sourceSpawnId: 10, position: [2, 0, 0] as const }, ]; describe("RuneWaker boss objective ordering", () => { it("labels the distance fallback as non-authoritative", () => { const result = orderBossObjectives(bosses, [0, 0, 0]); expect(result.ordered.map((boss) => boss.sourceSpawnId)).toEqual([10, 20]); expect(result.provenance).toMatchObject({ authoritative: false, kind: "healerMan-distance-derived", }); }); it("accepts only a complete source-evidenced spawn order", () => { const result = orderBossObjectives(bosses, [0, 0, 0], { kind: "source-authored", spawnIds: [20, 10], evidence: ["Resource/luascript/example.lua:12"], }); expect(result.ordered.map((boss) => boss.sourceSpawnId)).toEqual([20, 10]); expect(result.provenance.authoritative).toBe(true); expect(() => orderBossObjectives(bosses, [0, 0, 0], { kind: "source-authored", spawnIds: [20], evidence: ["Resource/luascript/example.lua:12"], })).toThrow(/every runtime boss spawn exactly once/i); expect(() => orderBossObjectives(bosses, [0, 0, 0], { kind: "source-authored", spawnIds: [20, 10], evidence: [], })).toThrow(/requires nonempty evidence/i); }); });