bpmn-js/test/spec/features/modeling/behavior/DataInputAssociationBehavio...

147 lines
4.0 KiB
JavaScript

'use strict';
require('../../../../TestHelper');
/* global inject, bootstrapModeler */
var find = require('lodash/collection/find');
var modelingModule = require('../../../../../lib/features/modeling');
describe('modeling/behavior - fix DataInputAssociation#targetRef', function() {
var diagramXML = require('./DataInputAssociationBehavior.bpmn');
beforeEach(bootstrapModeler(diagramXML, { modules: modelingModule }));
it('should add on connect', inject(function(modeling, elementRegistry) {
// given
var dataObjectShape = elementRegistry.get('DataObjectReference'),
taskShape = elementRegistry.get('Task_B');
// when
var newConnection = modeling.connect(dataObjectShape, taskShape, {
type: 'bpmn:DataInputAssociation'
});
var dataInputAssociation = newConnection.businessObject;
// then
expect(dataInputAssociation.targetRef).to.exist;
expect(dataInputAssociation.targetRef).to.eql(getTargetRefProp(taskShape));
}));
it('should remove on connect / undo', inject(function(modeling, elementRegistry, commandStack) {
// given
var dataObjectShape = elementRegistry.get('DataObjectReference'),
taskShape = elementRegistry.get('Task_B');
var newConnection = modeling.connect(dataObjectShape, taskShape, {
type: 'bpmn:DataInputAssociation'
});
var dataInputAssociation = newConnection.businessObject;
// when
commandStack.undo();
// then
expect(dataInputAssociation.targetRef).to.not.exist;
expect(getTargetRefProp(taskShape)).to.not.exist;
}));
it('should update on reconnectEnd', inject(function(modeling, elementRegistry) {
// given
var oldTarget = elementRegistry.get('Task_A'),
connection = elementRegistry.get('DataInputAssociation'),
dataInputAssociation = connection.businessObject,
newTarget = elementRegistry.get('Task_B');
// when
modeling.reconnectEnd(connection, newTarget, { x: newTarget.x, y: newTarget.y });
// then
expect(getTargetRefProp(oldTarget)).not.to.exist;
expect(dataInputAssociation.targetRef).to.exist;
expect(dataInputAssociation.targetRef).to.eql(getTargetRefProp(newTarget));
}));
it('should update on reconnectEnd / undo', inject(function(modeling, elementRegistry, commandStack) {
// given
var oldTarget = elementRegistry.get('Task_A'),
connection = elementRegistry.get('DataInputAssociation'),
dataInputAssociation = connection.businessObject,
newTarget = elementRegistry.get('Task_B');
modeling.reconnectEnd(connection, newTarget, { x: newTarget.x, y: newTarget.y });
// when
commandStack.undo();
// then
expect(getTargetRefProp(newTarget)).not.to.exist;
expect(dataInputAssociation.targetRef).to.exist;
expect(dataInputAssociation.targetRef).to.eql(getTargetRefProp(oldTarget));
}));
it('should unset on remove', inject(function(modeling, elementRegistry) {
// given
var oldTarget = elementRegistry.get('Task_A'),
connection = elementRegistry.get('DataInputAssociation'),
dataInputAssociation = connection.businessObject;
// when
modeling.removeElements([ connection ]);
// then
expect(getTargetRefProp(oldTarget)).not.to.exist;
expect(dataInputAssociation.targetRef).to.not.exist;
}));
it('should unset on remove / undo', inject(function(modeling, elementRegistry, commandStack) {
// given
var oldTarget = elementRegistry.get('Task_A'),
connection = elementRegistry.get('DataInputAssociation'),
dataInputAssociation = connection.businessObject;
modeling.removeElements([ connection ]);
// when
commandStack.undo();
// then
expect(dataInputAssociation.targetRef).to.exist;
expect(dataInputAssociation.targetRef).to.eql(getTargetRefProp(oldTarget));
}));
});
function getTargetRefProp(element) {
expect(element).to.exist;
var properties = element.businessObject.get('properties');
return find(properties, function(p) {
return p.name === '__targetRef_placeholder';
});
}