284 lines
8.5 KiB
JavaScript
284 lines
8.5 KiB
JavaScript
/* global sinon */
|
|
|
|
import {
|
|
bootstrapModeler,
|
|
inject
|
|
} from 'test/TestHelper';
|
|
|
|
import coreModule from 'lib/core';
|
|
import modelingModule from 'lib/features/modeling';
|
|
|
|
import { getBusinessObject } from '../../../../../lib/util/ModelUtil';
|
|
|
|
|
|
describe('features/modeling/behavior - attach events', function() {
|
|
|
|
var testModules = [
|
|
coreModule,
|
|
modelingModule
|
|
];
|
|
|
|
var attachEventBehaviorXML = require('./AttachEventBehavior.bpmn');
|
|
|
|
beforeEach(bootstrapModeler(attachEventBehaviorXML, { modules: testModules }));
|
|
|
|
|
|
describe('basics', function() {
|
|
|
|
describe('create', function() {
|
|
|
|
it('should replace', inject(function(elementFactory, elementRegistry, modeling) {
|
|
|
|
// given
|
|
var task = elementRegistry.get('Task_1'),
|
|
taskBo = getBusinessObject(task),
|
|
intermediateEvent = elementFactory.createShape({ type: 'bpmn:IntermediateThrowEvent' });
|
|
|
|
// when
|
|
var boundaryEvent = modeling.createElements(
|
|
[ intermediateEvent ], { x: 300, y: 140 }, task, { attach: true }
|
|
)[0];
|
|
|
|
// then
|
|
var boundaryEventBo = getBusinessObject(boundaryEvent);
|
|
|
|
expect(boundaryEventBo.$type).to.equal('bpmn:BoundaryEvent');
|
|
expect(boundaryEventBo.attachedToRef).to.equal(taskBo);
|
|
}));
|
|
|
|
|
|
it('should NOT replace', inject(function(elementFactory, elementRegistry, modeling) {
|
|
|
|
// given
|
|
var process = elementRegistry.get('Process_1'),
|
|
intermediateEvent = elementFactory.createShape({ type: 'bpmn:IntermediateThrowEvent' });
|
|
|
|
// when
|
|
intermediateEvent = modeling.createElements([ intermediateEvent ], { x: 300, y: 240 }, process)[0];
|
|
|
|
// then
|
|
var intermediateEventBo = getBusinessObject(intermediateEvent);
|
|
|
|
expect(intermediateEventBo.$type).to.equal('bpmn:IntermediateThrowEvent');
|
|
expect(intermediateEventBo.attachedToRef).not.to.exist;
|
|
}));
|
|
|
|
|
|
it('should copy properties', inject(
|
|
function(bpmnFactory, elementFactory, elementRegistry, modeling) {
|
|
|
|
// given
|
|
var task = elementRegistry.get('Task_1');
|
|
|
|
var intermediateThrowEventBo = bpmnFactory.create('bpmn:IntermediateThrowEvent', {
|
|
name: 'foo'
|
|
});
|
|
|
|
var documentation = bpmnFactory.create('bpmn:Documentation', {
|
|
text: 'bar'
|
|
});
|
|
|
|
intermediateThrowEventBo.documentation = [ documentation ];
|
|
|
|
documentation.$parent = intermediateThrowEventBo;
|
|
|
|
var intermediateThrowEvent = elementFactory.createShape({
|
|
type: 'bpmn:IntermediateThrowEvent',
|
|
businessObject: intermediateThrowEventBo
|
|
});
|
|
|
|
// when
|
|
var boundaryEvent = modeling.createElements(
|
|
[ intermediateThrowEvent ], { x: 300, y: 140 }, task, { attach: true }
|
|
)[0];
|
|
|
|
// then
|
|
var boundaryEventBo = getBusinessObject(boundaryEvent);
|
|
|
|
expect(boundaryEventBo.name).to.equal('foo');
|
|
expect(boundaryEventBo.documentation).to.have.lengthOf(1);
|
|
expect(boundaryEventBo.documentation[0].text).to.equal('bar');
|
|
}
|
|
));
|
|
|
|
});
|
|
|
|
|
|
describe('move', function() {
|
|
|
|
it('should replace', inject(function(elementRegistry, modeling) {
|
|
|
|
// given
|
|
var task = elementRegistry.get('Task_1'),
|
|
taskBo = getBusinessObject(task),
|
|
intermediateThrowEvent = elementRegistry.get('IntermediateThrowEvent_1');
|
|
|
|
// when
|
|
modeling.moveElements([ intermediateThrowEvent ], { x: 100, y: 40 }, task, { attach: true });
|
|
|
|
// then
|
|
var boundaryEvent = elementRegistry.get('IntermediateThrowEvent_1'),
|
|
boundaryEventBo = getBusinessObject(boundaryEvent);
|
|
|
|
expect(boundaryEvent).to.exist;
|
|
expect(boundaryEventBo.$type).to.equal('bpmn:BoundaryEvent');
|
|
expect(boundaryEventBo.attachedToRef).to.equal(taskBo);
|
|
}));
|
|
|
|
|
|
it('should NOT replace', inject(function(elementRegistry, modeling) {
|
|
|
|
// given
|
|
var process = elementRegistry.get('Process_1'),
|
|
intermediateThrowEvent = elementRegistry.get('IntermediateThrowEvent_1'),
|
|
intermediateThrowEventBo = getBusinessObject(intermediateThrowEvent);
|
|
|
|
// when
|
|
modeling.moveElements([ intermediateThrowEvent ], { x: 100, y: 100 }, process);
|
|
|
|
// then
|
|
expect(intermediateThrowEvent).to.exist;
|
|
expect(intermediateThrowEventBo.$type).to.equal('bpmn:IntermediateThrowEvent');
|
|
expect(intermediateThrowEventBo.attachedToRef).not.to.exist;
|
|
}));
|
|
|
|
|
|
describe('properties', function() {
|
|
|
|
it('should copy properties', inject(function(elementRegistry, modeling) {
|
|
|
|
// given
|
|
var task = elementRegistry.get('Task_1'),
|
|
intermediateThrowEvent = elementRegistry.get('IntermediateThrowEvent_1');
|
|
|
|
// when
|
|
modeling.moveElements([ intermediateThrowEvent ], { x: 100, y: 40 }, task, { attach: true });
|
|
|
|
// then
|
|
var boundaryEvent = elementRegistry.get('IntermediateThrowEvent_1'),
|
|
boundaryEventBo = getBusinessObject(boundaryEvent);
|
|
|
|
expect(boundaryEventBo.name).to.equal('foo');
|
|
expect(boundaryEventBo.documentation).to.have.lengthOf(1);
|
|
expect(boundaryEventBo.documentation[0].text).to.equal('bar');
|
|
}));
|
|
|
|
|
|
describe('event definitions', function() {
|
|
|
|
var ids = [
|
|
'ConditionalCatchEvent',
|
|
'IntermediateThrowEvent_1',
|
|
'MessageCatchEvent',
|
|
'SignalCatchEvent',
|
|
'TimerCatchEvent',
|
|
];
|
|
|
|
function getDelta(element, task) {
|
|
return {
|
|
x: task.x + task.width / 2 - element.x - element.width / 2,
|
|
y: task.y + task.height - element.y - element.height / 2
|
|
};
|
|
}
|
|
|
|
ids.forEach(function(id) {
|
|
|
|
it('should copy event definition', inject(function(elementRegistry, modeling) {
|
|
|
|
// given
|
|
var element = elementRegistry.get(id),
|
|
elementBo = getBusinessObject(element),
|
|
eventDefinitions = elementBo.eventDefinitions,
|
|
task = elementRegistry.get('Task_1');
|
|
|
|
// when
|
|
modeling.moveElements([ element ], getDelta(element, task), task, { attach: true });
|
|
|
|
// then
|
|
var boundaryEvent = elementRegistry.get(id),
|
|
boundaryEventBo = getBusinessObject(boundaryEvent);
|
|
|
|
expect(boundaryEventBo.$type).to.equal('bpmn:BoundaryEvent');
|
|
expect(boundaryEventBo.eventDefinitions).to.jsonEqual(eventDefinitions, skipId);
|
|
}));
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
describe('connections', function() {
|
|
|
|
it('should remove incoming connection', inject(function(elementRegistry, modeling) {
|
|
|
|
// given
|
|
var intermediateThrowEvent = elementRegistry.get('IntermediateThrowEvent_1'),
|
|
startEvent = elementRegistry.get('StartEvent_1'),
|
|
task = elementRegistry.get('Task_1');
|
|
|
|
// when
|
|
modeling.moveElements([ intermediateThrowEvent ], { x: 100, y: 40 }, task, { attach: true });
|
|
|
|
// then
|
|
var boundaryEvent = elementRegistry.get('IntermediateThrowEvent_1');
|
|
|
|
expect(boundaryEvent.incoming).to.have.lengthOf(0);
|
|
expect(startEvent.outgoing).to.have.lengthOf(0);
|
|
}));
|
|
|
|
|
|
it('should NOT remove outgoing connection', inject(function(elementRegistry, modeling) {
|
|
|
|
// given
|
|
var intermediateThrowEvent = elementRegistry.get('IntermediateThrowEvent_1'),
|
|
task = elementRegistry.get('Task_1');
|
|
|
|
// when
|
|
modeling.moveElements([ intermediateThrowEvent ], { x: 100, y: 40 }, task, { attach: true });
|
|
|
|
// then
|
|
var boundaryEvent = elementRegistry.get('IntermediateThrowEvent_1');
|
|
|
|
expect(boundaryEvent.outgoing).to.have.lengthOf(1);
|
|
expect(task.incoming).to.have.lengthOf(1);
|
|
}));
|
|
|
|
|
|
it('should lay out connection once', inject(function(elementRegistry, eventBus, modeling) {
|
|
|
|
// given
|
|
var intermediateThrowEvent = elementRegistry.get('IntermediateThrowEvent_1'),
|
|
task = elementRegistry.get('Task_1');
|
|
|
|
var layoutSpy = sinon.spy();
|
|
|
|
eventBus.on('commandStack.connection.layout.execute', layoutSpy);
|
|
|
|
// when
|
|
modeling.moveElements([ intermediateThrowEvent ], { x: 100, y: 40 }, task, { attach: true });
|
|
|
|
// then
|
|
expect(layoutSpy).to.be.calledOnce;
|
|
}));
|
|
|
|
});
|
|
|
|
});
|
|
|
|
|
|
|
|
// helpers //////////
|
|
function skipId(key, value) {
|
|
if (key === 'id') {
|
|
return;
|
|
}
|
|
|
|
return value;
|
|
}
|