56 lines
2.8 KiB
TypeScript
56 lines
2.8 KiB
TypeScript
import { beforeEach, describe, expect, it } from "vitest";
|
|
import { clearMobRuntimeRegistry, setMobPosition } from "./mobRuntimeRegistry";
|
|
import { clearPartyRuntimeRegistry, registerPartyRuntimePosition } from "./partyRuntimeRegistry";
|
|
import { useCombatStore } from "./combatStore";
|
|
import { usePartyStore } from "./partyStore";
|
|
|
|
describe("Ascension Conquest combat runtime", () => {
|
|
beforeEach(() => {
|
|
clearMobRuntimeRegistry();
|
|
clearPartyRuntimeRegistry();
|
|
});
|
|
|
|
it("heals a selected ally with an enemy-or-ally spell", () => {
|
|
useCombatStore.getState().initializeCharacter({ classId: "cultist", raceId: "human", level: 20 });
|
|
usePartyStore.getState().initializeParty("coa-any-friendly", 20, useCombatStore.getState().health, "healer", 2, "coa");
|
|
const member = usePartyStore.getState().members[0]!;
|
|
usePartyStore.getState().damageMember(member.id, 500);
|
|
registerPartyRuntimePosition(member.id, [3, 0, 0]);
|
|
usePartyStore.getState().selectMember(member.id);
|
|
const injuredHealth = usePartyStore.getState().members[0]!.health;
|
|
|
|
expect(useCombatStore.getState().castAbility("cultist-gaze-of-cthun", undefined, 1_000)).toMatchObject({ ok: true });
|
|
|
|
expect(usePartyStore.getState().members[0]!.health).toBeGreaterThan(injuredHealth);
|
|
});
|
|
|
|
it("damages a selected enemy with the same enemy-or-ally spell", () => {
|
|
useCombatStore.getState().initializeCharacter({ classId: "cultist", raceId: "human", level: 20 });
|
|
usePartyStore.getState().clearSelection();
|
|
useCombatStore.getState().registerMob("gaze-dummy", { name: "Gaze Dummy", maxHealth: 5_000 });
|
|
setMobPosition("gaze-dummy", [3, 0, 0]);
|
|
useCombatStore.getState().selectMob("gaze-dummy");
|
|
|
|
expect(useCombatStore.getState().castAbility("cultist-gaze-of-cthun", undefined, 1_000)).toMatchObject({ ok: true });
|
|
|
|
expect(useCombatStore.getState().mobs["gaze-dummy"]!.health).toBeLessThan(5_000);
|
|
});
|
|
|
|
it("executes a hidden DBC payload when a passive proc fires", () => {
|
|
useCombatStore.getState().initializeCharacter({ classId: "pyromancer", raceId: "human", level: 20 });
|
|
usePartyStore.getState().initializeParty("coa-hidden-proc", 20, useCombatStore.getState().health, "healer", 2, "coa");
|
|
const member = usePartyStore.getState().members[0]!;
|
|
usePartyStore.getState().damageMember(member.id, 500);
|
|
registerPartyRuntimePosition(member.id, [3, 0, 0]);
|
|
usePartyStore.getState().selectMember(member.id);
|
|
expect(useCombatStore.getState().auras.some((aura) => aura.definition.name.includes("Phoenix Handler"))).toBe(true);
|
|
|
|
expect(useCombatStore.getState().castAbility("coa-24-cinderheart-476-502044", undefined, 1_000)).toMatchObject({ ok: true });
|
|
useCombatStore.getState().tick(0.1, 4_100);
|
|
|
|
expect(useCombatStore.getState().auras.some((aura) => (
|
|
aura.definition.id === "coa:704865:effect:0:aura:23"
|
|
))).toBe(true);
|
|
});
|
|
});
|