diff --git a/lib/features/modeling/behavior/GroupBehavior.js b/lib/features/modeling/behavior/GroupBehavior.js
index 2cba2453..fd43293b 100644
--- a/lib/features/modeling/behavior/GroupBehavior.js
+++ b/lib/features/modeling/behavior/GroupBehavior.js
@@ -24,7 +24,7 @@ var HIGH_PRIORITY = 2000;
*/
export default function GroupBehavior(
bpmnFactory,
- canvas,
+ bpmnjs,
elementRegistry,
eventBus,
injector,
@@ -32,18 +32,6 @@ export default function GroupBehavior(
) {
injector.invoke(CommandInterceptor, this);
- /**
- * Gets process definitions
- *
- * @return {ModdleElement} definitions
- */
- function getDefinitions() {
- var rootElement = canvas.getRootElement(),
- businessObject = getBusinessObject(rootElement);
-
- return businessObject.$parent;
- }
-
/**
* Removes a referenced category value for a given group shape
*
@@ -79,7 +67,7 @@ export default function GroupBehavior(
*/
function removeCategory(category) {
- var definitions = getDefinitions();
+ var definitions = bpmnjs.getDefinitions();
collectionRemove(definitions.get('rootElements'), category);
}
@@ -144,7 +132,7 @@ export default function GroupBehavior(
var businessObject = getBusinessObject(shape),
categoryValueRef = businessObject.categoryValueRef,
- definitions = getDefinitions(),
+ definitions = bpmnjs.getDefinitions(),
category = categoryValueRef ? categoryValueRef.$parent : null;
collectionAdd(category.get('categoryValue'), categoryValueRef);
@@ -162,7 +150,7 @@ export default function GroupBehavior(
if (is(businessObject, 'bpmn:Group') && !businessObject.categoryValueRef) {
- var definitions = getDefinitions(),
+ var definitions = bpmnjs.getDefinitions(),
categoryValue = createCategoryValue(definitions, bpmnFactory);
// link the reference to the Group
@@ -190,7 +178,7 @@ export default function GroupBehavior(
categoryValue;
if (is(property, 'bpmn:CategoryValue')) {
- categoryValue = createCategoryValue(getDefinitions(), bpmnFactory);
+ categoryValue = createCategoryValue(bpmnjs.getDefinitions(), bpmnFactory);
// return copy of category
return moddleCopy.copyElement(property, categoryValue);
@@ -201,7 +189,7 @@ export default function GroupBehavior(
GroupBehavior.$inject = [
'bpmnFactory',
- 'canvas',
+ 'bpmnjs',
'elementRegistry',
'eventBus',
'injector',
diff --git a/test/spec/features/modeling/behavior/GroupBehaviorSpec.bpmn b/test/spec/features/modeling/behavior/GroupBehaviorSpec.bpmn
index 940a1d75..2729d3a0 100644
--- a/test/spec/features/modeling/behavior/GroupBehaviorSpec.bpmn
+++ b/test/spec/features/modeling/behavior/GroupBehaviorSpec.bpmn
@@ -8,6 +8,7 @@
+
@@ -15,6 +16,9 @@
+
+
+
@@ -32,4 +36,7 @@
-
+
+
+
+
\ No newline at end of file
diff --git a/test/spec/features/modeling/behavior/GroupBehaviorSpec.js b/test/spec/features/modeling/behavior/GroupBehaviorSpec.js
index d21d5f5a..b6d3bf11 100644
--- a/test/spec/features/modeling/behavior/GroupBehaviorSpec.js
+++ b/test/spec/features/modeling/behavior/GroupBehaviorSpec.js
@@ -220,6 +220,47 @@ describe('features/modeling/behavior - groups', function() {
});
+
+ it('should always create new Category in definitions',
+ inject(function(canvas, elementFactory, modeling, bpmnjs) {
+
+ // given
+ var group = elementFactory.createShape({ type: 'bpmn:Group' }),
+ root = canvas.findRoot('Subprocess_1_plane'),
+ rootParent = getBusinessObject(root).$parent,
+ definitions = bpmnjs._definitions;
+
+ canvas.setRootElement(root);
+
+ // when
+ var groupShape = modeling.createShape(group, { x: 100, y: 100 }, root),
+ categoryValueRef = getBusinessObject(groupShape).categoryValueRef,
+ category = categoryValueRef.$parent;
+
+ // then
+ expect(categoryValueRef).to.exist;
+ expect(category).to.exist;
+
+ expectIncludedOrNot(
+ category.get('categoryValue'),
+ categoryValueRef,
+ true
+ );
+
+ expectIncludedOrNot(
+ definitions.get('rootElements'),
+ category,
+ true
+ );
+
+ expectIncludedOrNot(
+ rootParent.get('rootElements'),
+ category,
+ false
+ );
+
+ }));
+
});