From 22d97f01972dae9652e5c8a53f2204fa713dbbc9 Mon Sep 17 00:00:00 2001 From: Victor Giers Date: Sat, 4 Apr 2026 20:17:58 +0200 Subject: [PATCH] Update transform session command tests for object mode requirements --- .../domain/transform-session.command.test.ts | 52 ++++++++++++++++--- 1 file changed, 45 insertions(+), 7 deletions(-) diff --git a/tests/domain/transform-session.command.test.ts b/tests/domain/transform-session.command.test.ts index c177b280..33668bf2 100644 --- a/tests/domain/transform-session.command.test.ts +++ b/tests/domain/transform-session.command.test.ts @@ -51,7 +51,7 @@ const modelAsset = { } satisfies ModelAssetRecord; describe("transform session commit commands", () => { - it("resolves a selected brush face to the whole brush transform target", () => { + it("requires Object mode for whitebox box transforms and does not silently promote component selections", () => { const brush = createBoxBrush({ id: "brush-main" }); @@ -62,23 +62,61 @@ describe("transform session commit commands", () => { } }; - const resolved = resolveTransformTarget(document, { + const faceResolved = resolveTransformTarget(document, { kind: "brushFace", brushId: brush.id, faceId: "posZ" }); + const edgeResolved = resolveTransformTarget( + document, + { + kind: "brushEdge", + brushId: brush.id, + edgeId: "edgeX_posY_negZ" + }, + "edge" + ); + const vertexResolved = resolveTransformTarget( + document, + { + kind: "brushVertex", + brushId: brush.id, + vertexId: "posX_posY_negZ" + }, + "vertex" + ); + const faceModeBrushResolved = resolveTransformTarget( + document, + { + kind: "brushes", + ids: [brush.id] + }, + "face" + ); + const objectResolved = resolveTransformTarget(document, { + kind: "brushes", + ids: [brush.id] + }); - expect(resolved.target).toMatchObject({ + expect(faceResolved.target).toBeNull(); + expect(faceResolved.message).toContain("Face selection"); + expect(edgeResolved.target).toBeNull(); + expect(edgeResolved.message).toContain("Edge transforms"); + expect(vertexResolved.target).toBeNull(); + expect(vertexResolved.message).toContain("Vertex transforms"); + expect(faceModeBrushResolved.target).toBeNull(); + expect(faceModeBrushResolved.message).toContain("Object mode"); + expect(objectResolved.target).toMatchObject({ kind: "brush", brushId: brush.id, initialCenter: brush.center, initialRotationDegrees: brush.rotationDegrees, initialSize: brush.size }); - expect(resolved.target).not.toBeNull(); - expect(supportsTransformOperation(resolved.target as NonNullable, "translate")).toBe(true); - expect(supportsTransformOperation(resolved.target as NonNullable, "rotate")).toBe(true); - expect(supportsTransformOperation(resolved.target as NonNullable, "scale")).toBe(true); + expect(objectResolved.target).not.toBeNull(); + expect(supportsTransformOperation(objectResolved.target as NonNullable, "translate")).toBe(true); + expect(supportsTransformOperation(objectResolved.target as NonNullable, "rotate")).toBe(true); + expect(supportsTransformOperation(objectResolved.target as NonNullable, "scale")).toBe(true); }); it("commits whitebox box rotate and scale transforms with undo and redo", () => {