test(modeling): verify DataStore addition, update and removal

Related to #345
This commit is contained in:
Nico Rehwaldt 2016-01-25 21:27:21 +01:00 committed by pedesen
parent 6b27ee4301
commit 28e845984d
3 changed files with 317 additions and 0 deletions

View File

@ -0,0 +1,27 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd" id="Definitions_1" exporter="camunda modeler" exporterVersion="2.6.0" targetNamespace="http://bpmn.io/schema/bpmn">
<bpmn:collaboration id="Collaboration">
<bpmn:participant id="Participant" processRef="Process"/>
</bpmn:collaboration>
<bpmn:process id="Process" isExecutable="false">
<bpmn:subProcess id="SubProcess">
<bpmn:dataStoreReference id="DataStoreReference"/>
</bpmn:subProcess>
</bpmn:process>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Collaboration">
<bpmndi:BPMNShape id="Participant_di" bpmnElement="Participant" isHorizontal="false">
<dc:Bounds height="250.0" width="600.0" x="42.0" y="46.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="SubProcess_di" bpmnElement="SubProcess" isExpanded="true">
<dc:Bounds height="200.0" width="350.0" x="260.0" y="73.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="DataStoreReference_di" bpmnElement="DataStoreReference">
<dc:Bounds height="50.0" width="50.0" x="395.0" y="195.0"/>
<bpmndi:BPMNLabel>
<dc:Bounds height="20.0" width="90.0" x="375.0" y="245.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>

View File

@ -0,0 +1,58 @@
<?xml version="1.0" encoding="UTF-8"?>
<bpmn:definitions xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:bpmn="http://www.omg.org/spec/BPMN/20100524/MODEL" xmlns:bpmndi="http://www.omg.org/spec/BPMN/20100524/DI" xmlns:dc="http://www.omg.org/spec/DD/20100524/DC" xmlns:di="http://www.omg.org/spec/DD/20100524/DI" xsi:schemaLocation="http://www.omg.org/spec/BPMN/20100524/MODEL BPMN20.xsd" id="Definitions_1" exporter="camunda modeler" exporterVersion="2.6.0" targetNamespace="http://bpmn.io/schema/bpmn">
<bpmn:collaboration id="Collaboration">
<bpmn:participant id="Participant" processRef="Process"/>
</bpmn:collaboration>
<bpmn:process id="Process" isExecutable="false">
<bpmn:task id="Task">
<bpmn:incoming>SequenceFlow_1</bpmn:incoming>
<bpmn:outgoing>SequenceFlow_2</bpmn:outgoing>
</bpmn:task>
<bpmn:startEvent id="StartEvent">
<bpmn:outgoing>SequenceFlow_1</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:endEvent id="EndEvent">
<bpmn:incoming>SequenceFlow_2</bpmn:incoming>
</bpmn:endEvent>
<bpmn:dataStoreReference id="DataStoreReference" name="Data Store" dataStoreRef="DataStore_1"/>
<bpmn:sequenceFlow id="SequenceFlow_1" name="" sourceRef="StartEvent" targetRef="Task"/>
<bpmn:sequenceFlow id="SequenceFlow_2" name="" sourceRef="Task" targetRef="EndEvent"/>
</bpmn:process>
<bpmn:dataStore id="DataStore_1" name="Data Store 1"/>
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Collaboration">
<bpmndi:BPMNShape id="Participant_di" bpmnElement="Participant" isHorizontal="false">
<dc:Bounds height="250.0" width="600.0" x="84.0" y="48.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="_BPMNShape_Task_8" bpmnElement="Task">
<dc:Bounds height="76.0" width="97.0" x="264.0" y="98.0"/>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_3" bpmnElement="StartEvent">
<dc:Bounds height="36.0" width="36.0" x="144.0" y="118.0"/>
<bpmndi:BPMNLabel>
<dc:Bounds height="0.0" width="0.0" x="162.0" y="159.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="_BPMNShape_EndEvent_2" bpmnElement="EndEvent">
<dc:Bounds height="36.0" width="36.0" x="468.0" y="118.0"/>
<bpmndi:BPMNLabel>
<dc:Bounds height="0.0" width="0.0" x="486.0" y="159.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNShape id="_BPMNShape_DataStoreReference_3" bpmnElement="DataStoreReference">
<dc:Bounds height="50.0" width="50.0" x="311.0" y="204.0"/>
<bpmndi:BPMNLabel>
<dc:Bounds height="21.0" width="79.0" x="297.0" y="259.0"/>
</bpmndi:BPMNLabel>
</bpmndi:BPMNShape>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_1" bpmnElement="SequenceFlow_1" sourceElement="_BPMNShape_StartEvent_3" targetElement="_BPMNShape_Task_8">
<di:waypoint xsi:type="dc:Point" x="180.0" y="136.0"/>
<di:waypoint xsi:type="dc:Point" x="264.0" y="136.0"/>
</bpmndi:BPMNEdge>
<bpmndi:BPMNEdge id="BPMNEdge_SequenceFlow_2" bpmnElement="SequenceFlow_2" sourceElement="_BPMNShape_Task_8" targetElement="_BPMNShape_EndEvent_2">
<di:waypoint xsi:type="dc:Point" x="360.0" y="136.0"/>
<di:waypoint xsi:type="dc:Point" x="468.0" y="136.0"/>
</bpmndi:BPMNEdge>
</bpmndi:BPMNPlane>
</bpmndi:BPMNDiagram>
</bpmn:definitions>

View File

@ -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;
}));
});
});
});