Files
healer-man/src/scene/sceneLifecycle.test.ts
T
2026-08-22 15:53:43 -04:00

41 lines
1.6 KiB
TypeScript

import { describe, expect, it } from "vitest";
import {
encounterWorldIsReady,
encounterWorldKey,
rendererCanvasKey,
sceneFrameLoop,
} from "./sceneLifecycle";
describe("R3F scene lifecycle", () => {
it("keeps the WebGL renderer stable while encounter worlds change", () => {
expect(rendererCanvasKey(0)).toBe(rendererCanvasKey(0));
expect(rendererCanvasKey(0)).not.toBe(rendererCanvasKey(1));
expect(encounterWorldKey("wailing-caverns", 1))
.not.toBe(encounterWorldKey("wailing-caverns", 2));
});
it("only accepts collision readiness from the current encounter world", () => {
expect(encounterWorldIsReady(null, 4)).toBe(false);
expect(encounterWorldIsReady(4, 4)).toBe(true);
expect(encounterWorldIsReady(4, 5)).toBe(false);
});
it("renders local paused worlds on demand without stalling loading or online worlds", () => {
const readyWorld = {
worldReady: true,
graphicsRecovering: false,
sharedOnline: false,
paused: false,
mapOpen: false,
companionOpen: false,
};
expect(sceneFrameLoop({ ...readyWorld, paused: true })).toBe("demand");
expect(sceneFrameLoop({ ...readyWorld, mapOpen: true })).toBe("demand");
expect(sceneFrameLoop({ ...readyWorld, companionOpen: true })).toBe("demand");
expect(sceneFrameLoop({ ...readyWorld, paused: true, sharedOnline: true })).toBe("always");
expect(sceneFrameLoop({ ...readyWorld, paused: true, worldReady: false })).toBe("always");
expect(sceneFrameLoop({ ...readyWorld, paused: true, graphicsRecovering: true })).toBe("always");
expect(sceneFrameLoop(readyWorld)).toBe("always");
});
});