Files
healer-man/src/game/onlineSessionRuntime.test.ts
T
2026-08-20 14:05:50 -04:00

79 lines
2.3 KiB
TypeScript

import { afterEach, describe, expect, it } from "vitest";
import type { OnlineSessionPlayer } from "../app/onlineSessionTypes";
import {
configureOnlineSessionRuntime,
drainOnlineInteractions,
onlinePlayerActorId,
onlinePlayerRuntimeActor,
onlineSessionIsActive,
onlineSessionOwnsWorldSimulation,
onlineSynchronizedMobTransform,
requestOnlineInteraction,
} from "./onlineSessionRuntime";
const remotePlayer: OnlineSessionPlayer = {
accountId: "remote",
username: "Remote",
character: {
id: "remote-character",
name: "Mendara",
classId: "priest",
categoryId: "wow",
raceId: "human",
gender: "female",
level: 20,
},
role: "healer",
position: [4, 0, 6],
yaw: 1,
grounded: true,
health: 800,
maxHealth: 1_000,
resource: 400,
maxResource: 500,
resourceName: "Mana",
selectedTargetId: null,
activeCast: null,
animationEvent: null,
equipment: [],
updatedAt: 1,
};
afterEach(() => configureOnlineSessionRuntime({
active: false,
authority: true,
localAccountId: null,
}));
describe("online session runtime", () => {
it("exposes remote players as live combat actors", () => {
configureOnlineSessionRuntime({
active: true,
authority: true,
localAccountId: "local",
players: [remotePlayer],
});
const actor = onlinePlayerRuntimeActor(onlinePlayerActorId("remote"));
expect(actor).toMatchObject({ health: 800, maxHealth: 1_000, alive: true, kind: "companion" });
expect(onlineSessionIsActive()).toBe(true);
expect(onlineSessionOwnsWorldSimulation()).toBe(true);
});
it("uses leader transforms and queues follower interactions", () => {
configureOnlineSessionRuntime({
active: true,
authority: false,
localAccountId: "local",
players: [remotePlayer],
mobTransforms: { boss: { position: [7, 0, 9], yaw: 0.75 } },
});
expect(onlineSessionOwnsWorldSimulation()).toBe(false);
expect(onlineSynchronizedMobTransform("boss")?.position).toEqual([7, 0, 9]);
expect(requestOnlineInteraction("loot", "boss")).toBe(true);
expect(drainOnlineInteractions()).toEqual([
expect.objectContaining({ kind: "loot", targetActorId: "boss", sourceActorId: onlinePlayerActorId("local") }),
]);
expect(drainOnlineInteractions()).toEqual([]);
});
});