Files
healer-man/src/ui/defeatedPrompt.test.ts
T
2026-09-12 23:55:24 -04:00

77 lines
3.3 KiB
TypeScript

import { createElement } from "react";
import { renderToStaticMarkup } from "react-dom/server";
import { describe, expect, it } from "vitest";
import { DefeatedPrompt, DungeonCompletePrompt } from "./Hud";
import { ResurrectionDestination } from "./ResurrectionDestination";
describe("defeated prompt", () => {
it("offers an explicit dungeon respawn while explaining that waiting is allowed", () => {
const markup = renderToStaticMarkup(createElement(DefeatedPrompt, {
gameMode: "dungeon",
resurrectionCharges: 0,
onReturn: () => undefined,
}));
expect(markup).toContain("wait for a party member to resurrect you");
expect(markup).toContain("Respawn at entrance");
expect(markup).toContain("Respawning resets the current encounter and restores the party.");
});
it("explains player-only resurrection and optional Recall during an ongoing party fight", () => {
const markup = renderToStaticMarkup(createElement(DefeatedPrompt, {
gameMode: "dungeon", resurrectionCharges: 0, partyStillFighting: true, onReturn: () => undefined,
}));
expect(markup).toContain("Your party will keep fighting where they are.");
expect(markup).toContain("Use Recall if you want to regroup.");
expect(markup).toContain("Respawn at entrance");
expect(markup).not.toContain("resets the current encounter");
});
it("does not offer a Manastorm resurrection when no shared charges remain", () => {
const markup = renderToStaticMarkup(createElement(DefeatedPrompt, {
gameMode: "manastorm",
resurrectionCharges: 0,
onReturn: () => undefined,
}));
expect(markup).toContain("No shared resurrection charges remain");
expect(markup).not.toContain("Resurrect now");
});
it("offers labeled entrance and killed-boss choices on the player defeat prompt", () => {
const markup = renderToStaticMarkup(createElement(DefeatedPrompt, {
gameMode: "dungeon", resurrectionCharges: 0, onReturn: () => undefined,
checkpoints: [
{ id: "entrance", name: "Dungeon entrance", spawn: { footPosition: [0, 0, 0], yaw: 0 } },
{ id: "boss:bazil", name: "Bazil Thredd", spawn: { footPosition: [20, 0, 0], yaw: 0 } },
],
}));
expect(markup).toContain("Resurrect at");
expect(markup).toContain("value=\"boss:bazil\"");
expect(markup).toContain("Dungeon entrance");
});
it("retains a selected boss destination in the shared chooser", () => {
const markup = renderToStaticMarkup(createElement(ResurrectionDestination, {
checkpoints: [
{ id: "entrance", name: "Dungeon entrance", spawn: { footPosition: [0, 0, 0], yaw: 0 } },
{ id: "boss:bazil", name: "Bazil Thredd", spawn: { footPosition: [20, 0, 0], yaw: 0 } },
], value: "boss:bazil", onChange: () => undefined,
}));
expect(markup).toContain("value=\"boss:bazil\" selected=\"\"");
});
});
describe("dungeon completion prompt", () => {
it("keeps final-room looting available while exposing an explicit run exit", () => {
const markup = renderToStaticMarkup(createElement(DungeonCompletePrompt, {
dungeonTitle: "The Deadmines",
onFinish: () => undefined,
}));
expect(markup).toContain("The Deadmines complete");
expect(markup).toContain("Loot the room or finish the run");
expect(markup).toContain("Finish dungeon");
});
});