bpmn-js/test/spec/features/auto-resize/AutoResizeSpec.js

220 lines
5.3 KiB
JavaScript

'use strict';
var TestHelper = require('../../../TestHelper');
/* global bootstrapModeler, inject */
var pick = require('lodash/object/pick'),
assign = require('lodash/object/assign');
var autoResizeModule = require('../../../../lib/features/auto-resize'),
modelingModule = require('../../../../lib/features/modeling'),
createModule = require('diagram-js/lib/features/create'),
coreModule = require('../../../../lib/core');
function getBounds(shape) {
return pick(shape, ['x', 'y', 'width', 'height']);
}
describe('features/auto-resize', function() {
var testModules = [coreModule, modelingModule, autoResizeModule, createModule ];
var diagramXML = require('./AutoResize.collaboration.bpmn');
var task,
participant,
startEvent,
expectedBounds;
beforeEach(bootstrapModeler(diagramXML, { modules: testModules }));
beforeEach(inject(function(elementRegistry) {
task = elementRegistry.get('Task_1');
participant = elementRegistry.get('Participant_1');
startEvent = elementRegistry.get('StartEvent_1');
expectedBounds = getBounds(participant);
expect(expectedBounds).to.eql({ x: 247, y: 160, width: 371, height: 178 });
}));
describe('after moving', function() {
it('should expand the right edge of the parent collaboration',
inject(function(modeling) {
// when
modeling.moveElements([task], { x: 100, y: 0 }, participant);
// then
assign(expectedBounds, { width: 525 });
expect(getBounds(participant)).to.eql(expectedBounds);
}));
it('should expand the top edge of the parent collaboration',
inject(function(modeling) {
// when
modeling.moveElements([task], { x: 0, y: -50 }, participant);
// then
assign(expectedBounds, { y: 79, height: 259 });
expect(getBounds(participant)).to.eql(expectedBounds);
}));
it('should expand the bottom edge of the parent collaboration',
inject(function(modeling) {
// when
modeling.moveElements([task], { x: 0, y: 50 }, participant);
// then
assign(expectedBounds, { height: 259 });
expect(getBounds(participant)).to.eql(expectedBounds);
}));
it('should expand the left edge of the parent collaboration',
inject(function(modeling) {
// when
modeling.moveElements([startEvent], { x: -100, y: 0 }, participant);
// then
assign(expectedBounds, { x: 122, width: 496 });
expect(getBounds(participant)).to.eql(expectedBounds);
}));
it('should expand the bottom right edges of the parent collaboration',
inject(function(modeling) {
// when
modeling.moveElements([task], { x: 50, y: 50 }, participant);
// then
assign(expectedBounds, { width: 475, height: 259 });
expect(getBounds(participant)).to.eql(expectedBounds);
}));
it('should expand the top left edges of the parent collaboration',
inject(function(modeling) {
// when
modeling.moveElements([startEvent], { x: -100, y: -100 }, participant);
// then
expect(getBounds(participant)).to.eql({ x: 122, y: 51, width: 496, height: 287 });
}));
it('should not resize the parent collaboration if element is placed too far outside',
inject(function(modeling) {
// when
modeling.moveElements([task], { x: 300, y: 0 }, participant);
// then
expect(getBounds(participant)).to.eql(expectedBounds);
}));
it('should undo resizing', inject(function(modeling, commandStack) {
// when
modeling.moveElements([startEvent], { x: -100, y: -100 }, participant);
commandStack.undo();
// then
expect(getBounds(participant)).to.eql(expectedBounds);
}));
it('should redo resizing', inject(function(modeling, commandStack) {
// when
modeling.moveElements([startEvent], { x: -100, y: -100 }, participant);
commandStack.undo();
commandStack.redo();
// then
expect(getBounds(participant)).to.eql({ x: 122, y: 51, width: 496, height: 287 });
}));
});
describe('after appending', function(){
it('should expand the bottom right edges of the parent collaboration',
inject(function(modeling) {
// when
modeling.appendShape(task, { type: 'bpmn:Task' }, { x: 660, y: 350 }, participant);
// then
assign(expectedBounds, { width: 563, height: 310 });
expect(getBounds(participant)).to.eql(expectedBounds);
}));
it('should undo resizing', inject(function(modeling, commandStack) {
// given
modeling.appendShape(task, { type: 'bpmn:Task' }, { x: 660, y: 250 }, participant);
// when
commandStack.undo();
// then
expect(getBounds(participant)).to.eql(expectedBounds);
}));
it('should redo resizing and restore shapes and connections',
inject(function(modeling, commandStack) {
// given
var task2 = modeling.appendShape(task, { type: 'bpmn:Task' }, { x: 660, y: 250 }, participant);
// when
commandStack.undo();
commandStack.redo();
// then
assign(expectedBounds, { width: 563 });
expect(getBounds(participant)).to.eql(expectedBounds);
expect(task2).to.be.defined;
expect(task.outgoing).not.to.be.empty;
expect(task2.incoming).not.to.be.empty;
}));
});
});