Files
healer-man/src/game/runewakerObjectiveOrder.test.ts
T
2026-08-14 15:56:39 -04:00

40 lines
1.5 KiB
TypeScript

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