Files
healer-man/src/game/bossBalanceOverrides.test.ts
2026-09-20 11:23:13 -04:00

52 lines
2.0 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
BOSS_BALANCE_OVERRIDES,
resolveBossBalanceOverride,
type BossBalanceOverride,
} from "./bossBalanceOverrides";
const overrides: readonly BossBalanceOverride[] = [
{ id: "all-levels", dungeonId: "test-dungeon", entityId: "test-boss",
healthScale: 0.9, damageScale: 0.8, reason: "test" },
{ id: "level-80", dungeonId: "test-dungeon", entityId: "test-boss",
minimumLevel: 80, maximumLevel: 80, damageScale: 0.5, reason: "test" },
];
describe("boss-specific balance overrides", () => {
it("composes broad and exact-level corrections for one boss", () => {
expect(resolveBossBalanceOverride("test-dungeon", "test-boss", 80, overrides)).toEqual({
healthScale: 0.9,
damageScale: 0.4,
matchedOverrideIds: ["all-levels", "level-80"],
});
expect(resolveBossBalanceOverride("test-dungeon", "test-boss", 70, overrides)).toEqual({
healthScale: 0.9,
damageScale: 0.8,
matchedOverrideIds: ["all-levels"],
});
});
it("matches the source dungeon while running in an isolated boss-testing room", () => {
expect(resolveBossBalanceOverride(
"boss-testing:test-dungeon:test-boss", "test-boss", 80, overrides,
).matchedOverrideIds).toEqual(["all-levels", "level-80"]);
});
it("leaves unrelated bosses and levels unchanged", () => {
expect(resolveBossBalanceOverride("another-dungeon", "test-boss", 80, overrides)).toEqual({
healthScale: 1,
damageScale: 1,
matchedOverrideIds: [],
});
});
it("ships the Drakos correction only at its audited level", () => {
expect(resolveBossBalanceOverride(
"boss-testing:the-oculus:entry-27654", "entry-27654", 80, BOSS_BALANCE_OVERRIDES,
)).toMatchObject({ damageScale: 0.45, matchedOverrideIds: ["level-80-drakos-pressure"] });
expect(resolveBossBalanceOverride(
"the-oculus", "entry-27654", 79, BOSS_BALANCE_OVERRIDES,
)).toMatchObject({ healthScale: 1, damageScale: 1, matchedOverrideIds: [] });
});
});