Files
webeditor3d/tests/domain/player-start.command.test.ts

91 lines
2.4 KiB
TypeScript

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