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"); }); });