forked from phenom/healer-man
Release Healer Man 0.1.54
This commit is contained in:
1 parent
d6976e6ef6
commit
2dbb0acfc1
26 files changed
+1893
-912
No files matched your search
@@ -12,6 +12,7 @@ import {
|
||||
normalizeTalentRanks,
|
||||
spentTalentPoints,
|
||||
talentNodeById,
|
||||
talentNodesForTree,
|
||||
talentPointsForLevel,
|
||||
talentTreeById,
|
||||
} from "./talentCatalog";
|
||||
@@ -27,10 +28,13 @@ const EXPECTED_SPECIALIZATIONS = [
|
||||
["warrior", "Arms", "warrior-arms"],
|
||||
["warrior", "Fury", "warrior-fury"],
|
||||
["paladin", "Retribution", "paladin-retribution"],
|
||||
["hunter", "Beast Mastery", "hunter-beast-mastery"],
|
||||
["hunter", "Marksmanship", "hunter-marksmanship"],
|
||||
["hunter", "Survival", "hunter-survival"],
|
||||
["rogue", "Combat", "rogue-combat"],
|
||||
["rogue", "Assassination", "rogue-assassination"],
|
||||
["rogue", "Subtlety", "rogue-subtlety"],
|
||||
["priest", "Discipline", "priest-discipline"],
|
||||
["priest", "Shadow", "priest-shadow"],
|
||||
["death-knight", "Frost", "death-knight-frost"],
|
||||
["death-knight", "Unholy", "death-knight-unholy"],
|
||||
@@ -41,7 +45,9 @@ const EXPECTED_SPECIALIZATIONS = [
|
||||
["mage", "Frost", "mage-frost"],
|
||||
["warlock", "Affliction", "warlock-affliction"],
|
||||
["warlock", "Demonology", "warlock-demonology"],
|
||||
["warlock", "Destruction", "warlock-destruction"],
|
||||
["druid", "Balance", "druid-balance"],
|
||||
["druid", "Feral (Bear)", "druid-feral-combat"],
|
||||
["druid", "Feral (Cat)", "druid-feral-combat"],
|
||||
] as const satisfies readonly (readonly [ClassId, string, string])[];
|
||||
|
||||
@@ -87,6 +93,20 @@ describe("party talent specialization plans", () => {
|
||||
expect(selection.rank).toBeLessThanOrEqual(selection.maxRank);
|
||||
}
|
||||
}
|
||||
}, 15_000);
|
||||
|
||||
it("reaches every primary-tree capstone before branching into a secondary tree", () => {
|
||||
for (const { classId, specialization, primaryTreeId } of PARTY_TALENT_SPECIALIZATIONS) {
|
||||
const level60 = learnedPartyTalentSelections(classId, specialization, 60);
|
||||
const primary = level60.filter((selection) => selection.inPrimaryTree);
|
||||
const deepestRow = Math.max(...talentNodesForTree(primaryTreeId).map((node) => node.row));
|
||||
expect(primary).toHaveLength(51);
|
||||
expect(
|
||||
Math.max(...primary.map((selection) => talentNodeById(selection.nodeId)?.row ?? 0)),
|
||||
`${classId}:${specialization}`,
|
||||
)
|
||||
.toBe(deepestRow);
|
||||
}
|
||||
});
|
||||
|
||||
it("spends exactly the points available at every level from 1 through 80", () => {
|
||||
|
||||
Reference in new issue
Block a user