Update Healer Man server
This commit is contained in:
1 parent
f8314e7de1
commit
1fedb9368d
76 files changed
+20556
-2523
No files matched your search
@@ -16,6 +16,7 @@ import {
|
||||
import { spentTalentPoints, talentPointsForLevel, talentTreeById } from "./talentCatalog";
|
||||
import type { InventoryItem } from "./lootTypes";
|
||||
import { EMPTY_ITEM_STATS } from "./itemStats";
|
||||
import { DEFAULT_COMPANION_SPEC_READINESS_POLICY } from "./companionSpecReadiness";
|
||||
|
||||
describe("dungeon party composition", () => {
|
||||
beforeEach(() => usePartyStore.setState({
|
||||
@@ -46,6 +47,53 @@ describe("dungeon party composition", () => {
|
||||
}
|
||||
});
|
||||
|
||||
it("uses only the five Ready Playerbots identities by default", () => {
|
||||
const party = createDungeonParty("ready-only", 80, "damage");
|
||||
expect(party.map((member) => member.name)).toEqual(expect.arrayContaining(["Aldren", "Quorin"]));
|
||||
expect(party.every((member) => ["Aldren", "Quorin", "Liora", "Xavian", "Orin"].includes(member.name))).toBe(true);
|
||||
expect(new Set(party.filter((member) => member.role === "damage").map((member) => member.specializationId)).size)
|
||||
.toBe(party.filter((member) => member.role === "damage").length);
|
||||
});
|
||||
|
||||
it("adds Beta specs only when opted in and still excludes Needs Testing", () => {
|
||||
const policy = {
|
||||
schemaVersion: 1 as const,
|
||||
statuses: {
|
||||
...DEFAULT_COMPANION_SPEC_READINESS_POLICY.statuses,
|
||||
"mage:arcane": "beta" as const,
|
||||
},
|
||||
};
|
||||
const defaultNames = new Set<string>();
|
||||
const betaNames = new Set<string>();
|
||||
for (let seed = 0; seed < 40; seed += 1) {
|
||||
for (const member of createDungeonParty(`beta-${seed}`, 80, "damage", 5, "wow", { readinessPolicy: policy })) {
|
||||
defaultNames.add(member.specializationId ?? "");
|
||||
}
|
||||
for (const member of createDungeonParty(`beta-${seed}`, 80, "damage", 5, "wow", { readinessPolicy: policy, includeBetaSpecs: true })) {
|
||||
betaNames.add(member.specializationId ?? "");
|
||||
}
|
||||
}
|
||||
expect(defaultNames.has("mage:arcane")).toBe(false);
|
||||
expect(betaNames.has("mage:arcane")).toBe(true);
|
||||
expect(betaNames.has("mage:frost")).toBe(false);
|
||||
});
|
||||
|
||||
it("avoids the player's damage specialization when two alternatives can fill the NPC seats", () => {
|
||||
const party = createDungeonParty("exclude-player", 80, "damage", 5, "wow", {
|
||||
excludedPlayerSpecializationId: "mage:fire",
|
||||
});
|
||||
expect(party.filter((member) => member.role === "damage").map((member) => member.specializationId).sort())
|
||||
.toEqual(["hunter:marksmanship", "rogue:assassination"]);
|
||||
});
|
||||
|
||||
it("keeps RoM generation unchanged when WoW readiness is restrictive", () => {
|
||||
const baseline = createDungeonParty("rom-readiness", 40, "damage", 5, "rom");
|
||||
const filtered = createDungeonParty("rom-readiness", 40, "damage", 5, "rom", {
|
||||
readinessPolicy: DEFAULT_COMPANION_SPEC_READINESS_POLICY,
|
||||
});
|
||||
expect(filtered).toEqual(baseline);
|
||||
});
|
||||
|
||||
it("fills a dedicated healer when the player chooses tank or damage", () => {
|
||||
for (const playerRole of ["tank", "damage"] as const) {
|
||||
for (const seed of ["role-a", "role-b", "role-c", "role-d"]) {
|
||||
|
||||
Reference in new issue
Block a user