62 lines
2.3 KiB
TypeScript
62 lines
2.3 KiB
TypeScript
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();
|
|
});
|
|
});
|