import { describe, expect, it } from "vitest"; import { ROM_WARLOCK_MAGE_SOUL_BRAND, romWarlockMageSoulBrandEffects, type RomWarlockMageSoulBrandBuild, } from "./romWarlockMageSoulBrand"; const build: RomWarlockMageSoulBrandBuild = { classId: "rom-warlock", secondaryClassId: "rom-mage", learnedPassiveSpellIds: [498705], }; describe("Warlock/Mage Soul Brand CoA helper", () => { it("adds a four-stack +2% elemental damage-taken debuff and 1 Psi on Fire damage", () => { expect(romWarlockMageSoulBrandEffects(build, { school: "fire", damageLanded: true })).toEqual([ expect.objectContaining({ kind: "apply-aura", recipient: "ability-target", aura: expect.objectContaining({ id: "rom-warlock-mage-soul-brand-498705", disposition: "debuff", durationMs: 20_000, maxStacks: 4, stackBehavior: "add", modifiers: expect.arrayContaining([ ...ROM_WARLOCK_MAGE_SOUL_BRAND.elementalDamageSchools.map((school) => expect.objectContaining({ kind: "damage", direction: "taken", school, operation: "percent", value: 0.02, perStack: true, })), ]), }), }), { kind: "resource", resource: "psi", amount: 1 }, ]); }); it("accepts landed Fire DoT pulses and rejects misses or other schools", () => { expect(romWarlockMageSoulBrandEffects(build, { school: "fire", damageLanded: true, periodic: true, })).not.toBeNull(); expect(romWarlockMageSoulBrandEffects(build, { school: "fire", damageLanded: false })).toBeNull(); expect(romWarlockMageSoulBrandEffects(build, { school: "shadow", damageLanded: true })).toBeNull(); }); it("requires the exact Warlock/Mage pair and learned passive", () => { expect(romWarlockMageSoulBrandEffects({ ...build, secondaryClassId: "rom-priest" }, { school: "fire", damageLanded: true, })).toBeNull(); expect(romWarlockMageSoulBrandEffects({ ...build, classId: "rom-mage" }, { school: "fire", damageLanded: true, })).toBeNull(); expect(romWarlockMageSoulBrandEffects({ ...build, learnedPassiveSpellIds: [] }, { school: "fire", damageLanded: true, })).toBeNull(); }); });