From 8722b6e3c2ab9fbfb3dc62d1c945d7a4ea01e099 Mon Sep 17 00:00:00 2001 From: Philipp Fromme Date: Mon, 18 Nov 2019 16:38:27 +0100 Subject: [PATCH] fix(element-factory): use BPMN factory to ensure IDs Closes #1162 --- lib/features/modeling/ElementFactory.js | 4 +- .../features/modeling/ElementFactory.bpmn | 7 ++ .../features/modeling/ElementFactorySpec.js | 115 ++++++++++++++++++ 3 files changed, 124 insertions(+), 2 deletions(-) create mode 100644 test/spec/features/modeling/ElementFactory.bpmn create mode 100644 test/spec/features/modeling/ElementFactorySpec.js 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; + })); + + }); + + }); + +});