Files
healer-man/src/game/romDruidCurrentCoaMechanics.test.ts
T
2026-10-02 10:38:12 -04:00

76 lines
2.7 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
ROM_COA_DRUID_ADVANCED_REBIRTH_ID,
ROM_COA_DRUID_AMULET_OF_LIGHT_ITEM_ID,
ROM_COA_DRUID_GOLDEN_AMULET_ITEM_ID,
ROM_COA_DRUID_REBIRTH_ID,
ROM_COA_DRUID_SPIRIT_GUIDANCE_ID,
ROM_COA_DRUID_SUPREME_REBIRTH_ID,
romCoaDruidRebirthDebtRule,
romCoaSpiritGuidanceFactionOutcome,
} from "./romDruidCurrentCoaMechanics";
describe("current CoA Druid faction-conversion and Rebirth rules", () => {
it("keeps Spirit Guidance's player-target restriction explicit", () => {
expect(ROM_COA_DRUID_SPIRIT_GUIDANCE_ID).toBe(493536);
expect(romCoaSpiritGuidanceFactionOutcome({
targetKind: "player",
casterReputation: 10,
})).toBe("player-target-prohibited");
});
it("converts an NPC only when caster reputation is nonnegative", () => {
expect(romCoaSpiritGuidanceFactionOutcome({
targetKind: "npc",
casterReputation: 0,
})).toBe("becomes-friendly");
expect(romCoaSpiritGuidanceFactionOutcome({
targetKind: "npc",
casterReputation: -1,
})).toBe("remains-hostile");
});
it("does not guess the conversion result when reputation is unavailable", () => {
expect(romCoaSpiritGuidanceFactionOutcome({
targetKind: "npc",
casterReputation: null,
})).toBe("unknown-reputation");
expect(romCoaSpiritGuidanceFactionOutcome({
targetKind: "npc",
casterReputation: Number.NaN,
})).toBe("unknown-reputation");
});
it("reports basic Rebirth's 30% baseline and leaves its extra amulet bonus unquantified", () => {
expect(romCoaDruidRebirthDebtRule(ROM_COA_DRUID_REBIRTH_ID)).toEqual({
debtReductionPercent: 30,
itemRule: {
kind: "optional-unquantified-bonus",
itemIds: [ROM_COA_DRUID_GOLDEN_AMULET_ITEM_ID, ROM_COA_DRUID_AMULET_OF_LIGHT_ITEM_ID],
},
extraDebtReductionPercent: null,
});
});
it("maps Advanced Rebirth to 45% with its required Amulet of Light", () => {
expect(romCoaDruidRebirthDebtRule(ROM_COA_DRUID_ADVANCED_REBIRTH_ID)).toEqual({
debtReductionPercent: 45,
itemRule: { kind: "required", itemId: ROM_COA_DRUID_AMULET_OF_LIGHT_ITEM_ID },
extraDebtReductionPercent: 0,
});
});
it("maps Supreme Rebirth to 75% with its required Golden Amulet", () => {
expect(romCoaDruidRebirthDebtRule(ROM_COA_DRUID_SUPREME_REBIRTH_ID)).toEqual({
debtReductionPercent: 75,
itemRule: { kind: "required", itemId: ROM_COA_DRUID_GOLDEN_AMULET_ITEM_ID },
extraDebtReductionPercent: 0,
});
});
it("does not map unrelated or unknown spell IDs", () => {
expect(romCoaDruidRebirthDebtRule(493538)).toBeNull();
expect(romCoaDruidRebirthDebtRule(0)).toBeNull();
});
});