diff --git a/lib/features/modeling/ElementFactory.js b/lib/features/modeling/ElementFactory.js index 36e8aab6..8f310cf5 100644 --- a/lib/features/modeling/ElementFactory.js +++ b/lib/features/modeling/ElementFactory.js @@ -117,10 +117,10 @@ ElementFactory.prototype.createBpmnElement = function(elementType, attrs) { if (attrs.eventDefinitionType) { eventDefinitions = businessObject.get('eventDefinitions') || []; - newEventDefinition = this._moddle.create(attrs.eventDefinitionType); + newEventDefinition = this._bpmnFactory.create(attrs.eventDefinitionType); if (attrs.eventDefinitionType === 'bpmn:ConditionalEventDefinition') { - newEventDefinition.condition = this._moddle.create('bpmn:FormalExpression'); + newEventDefinition.condition = this._bpmnFactory.create('bpmn:FormalExpression'); } eventDefinitions.push(newEventDefinition); diff --git a/test/spec/features/modeling/ElementFactory.bpmn b/test/spec/features/modeling/ElementFactory.bpmn new file mode 100644 index 00000000..ad173134 --- /dev/null +++ b/test/spec/features/modeling/ElementFactory.bpmn @@ -0,0 +1,7 @@ + + + + + + + \ No newline at end of file diff --git a/test/spec/features/modeling/ElementFactorySpec.js b/test/spec/features/modeling/ElementFactorySpec.js new file mode 100644 index 00000000..c2a37a8a --- /dev/null +++ b/test/spec/features/modeling/ElementFactorySpec.js @@ -0,0 +1,115 @@ +import { + bootstrapModeler, + inject +} from 'test/TestHelper'; + +import coreModule from 'lib/core'; +import modelingModule from 'lib/features/modeling'; + +import { + getBusinessObject, + is +} from '../../../../lib/util/ModelUtil'; + + +describe('features - element factory', function() { + + var diagramXML = require('./ElementFactory.bpmn'); + + var testModules = [ modelingModule, coreModule ]; + + beforeEach(bootstrapModeler(diagramXML, { modules: testModules })); + + + describe('create', function() { + + it('should create with message event definition', inject(function(elementFactory) { + + // when + var intermediateThrowEvent = elementFactory.createShape({ + type: 'bpmn:IntermediateThrowEvent', + eventDefinitionType: 'bpmn:MessageEventDefinition' + }); + + // then + expect(intermediateThrowEvent).to.exist; + expect(is(intermediateThrowEvent, 'bpmn:IntermediateThrowEvent')).to.be.true; + + var intermediateThrowEventBo = getBusinessObject(intermediateThrowEvent), + eventDefinitions = intermediateThrowEventBo.eventDefinitions; + + expect(eventDefinitions).to.exist; + expect(eventDefinitions).to.have.length(1); + + var messageEventDefinition = eventDefinitions[ 0 ]; + + expect(is(messageEventDefinition, 'bpmn:MessageEventDefinition')).to.be.true; + })); + + + it('should create event with conditional event definition', inject(function(elementFactory) { + + // when + var intermediateCatchEvent = elementFactory.createShape({ + type: 'bpmn:IntermediateCatchEvent', + eventDefinitionType: 'bpmn:ConditionalEventDefinition' + }); + + // then + expect(intermediateCatchEvent).to.exist; + expect(is(intermediateCatchEvent, 'bpmn:IntermediateCatchEvent')).to.be.true; + + var intermediateThrowEventBo = getBusinessObject(intermediateCatchEvent), + eventDefinitions = intermediateThrowEventBo.eventDefinitions; + + expect(eventDefinitions).to.exist; + expect(eventDefinitions).to.have.length(1); + + var conditionalEventDefinition = eventDefinitions[ 0 ]; + + expect(is(conditionalEventDefinition, 'bpmn:ConditionalEventDefinition')).to.be.true; + expect(conditionalEventDefinition.condition).to.exist; + expect(is(conditionalEventDefinition.condition, 'bpmn:FormalExpression')).to.be.true; + })); + + + describe('integration', function() { + + it('should create event definition with ID', inject(function(elementFactory) { + + // when + var intermediateThrowEvent = elementFactory.createShape({ + type: 'bpmn:IntermediateThrowEvent', + eventDefinitionType: 'bpmn:MessageEventDefinition' + }); + + // then + var intermediateThrowEventBo = getBusinessObject(intermediateThrowEvent), + eventDefinitions = intermediateThrowEventBo.eventDefinitions, + messageEventDefinition = eventDefinitions[ 0 ]; + + expect(messageEventDefinition.id).to.exist; + })); + + + it('should create formal expression with ID', inject(function(elementFactory) { + + // when + var intermediateCatchEvent = elementFactory.createShape({ + type: 'bpmn:IntermediateCatchEvent', + eventDefinitionType: 'bpmn:ConditionalEventDefinition' + }); + + // then + var intermediateThrowEventBo = getBusinessObject(intermediateCatchEvent), + eventDefinitions = intermediateThrowEventBo.eventDefinitions, + conditionalEventDefinition = eventDefinitions[ 0 ]; + + expect(conditionalEventDefinition.condition.id).not.to.exist; + })); + + }); + + }); + +});