forked from phenom/healer-man
40 lines
1.5 KiB
TypeScript
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);
|
|
});
|
|
});
|