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); }); });