Files
healer-man/src/game/dungeonEncounterCombatEvents.test.ts
T
2026-09-09 11:21:33 -04:00

49 lines
2.2 KiB
TypeScript

import { describe, expect, it } from "vitest";
import { deriveDungeonEncounterCombatEvents } from "./dungeonEncounterCombatEvents";
describe("dungeon encounter combat event bridge", () => {
it("emits stable engage, descending health, and death edges once", () => {
const engaged = deriveDungeonEncounterCombatEvents({}, {
boss: { engaged: true, dead: false, despawned: false, health: 1_000, maxHealth: 1_000 },
}, 1);
expect(engaged.events).toEqual([{ kind: "entity-engaged", entityId: "boss", now: 1 }]);
const damaged = deriveDungeonEncounterCombatEvents(engaged.cursor, {
boss: { engaged: true, dead: false, despawned: false, health: 490, maxHealth: 1_000 },
}, 2);
expect(damaged.events).toEqual([{
kind: "entity-health",
entityId: "boss",
healthPercent: 49,
now: 2,
}]);
const unchanged = deriveDungeonEncounterCombatEvents(damaged.cursor, {
boss: { engaged: true, dead: false, despawned: false, health: 490, maxHealth: 1_000 },
}, 3);
expect(unchanged.events).toEqual([]);
const dead = deriveDungeonEncounterCombatEvents(unchanged.cursor, {
boss: { engaged: false, dead: true, despawned: false, health: 0, maxHealth: 1_000 },
}, 4);
expect(dead.events).toEqual([{ kind: "entity-death", entityId: "boss", now: 4 }]);
expect(deriveDungeonEncounterCombatEvents(dead.cursor, {
boss: { engaged: false, dead: true, despawned: false, health: 0, maxHealth: 1_000 },
}, 5).events).toEqual([]);
});
it("does not treat scripted despawn as death and permits a later respawn edge", () => {
const first = deriveDungeonEncounterCombatEvents({}, {
add: { engaged: true, dead: false, despawned: false, health: 100, maxHealth: 100 },
}, 1);
const despawned = deriveDungeonEncounterCombatEvents(first.cursor, {
add: { engaged: false, dead: false, despawned: true, health: 100, maxHealth: 100 },
}, 2);
expect(despawned.events).toEqual([]);
expect(despawned.cursor).toEqual({});
expect(deriveDungeonEncounterCombatEvents(despawned.cursor, {
add: { engaged: true, dead: false, despawned: false, health: 100, maxHealth: 100 },
}, 3).events).toEqual([{ kind: "entity-engaged", entityId: "add", now: 3 }]);
});
});