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

67 lines
2.2 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
ROM_COA_KNIGHT_ROGUE_GODS_SWORD_ID,
ROM_COA_KNIGHT_ROGUE_GODS_SWORD_OFFHAND_DPS_COEFFICIENT,
romCoaKnightRogueGodsSwordBonusLightDamage,
type RomCoaKnightRogueGodsSwordInput,
} from "./romKnightGodsSwordCoaMechanics";
const eligibleInput: RomCoaKnightRogueGodsSwordInput = {
classId: "rom-knight",
secondaryClassId: "rom-rogue",
learnedPassiveSpellIds: [ROM_COA_KNIGHT_ROGUE_GODS_SWORD_ID],
landedOffensivePhysicalAbilityDamageEvent: true,
offhandWeaponDps: 100,
};
describe("current CoA Knight/Rogue God's Sword passive", () => {
it("adds 350% of offhand weapon DPS as separate Light damage", () => {
expect(ROM_COA_KNIGHT_ROGUE_GODS_SWORD_OFFHAND_DPS_COEFFICIENT).toBe(3.5);
expect(romCoaKnightRogueGodsSwordBonusLightDamage(eligibleInput)).toBe(350);
expect(romCoaKnightRogueGodsSwordBonusLightDamage({
...eligibleInput,
offhandWeaponDps: 12.5,
})).toBe(43.75);
});
it("requires the Knight/Rogue pairing and learned passive", () => {
expect(romCoaKnightRogueGodsSwordBonusLightDamage({
...eligibleInput,
classId: "rom-warrior",
})).toBe(0);
expect(romCoaKnightRogueGodsSwordBonusLightDamage({
...eligibleInput,
secondaryClassId: "rom-warrior",
})).toBe(0);
expect(romCoaKnightRogueGodsSwordBonusLightDamage({
...eligibleInput,
learnedPassiveSpellIds: [],
})).toBe(0);
expect(romCoaKnightRogueGodsSwordBonusLightDamage({
...eligibleInput,
learnedPassiveSpellIds: [491_620],
})).toBe(0);
});
it("requires a landed offensive physical-ability damage event", () => {
expect(romCoaKnightRogueGodsSwordBonusLightDamage({
...eligibleInput,
landedOffensivePhysicalAbilityDamageEvent: false,
})).toBe(0);
});
it("requires positive finite offhand DPS and returns only finite damage", () => {
for (const offhandWeaponDps of [0, -1, Number.NaN, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY]) {
expect(romCoaKnightRogueGodsSwordBonusLightDamage({
...eligibleInput,
offhandWeaponDps,
})).toBe(0);
}
expect(romCoaKnightRogueGodsSwordBonusLightDamage({
...eligibleInput,
offhandWeaponDps: Number.MAX_VALUE,
})).toBe(0);
});
});