diff --git a/lib/features/snapping/BpmnSnapping.js b/lib/features/snapping/BpmnSnapping.js index 1c06e293..d2b93c6b 100644 --- a/lib/features/snapping/BpmnSnapping.js +++ b/lib/features/snapping/BpmnSnapping.js @@ -130,7 +130,7 @@ function BpmnSnapping(eventBus, canvas) { } if (is(shape, 'bpmn:Participant')) { - context.minDimensions = { width: 400, height: 200 }; + context.minDimensions = { width: 300, height: 150 }; context.childrenBoxPadding = { left: 50, right: 35 diff --git a/test/fixtures/bpmn/collaboration-resize.bpmn b/test/spec/features/snapping/BpmnSnapping.collaboration-resize.bpmn similarity index 58% rename from test/fixtures/bpmn/collaboration-resize.bpmn rename to test/spec/features/snapping/BpmnSnapping.collaboration-resize.bpmn index 637faff0..2b203fc1 100644 --- a/test/fixtures/bpmn/collaboration-resize.bpmn +++ b/test/spec/features/snapping/BpmnSnapping.collaboration-resize.bpmn @@ -3,31 +3,48 @@ + - + + + + + - + - + - + - + - - + + + + + + + + + + + + + + diff --git a/test/spec/features/snapping/BpmnSnappingSpec.js b/test/spec/features/snapping/BpmnSnappingSpec.js index 6408a0b8..8db637d6 100644 --- a/test/spec/features/snapping/BpmnSnappingSpec.js +++ b/test/spec/features/snapping/BpmnSnappingSpec.js @@ -26,150 +26,154 @@ describe('features/snapping - BpmnSnapping', function() { var testModules = [ coreModule, snappingModule, modelingModule, createModule, rulesModule ]; - describe('when dropping on non-empty process', function() { + describe('on Participant create', function() { - var diagramXML = require('../../../fixtures/bpmn/collaboration/process.bpmn'); + describe('in non-empty process', function() { - beforeEach(bootstrapModeler(diagramXML, { modules: testModules })); + var diagramXML = require('../../../fixtures/bpmn/collaboration/process.bpmn'); + + beforeEach(bootstrapModeler(diagramXML, { modules: testModules })); - var createEvent; + var createEvent; - beforeEach(inject(function(canvas, dragging) { - createEvent = Events.scopedCreate(canvas); - dragging.setOptions({ manual: true }); - })); + beforeEach(inject(function(canvas, dragging) { + createEvent = Events.scopedCreate(canvas); + dragging.setOptions({ manual: true }); + })); - it('should snap to process children bounds / top left', - inject(function(canvas, create, dragging, elementFactory) { + it('should snap to process children bounds / top left', + inject(function(canvas, create, dragging, elementFactory) { - // given - var participantShape = elementFactory.createParticipantShape(false), - rootElement = canvas.getRootElement(), - rootGfx = canvas.getGraphics(rootElement); + // given + var participantShape = elementFactory.createParticipantShape(false), + rootElement = canvas.getRootElement(), + rootGfx = canvas.getGraphics(rootElement); - // when - create.start(createEvent({ x: 50, y: 50 }), participantShape); + // when + create.start(createEvent({ x: 50, y: 50 }), participantShape); - dragging.hover({ element: rootElement, gfx: rootGfx }); + dragging.hover({ element: rootElement, gfx: rootGfx }); - dragging.move(createEvent({ x: 65, y: 65 })); - dragging.end(createEvent({ x: 65, y: 65 })); + dragging.move(createEvent({ x: 65, y: 65 })); + dragging.end(createEvent({ x: 65, y: 65 })); - // then - expect(bounds(participantShape)).toEqual({ - width: 600, height: 250, x: 18, y: -8 - }); - })); + // then + expect(bounds(participantShape)).toEqual({ + width: 600, height: 250, x: 18, y: -8 + }); + })); - it('should snap to process children bounds / bottom right', - inject(function(canvas, create, dragging, elementFactory) { + it('should snap to process children bounds / bottom right', + inject(function(canvas, create, dragging, elementFactory) { - // given - var participantShape = elementFactory.createParticipantShape(false), - rootElement = canvas.getRootElement(), - rootGfx = canvas.getGraphics(rootElement); + // given + var participantShape = elementFactory.createParticipantShape(false), + rootElement = canvas.getRootElement(), + rootGfx = canvas.getGraphics(rootElement); - // when - create.start(createEvent({ x: 50, y: 50 }), participantShape); + // when + create.start(createEvent({ x: 50, y: 50 }), participantShape); - dragging.hover({ element: rootElement, gfx: rootGfx }); + dragging.hover({ element: rootElement, gfx: rootGfx }); - dragging.move(createEvent({ x: 400, y: 400 })); - dragging.end(createEvent({ x: 400, y: 400 })); + dragging.move(createEvent({ x: 400, y: 400 })); + dragging.end(createEvent({ x: 400, y: 400 })); - // then - expect(bounds(participantShape)).toEqual({ - width: 600, height: 250, x: 100, y: 52 - }); - })); + // then + expect(bounds(participantShape)).toEqual({ + width: 600, height: 250, x: 100, y: 52 + }); + })); + + }); + + + describe('in empty process', function() { + + var diagramXML = require('../../../fixtures/bpmn/collaboration/process-empty.bpmn'); + + beforeEach(bootstrapModeler(diagramXML, { modules: testModules })); + + + var createEvent; + + beforeEach(inject(function(canvas, dragging) { + createEvent = Events.scopedCreate(canvas); + dragging.setOptions({ manual: true }); + })); + + + it('should not snap', inject(function(canvas, create, dragging, elementFactory) { + + // given + var participantShape = elementFactory.createParticipantShape(false), + rootElement = canvas.getRootElement(), + rootGfx = canvas.getGraphics(rootElement); + + // when + create.start(createEvent({ x: 50, y: 50 }), participantShape); + + dragging.hover({ element: rootElement, gfx: rootGfx }); + + dragging.move(createEvent({ x: 400, y: 400 })); + dragging.end(createEvent({ x: 400, y: 400 })); + + // then + expect(bounds(participantShape)).toEqual({ + x: 100, y: 275, width: 600, height: 250 + }); + })); + + }); + + + describe('in collaboration', function() { + + var diagramXML = require('../../../fixtures/bpmn/collaboration/collaboration-participant.bpmn'); + + beforeEach(bootstrapModeler(diagramXML, { modules: testModules })); + + + var createEvent; + + beforeEach(inject(function(canvas, dragging) { + createEvent = Events.scopedCreate(canvas); + dragging.setOptions({ manual: true }); + })); + + + it('should not snap', inject(function(canvas, create, dragging, elementFactory) { + + // given + var participantShape = elementFactory.createParticipantShape(false), + rootElement = canvas.getRootElement(), + rootGfx = canvas.getGraphics(rootElement); + + // when + create.start(createEvent({ x: 50, y: 50 }), participantShape); + + dragging.hover({ element: rootElement, gfx: rootGfx }); + + dragging.move(createEvent({ x: 400, y: 400 })); + dragging.end(createEvent({ x: 400, y: 400 })); + + // then + expect(bounds(participantShape)).toEqual({ + x: 100, y: 275, width: 600, height: 250 + }); + })); + + }); }); - describe('when dropping on empty process', function() { + describe('on Participant resize', function () { - var diagramXML = require('../../../fixtures/bpmn/collaboration/process-empty.bpmn'); - - beforeEach(bootstrapModeler(diagramXML, { modules: testModules })); - - - var createEvent; - - beforeEach(inject(function(canvas, dragging) { - createEvent = Events.scopedCreate(canvas); - dragging.setOptions({ manual: true }); - })); - - - it('should not snap', inject(function(canvas, create, dragging, elementFactory) { - - // given - var participantShape = elementFactory.createParticipantShape(false), - rootElement = canvas.getRootElement(), - rootGfx = canvas.getGraphics(rootElement); - - // when - create.start(createEvent({ x: 50, y: 50 }), participantShape); - - dragging.hover({ element: rootElement, gfx: rootGfx }); - - dragging.move(createEvent({ x: 400, y: 400 })); - dragging.end(createEvent({ x: 400, y: 400 })); - - // then - expect(bounds(participantShape)).toEqual({ - x: 100, y: 275, width: 600, height: 250 - }); - })); - - }); - - - describe('when dropping on collaboration', function() { - - var diagramXML = require('../../../fixtures/bpmn/collaboration/collaboration-participant.bpmn'); - - beforeEach(bootstrapModeler(diagramXML, { modules: testModules })); - - - var createEvent; - - beforeEach(inject(function(canvas, dragging) { - createEvent = Events.scopedCreate(canvas); - dragging.setOptions({ manual: true }); - })); - - - it('should not snap', inject(function(canvas, create, dragging, elementFactory) { - - // given - var participantShape = elementFactory.createParticipantShape(false), - rootElement = canvas.getRootElement(), - rootGfx = canvas.getGraphics(rootElement); - - // when - create.start(createEvent({ x: 50, y: 50 }), participantShape); - - dragging.hover({ element: rootElement, gfx: rootGfx }); - - dragging.move(createEvent({ x: 400, y: 400 })); - dragging.end(createEvent({ x: 400, y: 400 })); - - // then - expect(bounds(participantShape)).toEqual({ - x: 100, y: 275, width: 600, height: 250 - }); - })); - - }); - - - describe('on shape resize', function () { - - var diagramXML = require('../../../fixtures/bpmn/collaboration-resize.bpmn'); + var diagramXML = require('./BpmnSnapping.collaboration-resize.bpmn'); var testResizeModules = [ coreModule, resizeModule, rulesModule, snappingModule ]; @@ -182,31 +186,83 @@ describe('features/snapping - BpmnSnapping', function() { })); - describe('Participant min bounds', function() { + describe('snap min bounds', function() { - it('should snap ', inject(function(canvas, elementRegistry, resize, dragging) { + it('should snap to children from ', inject(function(canvas, elementRegistry, resize, dragging) { var participant = elementRegistry.get('Participant_2'); - resize.activate(Events.create(canvas._svg, { x: 500, y: 500 }), participant, 'se'); - dragging.move(Events.create(canvas._svg, { x: 0, y: 0 })); + resize.activate(createEvent({ x: 500, y: 500 }), participant, 'se'); + dragging.move(createEvent({ x: 0, y: 0 })); dragging.end(); - expect(participant.width).toEqual(400); - expect(participant.height).toEqual(200); + expect(participant.width).toEqual(497); + expect(participant.height).toEqual(252); })); - it('should snap from ', inject(function(canvas, elementRegistry, resize, dragging) { + it('should snap to children from ', inject(function(canvas, elementRegistry, resize, dragging) { var participant = elementRegistry.get('Participant_2'); - resize.activate(Events.create(canvas._svg, { x: 0, y: 0 }), participant, 'nw'); - dragging.move(Events.create(canvas._svg, { x: 500, y: 500 })); + resize.activate(createEvent({ x: 0, y: 0 }), participant, 'nw'); + dragging.move(createEvent({ x: 500, y: 500 })); dragging.end(); - expect(participant.width).toEqual(400); - expect(participant.height).toEqual(200); + expect(participant.width).toEqual(467); + expect(participant.height).toEqual(287); + })); + + + it('should snap to min dimensions from ', inject(function(canvas, elementRegistry, resize, dragging) { + + var participant = elementRegistry.get('Participant_1'); + + resize.activate(createEvent({ x: 500, y: 500 }), participant, 'se'); + dragging.move(createEvent({ x: 0, y: 0 })); + dragging.end(); + + expect(participant.width).toEqual(300); + expect(participant.height).toEqual(150); + })); + + + it('should snap to min dimensions from ', inject(function(canvas, elementRegistry, resize, dragging) { + + var participant = elementRegistry.get('Participant_1'); + + resize.activate(createEvent({ x: 0, y: 0 }), participant, 'nw'); + dragging.move(createEvent({ x: 500, y: 500 })); + dragging.end(); + + expect(participant.width).toEqual(300); + expect(participant.height).toEqual(150); + })); + + + it('should snap to min dimensions + children from ', inject(function(canvas, elementRegistry, resize, dragging) { + + var participant = elementRegistry.get('Participant_3'); + + resize.activate(createEvent({ x: 500, y: 500 }), participant, 'se'); + dragging.move(createEvent({ x: 0, y: 0 })); + dragging.end(); + + expect(participant.width).toEqual(320); + expect(participant.height).toEqual(150); + })); + + + it('should snap to min dimensions + children from ', inject(function(canvas, elementRegistry, resize, dragging) { + + var participant = elementRegistry.get('Participant_3'); + + resize.activate(createEvent({ x: 0, y: 0 }), participant, 'nw'); + dragging.move(createEvent({ x: 500, y: 500 })); + dragging.end(); + + expect(participant.width).toEqual(353); + expect(participant.height).toEqual(177); })); }); @@ -216,8 +272,8 @@ describe('features/snapping - BpmnSnapping', function() { var subProcess = elementRegistry.get('SubProcess_1'); - resize.activate(Events.create(canvas._svg, { x: 453, y: 624 }), subProcess, 'se'); - dragging.move(Events.create(canvas._svg, { x: -453, y: -624 })); + resize.activate(createEvent({ x: 453, y: 624 }), subProcess, 'se'); + dragging.move(createEvent({ x: -453, y: -624 })); dragging.end(); expect(subProcess.width).toEqual(140); @@ -229,12 +285,12 @@ describe('features/snapping - BpmnSnapping', function() { var participant = elementRegistry.get('Participant_1'); - resize.activate(Events.create(canvas._svg, { x: 614, y: 310 }), participant, 'se'); - dragging.move(Events.create(canvas._svg, { x: -614, y: -310 })); + resize.activate(createEvent({ x: 614, y: 310 }), participant, 'se'); + dragging.move(createEvent({ x: -614, y: -310 })); dragging.end(); - expect(participant.width).toEqual(400); - expect(participant.height).toEqual(200); + expect(participant.width).toEqual(300); + expect(participant.height).toEqual(150); })); @@ -242,8 +298,8 @@ describe('features/snapping - BpmnSnapping', function() { var textAnnotation = elementRegistry.get('TextAnnotation_1'); - resize.activate(Events.create(canvas._svg, { x: 592, y: 452 }), textAnnotation, 'se'); - dragging.move(Events.create(canvas._svg, { x: -592, y: -452 })); + resize.activate(createEvent({ x: 592, y: 452 }), textAnnotation, 'se'); + dragging.move(createEvent({ x: -592, y: -452 })); dragging.end(); expect(textAnnotation.width).toEqual(50);