diff --git a/test/fixtures/zeebe/read-write.bpmn b/test/fixtures/zeebe/read-write.bpmn
new file mode 100644
index 0000000..6e7a31b
--- /dev/null
+++ b/test/fixtures/zeebe/read-write.bpmn
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Write: approved
+
+
+
+ Read: approved
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/fixtures/zeebe/read-write.hierarchical.bpmn b/test/fixtures/zeebe/read-write.hierarchical.bpmn
new file mode 100644
index 0000000..586a784
--- /dev/null
+++ b/test/fixtures/zeebe/read-write.hierarchical.bpmn
@@ -0,0 +1,45 @@
+
+
+
+
+
+
+
+
+
+
+
+
+ Write: application.approved
+
+
+
+ Read: application.approved
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
+
diff --git a/test/spec/zeebe/ZeebeVariableResolver.spec.js b/test/spec/zeebe/ZeebeVariableResolver.spec.js
index f6e3536..4669e02 100644
--- a/test/spec/zeebe/ZeebeVariableResolver.spec.js
+++ b/test/spec/zeebe/ZeebeVariableResolver.spec.js
@@ -31,6 +31,8 @@ import subprocessNoOutputMappingXML from 'test/fixtures/zeebe/sub-process.no-out
import longBrokenExpressionXML from 'test/fixtures/zeebe/long-broken-expression.bpmn';
import immediatelyBrokenExpressionXML from 'test/fixtures/zeebe/immediately-broken-expression.bpmn';
import typeResolutionXML from 'test/fixtures/zeebe/type-resolution.bpmn';
+import readWriteXML from 'test/fixtures/zeebe/read-write.bpmn';
+import readWriteHierarchicalXML from 'test/fixtures/zeebe/read-write.hierarchical.bpmn';
import VariableProvider from 'lib/VariableProvider';
import { getInputOutput } from '../../../lib/base/util/ExtensionElementsUtil';
@@ -2602,6 +2604,64 @@ describe('ZeebeVariableResolver', function() {
});
+
+ describe('used variables - read and written', function() {
+
+ beforeEach(bootstrapModeler(readWriteXML, {
+ additionalModules: [
+ ZeebeVariableResolverModule
+ ],
+ moddleExtensions: {
+ zeebe: ZeebeModdle
+ }
+ }));
+
+
+ it('should indicate dual use', inject(async function(elementRegistry, variableResolver) {
+
+ // given
+ const task = elementRegistry.get('ValidateApprovedTask');
+
+ // when
+ const variables = await variableResolver.getVariablesForElement(task);
+
+ // then
+ expect(variables).to.variableEqual([
+ { name: 'approved', scope: 'Process_1', origin: [ 'ValidateApprovedTask' ], usedBy: [ 'ValidateApprovedTask' ] }
+ ]);
+ }));
+
+ });
+
+
+ describe('used variables - read and written / hierarchical', function() {
+
+ beforeEach(bootstrapModeler(readWriteHierarchicalXML, {
+ additionalModules: [
+ ZeebeVariableResolverModule
+ ],
+ moddleExtensions: {
+ zeebe: ZeebeModdle
+ }
+ }));
+
+
+ it('should indicate dual use', inject(async function(elementRegistry, variableResolver) {
+
+ // given
+ const task = elementRegistry.get('ValidateApprovedTask');
+
+ // when
+ const variables = await variableResolver.getVariablesForElement(task);
+
+ // then
+ expect(variables).to.variableEqual([
+ { name: 'application', scope: 'Process_1', origin: [ 'ValidateApprovedTask' ], usedBy: [ 'ValidateApprovedTask' ] }
+ ]);
+ }));
+
+ });
+
});
// helpers //////////////////////