diff --git a/CHANGELOG.md b/CHANGELOG.md index c97e541..98038a4 100644 --- a/CHANGELOG.md +++ b/CHANGELOG.md @@ -6,6 +6,8 @@ All notable changes to [zeebe-bpmn-moddle](https://github.com/camunda/zeebe-bpmn ___Note:__ Yet to be released changes appear here._ +* `FEAT`: support `zeebe:LinkedResource` for `bpmn:ServiceTask` + ## 1.7.0 * `FEAT`: support `zeebe:TaskListener` for `bpmn:UserTask` ([#67](https://github.com/camunda/zeebe-bpmn-moddle/pull/67)) diff --git a/resources/zeebe.json b/resources/zeebe.json index 9974bf3..6c839b1 100644 --- a/resources/zeebe.json +++ b/resources/zeebe.json @@ -298,6 +298,52 @@ } ] }, + { + "name": "LinkedResource", + "superClass": [ + "Element" + ], + "meta": { + "allowedIn": [ + "bpmn:ServiceTask" + ] + }, + "properties": [ + { + "name": "resourceId", + "type": "String", + "isAttr": true + }, + { + "name": "resourceType", + "type": "String", + "isAttr": true + }, + { + "name": "linkName", + "type": "String", + "isAttr": true + } + ] + }, + { + "name": "LinkedResources", + "superClass": [ + "Element" + ], + "meta": { + "allowedIn": [ + "bpmn:ServiceTask" + ] + }, + "properties": [ + { + "name": "values", + "type": "LinkedResource", + "isMany": true + } + ] + }, { "name": "UserTask", "superClass": [ @@ -618,7 +664,8 @@ "extends": [ "zeebe:CalledDecision", "zeebe:CalledElement", - "zeebe:FormDefinition" + "zeebe:FormDefinition", + "zeebe:LinkedResource" ], "properties": [ { diff --git a/test/fixtures/xml/zeebe-linkedResources.bpmn b/test/fixtures/xml/zeebe-linkedResources.bpmn new file mode 100644 index 0000000..5a99100 --- /dev/null +++ b/test/fixtures/xml/zeebe-linkedResources.bpmn @@ -0,0 +1,27 @@ + + + + + + + + + + + + + + diff --git a/test/fixtures/xml/zeebe-service-task/serviceTask-zeebe-linkedResource.part.bpmn b/test/fixtures/xml/zeebe-service-task/serviceTask-zeebe-linkedResource.part.bpmn new file mode 100644 index 0000000..ce1fbaa --- /dev/null +++ b/test/fixtures/xml/zeebe-service-task/serviceTask-zeebe-linkedResource.part.bpmn @@ -0,0 +1,27 @@ + + + + + + + + + \ No newline at end of file diff --git a/test/spec/xml/read.js b/test/spec/xml/read.js index bb9faec..20bc92a 100644 --- a/test/spec/xml/read.js +++ b/test/spec/xml/read.js @@ -317,6 +317,59 @@ describe('read', function() { }); + describe('zeebe:linkedResource', function() { + + it('on ServiceTask', async function() { + + // given + var xml = readFile('test/fixtures/xml/zeebe-service-task/serviceTask-zeebe-linkedResource.part.bpmn'); + + // when + const { + rootElement: proc + } = await moddle.fromXML(xml, 'bpmn:ServiceTask'); + + // then + expect(proc).to.jsonEqual({ + $type: 'bpmn:ServiceTask', + id: 'collect-money', + name: 'Collect Money', + extensionElements: { + $type: 'bpmn:ExtensionElements', + values: [ + { + $type: 'zeebe:LinkedResources', + values: [ + { + $type: 'zeebe:LinkedResource', + resourceId:'=myScript', + resourceType:'RPA', + bindingType:'latest' + }, + { + $type: 'zeebe:LinkedResource', + resourceId: '=myScript', + resourceType: 'RPA', + bindingType: 'versionTag', + versionTag: 'v1' + }, + { + $type: 'zeebe:LinkedResource', + resourceId: '=myScript', + resourceType: 'RPA', + bindingType: 'deployment', + linkName: 'myScript' + } + ] + } + ] + } + }); + + }); + + }); + describe('zeebe:ioMapping / zeebe:Input / zeebe:Output', function() { it('on ServiceTask', async function() { diff --git a/test/spec/xml/roundtrip.js b/test/spec/xml/roundtrip.js index 8fc8a70..52132ae 100644 --- a/test/spec/xml/roundtrip.js +++ b/test/spec/xml/roundtrip.js @@ -89,4 +89,11 @@ describe('import -> export roundtrip', function() { }); + + describe('zeebe:LinkedResource', function() { + + it('should keep zeebe:linkedResource', validateExport('test/fixtures/xml/zeebe-linkedResources.bpmn')); + + }); + }); diff --git a/test/spec/xml/write.js b/test/spec/xml/write.js index d550cee..63a9aab 100644 --- a/test/spec/xml/write.js +++ b/test/spec/xml/write.js @@ -682,6 +682,27 @@ describe('write', function() { expect(xml).to.eql(expectedXML); }); + + it('on zeebe:LinkedResource', async function() { + + // given + const moddleElement = moddle.create('zeebe:LinkedResource', { + bindingType: 'versionTag', + versionTag: 'v1.0.0' + }); + + const expectedXML = ''; + + // when + const xml = await write(moddleElement); + + // then + expect(xml).to.eql(expectedXML); + }); + }); }); @@ -712,6 +733,42 @@ describe('write', function() { expect(xml).to.eql(expectedXML); }); + + it('zeebe:LinkedResource', async function() { + + // given + const moddleElement = moddle.create('zeebe:LinkedResource', { + resourceId:'=myScript', + resourceType:'RPA', + linkName:'myScript' }); + + const expectedXML = ''; + + // when + const xml = await write(moddleElement); + + // then + expect(xml).to.eql(expectedXML); + }); + + + it('zeebe:LinkedResources', async function() { + + // given + const moddleElement = moddle.create('zeebe:LinkedResources'); + + const expectedXML = ''; + + // when + const xml = await write(moddleElement); + + // then + expect(xml).to.eql(expectedXML); + }); }); });