import { describe, expect, it } from "vitest"; import { createEditorStore } from "../../src/app/editor-store"; import { createSetPlayerStartCommand } from "../../src/commands/set-player-start-command"; describe("player start command", () => { it("restores the previous tool mode across undo and redo when placing PlayerStart", () => { const store = createEditorStore(); store.setToolMode("create"); store.executeCommand( createSetPlayerStartCommand({ position: { x: 2, y: 0, z: -2 }, yawDegrees: 90 }) ); const placedPlayerStart = Object.values(store.getState().document.entities)[0]; expect(placedPlayerStart).toBeDefined(); expect(store.getState().toolMode).toBe("select"); expect(store.undo()).toBe(true); expect(store.getState().toolMode).toBe("create"); expect(store.getState().document.entities).toEqual({}); expect(store.redo()).toBe(true); expect(store.getState().toolMode).toBe("select"); expect(store.getState().document.entities[placedPlayerStart.id]).toEqual(placedPlayerStart); }); it("restores the previous tool mode across undo and redo when moving PlayerStart", () => { const store = createEditorStore(); store.executeCommand( createSetPlayerStartCommand({ position: { x: 0, y: 0, z: 0 }, yawDegrees: 0 }) ); const existingPlayerStart = Object.values(store.getState().document.entities)[0]; store.setToolMode("create"); store.executeCommand( createSetPlayerStartCommand({ entityId: existingPlayerStart.id, position: { x: 4, y: 0, z: 1 }, yawDegrees: 180 }) ); expect(store.getState().toolMode).toBe("select"); expect(store.getState().document.entities[existingPlayerStart.id]).toMatchObject({ position: { x: 4, y: 0, z: 1 }, yawDegrees: 180 }); expect(store.undo()).toBe(true); expect(store.getState().toolMode).toBe("create"); expect(store.getState().document.entities[existingPlayerStart.id]).toEqual(existingPlayerStart); expect(store.redo()).toBe(true); expect(store.getState().toolMode).toBe("select"); expect(store.getState().document.entities[existingPlayerStart.id]).toMatchObject({ position: { x: 4, y: 0, z: 1 }, yawDegrees: 180 }); }); });