49 lines
2.2 KiB
TypeScript
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 }]);
|
|
});
|
|
});
|