From 388746c3b3fd55634411606256b3de220081c202 Mon Sep 17 00:00:00 2001 From: Beatriz Mendes Date: Mon, 25 Apr 2022 16:47:47 +0200 Subject: [PATCH] fix(replace): persist multi-instance props with `isSequential` change Closes #1581 --- .../popup-menu/ReplaceMenuProvider.js | 13 +++-- .../bpmn/draw/activity-markers-simple.bpmn | 10 +++- .../popup-menu/ReplaceMenuProviderSpec.js | 58 ++++++++++++++++++- 3 files changed, 72 insertions(+), 9 deletions(-) diff --git a/lib/features/popup-menu/ReplaceMenuProvider.js b/lib/features/popup-menu/ReplaceMenuProvider.js index 2aa238e4..aa30567d 100644 --- a/lib/features/popup-menu/ReplaceMenuProvider.js +++ b/lib/features/popup-menu/ReplaceMenuProvider.js @@ -14,7 +14,8 @@ import { import { forEach, - filter + filter, + isUndefined } from 'min-dash'; import * as replaceOptions from '../replace/ReplaceOptions'; @@ -426,16 +427,16 @@ ReplaceMenuProvider.prototype._getLoopEntries = function(element) { var translate = this._translate; function toggleLoopEntry(event, entry) { - var loopCharacteristics; + var loopCharacteristics = getBusinessObject(element).loopCharacteristics; if (entry.active) { loopCharacteristics = undefined; } else { - loopCharacteristics = self._moddle.create(entry.options.loopCharacteristics); - - if (entry.options.isSequential) { - loopCharacteristics.isSequential = entry.options.isSequential; + if (isUndefined(entry.options.isSequential) || !loopCharacteristics) { + loopCharacteristics = self._moddle.create(entry.options.loopCharacteristics); } + + loopCharacteristics.isSequential = entry.options.isSequential; } self._modeling.updateProperties(element, { loopCharacteristics: loopCharacteristics }); } diff --git a/test/fixtures/bpmn/draw/activity-markers-simple.bpmn b/test/fixtures/bpmn/draw/activity-markers-simple.bpmn index f2bd4c53..a41615a1 100644 --- a/test/fixtures/bpmn/draw/activity-markers-simple.bpmn +++ b/test/fixtures/bpmn/draw/activity-markers-simple.bpmn @@ -2,10 +2,16 @@ - + + foo + bar + - + + foo + bar + diff --git a/test/spec/features/popup-menu/ReplaceMenuProviderSpec.js b/test/spec/features/popup-menu/ReplaceMenuProviderSpec.js index 328add92..c40cd8a9 100644 --- a/test/spec/features/popup-menu/ReplaceMenuProviderSpec.js +++ b/test/spec/features/popup-menu/ReplaceMenuProviderSpec.js @@ -14,6 +14,9 @@ import customRulesModule from '../../../util/custom-rules'; import modelingModule from 'lib/features/modeling'; import replaceMenuProviderModule from 'lib/features/popup-menu'; +import camundaModdleModule from 'camunda-bpmn-moddle/lib'; +import camundaPackage from 'camunda-bpmn-moddle/resources/camunda.json'; + import { query as domQuery, queryAll as domQueryAll, @@ -23,6 +26,8 @@ import { import { is } from 'lib/util/ModelUtil'; import { isExpanded } from 'lib/util/DiUtil'; +import { getBusinessObject } from '../../../../lib/util/ModelUtil'; +import { omit } from 'min-dash'; describe('features/popup-menu - replace menu provider', function() { @@ -281,7 +286,12 @@ describe('features/popup-menu - replace menu provider', function() { describe('toggle', function() { - beforeEach(bootstrapModeler(diagramXMLMarkers, { modules: testModules })); + beforeEach(bootstrapModeler(diagramXMLMarkers,{ + modules: Object.assign(testModules, camundaModdleModule), + moddleExtensions: { + camunda: camundaPackage + } + })); var toggleActive; @@ -500,6 +510,29 @@ describe('features/popup-menu - replace menu provider', function() { expect(domClasses(loopEntry).has('active')).to.be.false; })); + + it('should keep sequential properties', inject(function(elementRegistry) { + + // given + var task = elementRegistry.get('SequentialTask'), + businessObject = getBusinessObject(task), + loopCharacteristics = Object.assign({}, businessObject.loopCharacteristics); + + openPopup(task); + + // assume + expect(loopCharacteristics.isSequential).to.be.true; + + // when + triggerAction('toggle-parallel-mi'); + + // then + var newLoopCharacteristics = businessObject.loopCharacteristics; + + expect(newLoopCharacteristics.isSequential).to.be.false; + expect(omit(newLoopCharacteristics, 'isSequential')).to.eql(omit(loopCharacteristics, 'isSequential')); + })); + }); @@ -583,6 +616,29 @@ describe('features/popup-menu - replace menu provider', function() { expect(domClasses(parallelEntry).has('active')).to.be.false; })); + + it('should keep parallel properties', inject(function(elementRegistry) { + + // given + var task = elementRegistry.get('ParallelTask'), + businessObject = getBusinessObject(task), + loopCharacteristics = Object.assign({}, businessObject.loopCharacteristics); + + openPopup(task); + + // assume + expect(loopCharacteristics.isSequential).to.be.undefined; + + // when + triggerAction('toggle-sequential-mi'); + + // then + var newLoopCharacteristics = businessObject.loopCharacteristics; + + expect(newLoopCharacteristics.isSequential).to.be.true; + expect(omit(newLoopCharacteristics, 'isSequential')).to.eql(loopCharacteristics); + })); + });