67 lines
2.2 KiB
TypeScript
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);
|
|
});
|
|
});
|