Add test for delete selection command

This commit is contained in:
2026-04-15 15:10:30 +02:00
parent 2ff06ef6b3
commit 85b7ddaf2c

View File

@@ -0,0 +1,94 @@
import { describe, expect, it } from "vitest";
import { createEditorStore } from "../../src/app/editor-store";
import { createModelInstance } from "../../src/assets/model-instances";
import {
createProjectAssetStorageKey,
type ModelAssetRecord
} from "../../src/assets/project-assets";
import { createDeleteSelectionCommand } from "../../src/commands/delete-selection-command";
import { createEmptySceneDocument } from "../../src/document/scene-document";
const modelAsset = {
id: "asset-model-delete",
kind: "model",
sourceName: "delete-fixture.glb",
mimeType: "model/gltf-binary",
storageKey: createProjectAssetStorageKey("asset-model-delete"),
byteLength: 64,
metadata: {
kind: "model",
format: "glb",
sceneName: "Delete Fixture",
nodeCount: 1,
meshCount: 1,
materialNames: [],
textureNames: [],
animationNames: [],
boundingBox: null,
warnings: []
}
} satisfies ModelAssetRecord;
describe("delete selection command", () => {
it("deletes same-kind selections in one undoable batch action", () => {
const modelInstanceA = createModelInstance({
id: "model-instance-delete-a",
assetId: modelAsset.id,
position: {
x: 0,
y: 0,
z: 0
}
});
const modelInstanceB = createModelInstance({
id: "model-instance-delete-b",
assetId: modelAsset.id,
position: {
x: 4,
y: 1,
z: -2
}
});
const store = createEditorStore({
initialDocument: {
...createEmptySceneDocument({ name: "Delete Multi Fixture" }),
assets: {
[modelAsset.id]: modelAsset
},
modelInstances: {
[modelInstanceA.id]: modelInstanceA,
[modelInstanceB.id]: modelInstanceB
}
}
});
const selection = {
kind: "modelInstances" as const,
ids: [modelInstanceA.id, modelInstanceB.id]
};
store.setSelection(selection);
store.executeCommand(createDeleteSelectionCommand(selection));
expect(store.getState().document.modelInstances[modelInstanceA.id]).toBeUndefined();
expect(store.getState().document.modelInstances[modelInstanceB.id]).toBeUndefined();
expect(store.getState().selection).toEqual({
kind: "none"
});
expect(store.getState().activeSelectionId).toBeNull();
expect(store.undo()).toBe(true);
expect(store.getState().document.modelInstances[modelInstanceA.id]).toEqual(
modelInstanceA
);
expect(store.getState().document.modelInstances[modelInstanceB.id]).toEqual(
modelInstanceB
);
expect(store.getState().selection).toEqual(selection);
expect(store.getState().activeSelectionId).toBe(modelInstanceB.id);
expect(store.redo()).toBe(true);
expect(store.getState().document.modelInstances[modelInstanceA.id]).toBeUndefined();
expect(store.getState().document.modelInstances[modelInstanceB.id]).toBeUndefined();
});
});