Add test for delete selection command
This commit is contained in:
94
tests/domain/delete-selection.command.test.ts
Normal file
94
tests/domain/delete-selection.command.test.ts
Normal 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();
|
||||
});
|
||||
});
|
||||
Reference in New Issue
Block a user