From 809396619de8c1ae95b216b7cf3a3fbfaf9f68e6 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Fri, 3 Apr 2026 01:37:32 +0200 Subject: [PATCH] Update ViewportCanvas tests to include camera state handling --- tests/unit/viewport-canvas.test.tsx | 46 +++++++++++++++++++++++++++++ 1 file changed, 46 insertions(+) diff --git a/tests/unit/viewport-canvas.test.tsx b/tests/unit/viewport-canvas.test.tsx index a1b07331..736db5aa 100644 --- a/tests/unit/viewport-canvas.test.tsx +++ b/tests/unit/viewport-canvas.test.tsx @@ -3,6 +3,7 @@ import { afterEach, beforeEach, describe, expect, it, vi } from "vitest"; import { createEmptySceneDocument } from "../../src/document/scene-document"; import { ViewportCanvas } from "../../src/viewport-three/ViewportCanvas"; +import { createDefaultViewportPanelCameraState, type ViewportPanelCameraState } from "../../src/viewport-three/viewport-layout"; import type { CreationViewportToolPreview, ViewportToolPreview } from "../../src/viewport-three/viewport-transient-state"; const { MockViewportHost, viewportHostInstances } = vi.hoisted(() => { @@ -14,7 +15,9 @@ const { MockViewportHost, viewportHostInstances } = vi.hoisted(() => { updateDocument: ReturnType; setViewMode: ReturnType; setDisplayMode: ReturnType; + setCameraState: ReturnType; setBrushSelectionChangeHandler: ReturnType; + setCameraStateChangeHandler: ReturnType; setCreationPreviewChangeHandler: ReturnType; setCreationCommitHandler: ReturnType; setToolMode: ReturnType; @@ -30,7 +33,9 @@ const { MockViewportHost, viewportHostInstances } = vi.hoisted(() => { updateDocument = vi.fn(); setViewMode = vi.fn(); setDisplayMode = vi.fn(); + setCameraState = vi.fn(); setBrushSelectionChangeHandler = vi.fn(); + setCameraStateChangeHandler = vi.fn(); setCreationPreviewChangeHandler = vi.fn(); setCreationCommitHandler = vi.fn(); setToolMode = vi.fn(); @@ -64,6 +69,7 @@ describe("ViewportCanvas", () => { it("wires the creation commit handler into the viewport host", async () => { const sceneDocument = createEmptySceneDocument(); + const cameraState = createDefaultViewportPanelCameraState(); const toolPreview: CreationViewportToolPreview = { kind: "create", sourcePanelId: "topLeft", @@ -73,6 +79,7 @@ describe("ViewportCanvas", () => { center: null }; const onCommitCreation = vi.fn(() => true); + const onCameraStateChange = vi.fn((_cameraState: ViewportPanelCameraState) => undefined); const onToolPreviewChange = vi.fn((_toolPreview: ViewportToolPreview) => undefined); const onSelectionChange = vi.fn(); @@ -87,6 +94,7 @@ describe("ViewportCanvas", () => { selection={{ kind: "none" }} toolMode="create" toolPreview={toolPreview} + cameraState={cameraState} viewMode="perspective" displayMode="authoring" layoutMode="single" @@ -95,6 +103,7 @@ describe("ViewportCanvas", () => { focusSelection={{ kind: "none" }} onSelectionChange={onSelectionChange} onCommitCreation={onCommitCreation} + onCameraStateChange={onCameraStateChange} onToolPreviewChange={onToolPreviewChange} /> ); @@ -111,4 +120,41 @@ describe("ViewportCanvas", () => { expect(registeredHandler(toolPreview)).toBe(true); expect(onCommitCreation).toHaveBeenCalledWith(toolPreview); }); + + it("applies and subscribes to persisted camera state through the viewport host", async () => { + const sceneDocument = createEmptySceneDocument(); + const cameraState = createDefaultViewportPanelCameraState(); + const onCameraStateChange = vi.fn((_cameraState: ViewportPanelCameraState) => undefined); + + render( + true)} + onCameraStateChange={onCameraStateChange} + onToolPreviewChange={vi.fn()} + /> + ); + + await waitFor(() => { + expect(viewportHostInstances).toHaveLength(1); + expect(viewportHostInstances[0].setCameraState).toHaveBeenCalledWith(cameraState); + expect(viewportHostInstances[0].setCameraStateChangeHandler).toHaveBeenCalledTimes(1); + }); + }); });