import { describe, expect, it } from "vitest"; import { WOW335_HUNTER_PET_HAPPINESS_LEVEL_SIZE, wow335HunterPetAutoAttackDamageMultiplier, wow335HunterPetHappinessState, } from "./wow335HunterPetHappinessRuntime"; describe("WoW 3.3.5 Hunter pet happiness damage profile", () => { it("uses exact unhappy/content/happy threshold boundaries", () => { expect(WOW335_HUNTER_PET_HAPPINESS_LEVEL_SIZE).toBe(333_000); expect(wow335HunterPetHappinessState(0)).toBe("unhappy"); expect(wow335HunterPetHappinessState(332_999)).toBe("unhappy"); expect(wow335HunterPetHappinessState(333_000)).toBe("content"); expect(wow335HunterPetHappinessState(665_999)).toBe("content"); expect(wow335HunterPetHappinessState(666_000)).toBe("happy"); }); it("applies the stock 75% / 100% / 125% base auto-attack multipliers", () => { expect(wow335HunterPetAutoAttackDamageMultiplier(100_000)).toBe(0.75); expect(wow335HunterPetAutoAttackDamageMultiplier(500_000)).toBe(1); expect(wow335HunterPetAutoAttackDamageMultiplier(900_000)).toBe(1.25); }); it("handles invalid power values as zero happiness without producing non-finite multipliers", () => { for (const value of [Number.NaN, Number.POSITIVE_INFINITY, Number.NEGATIVE_INFINITY, -1]) { expect(wow335HunterPetHappinessState(value)).toBe("unhappy"); expect(wow335HunterPetAutoAttackDamageMultiplier(value)).toBe(0.75); } }); });