diff --git a/test/spec/features/modeling/behavior/DataStoreBehavior.bpmn b/test/spec/features/modeling/behavior/DataStoreBehavior.bpmn new file mode 100644 index 00000000..eaf5f760 --- /dev/null +++ b/test/spec/features/modeling/behavior/DataStoreBehavior.bpmn @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/spec/features/modeling/behavior/DataStoreBehavior.connect.bpmn b/test/spec/features/modeling/behavior/DataStoreBehavior.connect.bpmn new file mode 100644 index 00000000..f8c74294 --- /dev/null +++ b/test/spec/features/modeling/behavior/DataStoreBehavior.connect.bpmn @@ -0,0 +1,58 @@ + + + + + + + + SequenceFlow_1 + SequenceFlow_2 + + + SequenceFlow_1 + + + SequenceFlow_2 + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/test/spec/features/modeling/behavior/DataStoreBehaviorSpec.js b/test/spec/features/modeling/behavior/DataStoreBehaviorSpec.js new file mode 100644 index 00000000..40d400e3 --- /dev/null +++ b/test/spec/features/modeling/behavior/DataStoreBehaviorSpec.js @@ -0,0 +1,232 @@ +'use strict'; + +var TestHelper = require('../../../../TestHelper'); + +/* global bootstrapModeler, inject */ + +var is = require('../../../../../lib/util/ModelUtil').is; + +var modelingModule = require('../../../../../lib/features/modeling'), + coreModule = require('../../../../../lib/core'); + + +describe('features/modeling/behavior - data store', function() { + + var testModules = [ coreModule, modelingModule ]; + + + describe('create', function() { + + var processDiagramXML = require('./DataStoreBehavior.bpmn'); + + beforeEach(bootstrapModeler(processDiagramXML, { modules: testModules })); + + + it('should create DataStoreReference on participant', inject(function(elementRegistry, modeling) { + + // give + var participantElement = elementRegistry.get('Participant'), + participantBo = participantElement.businessObject, + processBo = participantBo.processRef; + + // when + var dataStoreShape = modeling.createShape( + { type: 'bpmn:DataStoreReference' }, + { x: 220, y: 220 }, + participantElement); + + var dataStoreReference = dataStoreShape.businessObject; + + // then + // reference correctly wired + expect(dataStoreReference.$parent).to.eql(processBo); + expect(processBo.flowElements).to.contain(dataStoreReference); + + // no actual data store created + expect(dataStoreReference.dataStoreRef).not.to.exist; + })); + + + it('should create DataStoreReference on sub process', inject(function(elementRegistry, modeling, bpmnjs) { + + // give + var subProcessElement = elementRegistry.get('SubProcess'), + subProcessBo = subProcessElement.businessObject; + + // when + var dataStoreShape = modeling.createShape( + { type: 'bpmn:DataStoreReference' }, + { x: 420, y: 220 }, + subProcessElement); + + var dataStoreReference = dataStoreShape.businessObject; + + // then + // reference correctly wired + expect(dataStoreReference.$parent).to.eql(subProcessBo); + expect(subProcessBo.flowElements).to.contain(dataStoreReference); + + // no actual data store created + expect(dataStoreReference.dataStoreRef).not.to.exist; + })); + + }); + + + describe('move', function() { + + var processDiagramXML = require('./DataStoreBehavior.bpmn'); + + beforeEach(bootstrapModeler(processDiagramXML, { modules: testModules })); + + + it('should move DataStoreReference', inject(function(elementRegistry, modeling, bpmnjs) { + + // give + var subProcessElement = elementRegistry.get('SubProcess'), + subProcessBo = subProcessElement.businessObject, + participantElement = elementRegistry.get('Participant'), + participantBo = participantElement.businessObject, + dataStoreReference = elementRegistry.get('DataStoreReference'), + dataStoreReferenceBo = dataStoreReference.businessObject; + + // when + modeling.moveElements([ dataStoreReference ], { x: -200, y: 0 }, participantElement); + + // then + // reference correctly wired + expect(dataStoreReference.parent).to.eql(participantElement); + expect(dataStoreReferenceBo.$parent).to.eql(participantBo.processRef); + })); + + }); + + + describe('connect', function() { + + var processDiagramXML = require('./DataStoreBehavior.connect.bpmn'); + + beforeEach(bootstrapModeler(processDiagramXML, { modules: testModules })); + + + describe('dataOutputAssociation', function() { + + it('should execute', inject(function(elementRegistry, modeling) { + + // given + var taskShape = elementRegistry.get('Task'), + dataStoreRefShape = elementRegistry.get('DataStoreReference'); + + // when + var outputAssociation = modeling.connect(taskShape, dataStoreRefShape); + + var dataOutputAssociations = taskShape.businessObject.get('dataOutputAssociations'); + + // then + expect(dataOutputAssociations).to.eql([ outputAssociation.businessObject ]); + expect(outputAssociation.businessObject.$parent).to.eql(taskShape.businessObject); + + expect(taskShape.businessObject.get('dataInputAssociations')).to.be.empty; + })); + + + it('should undo', inject(function(elementRegistry, modeling, commandStack) { + + // given + var taskShape = elementRegistry.get('Task'), + dataStoreRefShape = elementRegistry.get('DataStoreReference'); + + // when + modeling.connect(taskShape, dataStoreRefShape); + commandStack.undo(); + + // then + expect(taskShape.businessObject.get('dataOutputAssociations')).to.be.empty; + expect(taskShape.businessObject.get('dataInputAssociations')).to.be.empty; + })); + + + it('should redo', inject(function(elementRegistry, modeling, commandStack) { + + // given + var taskShape = elementRegistry.get('Task'), + dataStoreRefShape = elementRegistry.get('DataStoreReference'); + + // when + var outputAssociation = modeling.connect(taskShape, dataStoreRefShape); + commandStack.undo(); + commandStack.redo(); + + var dataOutputAssociations = taskShape.businessObject.get('dataOutputAssociations'); + + // then + expect(dataOutputAssociations).to.eql([ outputAssociation.businessObject ]); + expect(outputAssociation.businessObject.$parent).to.eql(taskShape.businessObject); + + expect(taskShape.businessObject.get('dataInputAssociations')).to.be.empty; + })); + + }); + + + describe('dataInputAssociation', function() { + + it('should execute', inject(function(elementRegistry, modeling) { + + // given + var taskShape = elementRegistry.get('Task'), + dataStoreRefShape = elementRegistry.get('DataStoreReference'); + + // when + var inputAssociation = modeling.connect(dataStoreRefShape, taskShape); + + var dataInputAssociations = taskShape.businessObject.get('dataInputAssociations'); + + // then + expect(dataInputAssociations).to.eql([ inputAssociation.businessObject ]); + expect(inputAssociation.businessObject.$parent).to.eql(taskShape.businessObject); + + expect(taskShape.businessObject.get('dataOutputAssociations')).to.be.empty; + })); + + + it('should undo', inject(function(elementRegistry, modeling, commandStack) { + + // given + var taskShape = elementRegistry.get('Task'), + dataStoreRefShape = elementRegistry.get('DataStoreReference'); + + // when + modeling.connect(dataStoreRefShape, taskShape); + commandStack.undo(); + + // then + expect(taskShape.businessObject.get('dataOutputAssociations')).to.be.empty; + expect(taskShape.businessObject.get('dataInputAssociations')).to.be.empty; + })); + + + it('should redo', inject(function(elementRegistry, modeling, commandStack) { + + // given + var taskShape = elementRegistry.get('Task'), + dataStoreRefShape = elementRegistry.get('DataStoreReference'); + + // when + var inputAssociation = modeling.connect(dataStoreRefShape, taskShape); + commandStack.undo(); + commandStack.redo(); + + var dataInputAssociations = taskShape.businessObject.get('dataInputAssociations'); + + // then + expect(dataInputAssociations[0].$parent).to.equal(taskShape.businessObject); + expect(dataInputAssociations).to.include(inputAssociation.businessObject); + expect(taskShape.businessObject.get('dataOutputAssociations')).to.be.empty; + })); + + }); + + }); + +});