From 55d10037d51dadb544369d54c5105f1338d4b5ed Mon Sep 17 00:00:00 2001 From: Philipp Fromme Date: Tue, 17 Sep 2024 09:40:33 +0200 Subject: [PATCH] feat: update `no-version-tag` rule and add `version-tag` rule Related to https://github.com/camunda/camunda-modeler/issues/4519 --- lib/compiled-config.js | 9 +- lib/utils/error-messages.js | 16 +-- lib/utils/properties-panel.js | 6 +- test/spec/utils/error-messages.spec.js | 161 ++++++++++++----------- test/spec/utils/properties-panel.spec.js | 27 ++-- 5 files changed, 117 insertions(+), 102 deletions(-) diff --git a/lib/compiled-config.js b/lib/compiled-config.js index 6557313..d10d095 100644 --- a/lib/compiled-config.js +++ b/lib/compiled-config.js @@ -72,6 +72,7 @@ const rules = { "camunda-compat/timer": "error", "camunda-compat/user-task-definition": "warn", "camunda-compat/user-task-form": "error", + "camunda-compat/version-tag": "error", "camunda-compat/wait-for-completion": "error" }; @@ -260,6 +261,10 @@ import rule_42 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/user-tas cache['bpmnlint-plugin-camunda-compat/user-task-form'] = rule_42; -import rule_43 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/wait-for-completion'; +import rule_43 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/version-tag'; -cache['bpmnlint-plugin-camunda-compat/wait-for-completion'] = rule_43; \ No newline at end of file +cache['bpmnlint-plugin-camunda-compat/version-tag'] = rule_43; + +import rule_44 from 'bpmnlint-plugin-camunda-compat/rules/camunda-cloud/wait-for-completion'; + +cache['bpmnlint-plugin-camunda-compat/wait-for-completion'] = rule_44; \ No newline at end of file diff --git a/lib/utils/error-messages.js b/lib/utils/error-messages.js index ca35010..89013a1 100644 --- a/lib/utils/error-messages.js +++ b/lib/utils/error-messages.js @@ -457,14 +457,6 @@ function getPropertyNotAllowedErrorMessage(report, executionPlatform, executionP return getSupportedMessage(`${ getIndefiniteArticle(typeString) } <${ typeString }> with
`, executionPlatform, executionPlatformVersion, allowedVersion); } - if (isAny(node, [ - 'zeebe:CalledDecision', - 'zeebe:CalledElement', - 'zeebe:FormDefinition' - ]) && property === 'versionTag') { - return getSupportedMessage(`${ getIndefiniteArticle(typeString) } <${ typeString }> with `, executionPlatform, executionPlatformVersion, allowedVersion); - } - return message; } @@ -602,6 +594,14 @@ function getPropertyRequiredErrorMessage(report, executionPlatform, executionPla return `${ getIndefiniteArticle(typeString) } <${ typeString }> must have a defined `; } + if (isAny(node, [ + 'zeebe:CalledDecision', + 'zeebe:CalledElement', + 'zeebe:FormDefinition' + ]) && requiredProperty === 'versionTag') { + return `${ getIndefiniteArticle(typeString) } <${ typeString }> with must have a defined `; + } + return message; } diff --git a/lib/utils/properties-panel.js b/lib/utils/properties-panel.js index a4779a1..f4ee7c7 100644 --- a/lib/utils/properties-panel.js +++ b/lib/utils/properties-panel.js @@ -579,7 +579,11 @@ export function getErrorMessage(id, report) { } if (id === 'versionTag') { - return getNotSupportedMessage('', allowedVersion); + if (type === ERROR_TYPES.EXTENSION_ELEMENT_NOT_ALLOWED) { + return getNotSupportedMessage('', allowedVersion); + } else { + return 'Version tag must be defined.'; + } } } diff --git a/test/spec/utils/error-messages.spec.js b/test/spec/utils/error-messages.spec.js index aaa7bb9..52ccad5 100644 --- a/test/spec/utils/error-messages.spec.js +++ b/test/spec/utils/error-messages.spec.js @@ -863,85 +863,6 @@ describe('utils/error-messages', function() { expect(errorMessage).to.equal('A with is only supported by Camunda 8.3 or newer'); }); - - describe('version tag', function() { - - it('should adjust (business rule task)', async function() { - - // given - const node = createElement('bpmn:BusinessRuleTask', { - extensionElements: createElement('bpmn:ExtensionElements', { - values: [ - createElement('zeebe:CalledDecision', { - versionTag: 'v1.0.0' - }) - ] - }) - }); - - const { default: rule } = await import('bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-version-tag'); - - const report = await getLintError(node, rule); - - // when - const errorMessage = getErrorMessage(report, 'Camunda Cloud', '1.0', 'desktop'); - - // then - expect(errorMessage).to.equal('A with is only supported by Camunda 8.6 or newer'); - }); - - - it('should adjust (call activity)', async function() { - - // given - const node = createElement('bpmn:CallActivity', { - extensionElements: createElement('bpmn:ExtensionElements', { - values: [ - createElement('zeebe:CalledElement', { - versionTag: 'v1.0.0' - }) - ] - }) - }); - - const { default: rule } = await import('bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-version-tag'); - - const report = await getLintError(node, rule); - - // when - const errorMessage = getErrorMessage(report, 'Camunda Cloud', '1.0', 'desktop'); - - // then - expect(errorMessage).to.equal('A with is only supported by Camunda 8.6 or newer'); - }); - - - it('should adjust (user task)', async function() { - - // given - const node = createElement('bpmn:UserTask', { - extensionElements: createElement('bpmn:ExtensionElements', { - values: [ - createElement('zeebe:FormDefinition', { - versionTag: 'v1.0.0' - }) - ] - }) - }); - - const { default: rule } = await import('bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-version-tag'); - - const report = await getLintError(node, rule); - - // when - const errorMessage = getErrorMessage(report, 'Camunda Cloud', '1.0', 'desktop'); - - // then - expect(errorMessage).to.equal('A with is only supported by Camunda 8.6 or newer'); - }); - - }); - }); @@ -1713,6 +1634,88 @@ describe('utils/error-messages', function() { expect(errorMessage).to.equal('An must have a defined '); }); + + describe('version tag', function() { + + it('should adjust (business rule task)', async function() { + + // given + const node = createElement('bpmn:BusinessRuleTask', { + extensionElements: createElement('bpmn:ExtensionElements', { + values: [ + createElement('zeebe:CalledDecision', { + bindingType: 'versionTag', + versionTag: '' + }) + ] + }) + }); + + const { default: rule } = await import('bpmnlint-plugin-camunda-compat/rules/camunda-cloud/version-tag'); + + const report = await getLintError(node, rule); + + // when + const errorMessage = getErrorMessage(report, 'Camunda Cloud', '8.6', 'desktop'); + + // then + expect(errorMessage).to.equal('A with must have a defined '); + }); + + + it('should adjust (call activity)', async function() { + + // given + const node = createElement('bpmn:CallActivity', { + extensionElements: createElement('bpmn:ExtensionElements', { + values: [ + createElement('zeebe:CalledElement', { + bindingType: 'versionTag', + versionTag: '' + }) + ] + }) + }); + + const { default: rule } = await import('bpmnlint-plugin-camunda-compat/rules/camunda-cloud/version-tag'); + + const report = await getLintError(node, rule); + + // when + const errorMessage = getErrorMessage(report, 'Camunda Cloud', '8.6', 'desktop'); + + // then + expect(errorMessage).to.equal('A with must have a defined '); + }); + + + it('should adjust (user task)', async function() { + + // given + const node = createElement('bpmn:UserTask', { + extensionElements: createElement('bpmn:ExtensionElements', { + values: [ + createElement('zeebe:FormDefinition', { + bindingType: 'versionTag', + versionTag: '' + }) + ] + }) + }); + + const { default: rule } = await import('bpmnlint-plugin-camunda-compat/rules/camunda-cloud/version-tag'); + + const report = await getLintError(node, rule); + + // when + const errorMessage = getErrorMessage(report, 'Camunda Cloud', '8.6', 'desktop'); + + // then + expect(errorMessage).to.equal('A with must have a defined '); + }); + + }); + }); diff --git a/test/spec/utils/properties-panel.spec.js b/test/spec/utils/properties-panel.spec.js index 90c4c9a..b378dd3 100644 --- a/test/spec/utils/properties-panel.spec.js +++ b/test/spec/utils/properties-panel.spec.js @@ -2160,15 +2160,16 @@ describe('utils/properties-panel', function() { extensionElements: createElement('bpmn:ExtensionElements', { values: [ createElement('zeebe:CalledDecision', { - versionTag: 'v1.0.0' + bindingType: 'versionTag', + versionTag: '' }) ] }) }); - const { default: rule } = await import('bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-version-tag'); + const { default: rule } = await import('bpmnlint-plugin-camunda-compat/rules/camunda-cloud/version-tag'); - const report = await getLintError(node, rule); + const report = await getLintError(node, rule, { version: '8.6' }); // when const entryIds = getEntryIds(report); @@ -2176,7 +2177,7 @@ describe('utils/properties-panel', function() { // then expect(entryIds).to.eql([ 'versionTag' ]); - expectErrorMessage(entryIds[ 0 ], 'Only supported by Camunda 8.6 or newer.', report); + expectErrorMessage(entryIds[ 0 ], 'Version tag must be defined.', report); }); @@ -2187,15 +2188,16 @@ describe('utils/properties-panel', function() { extensionElements: createElement('bpmn:ExtensionElements', { values: [ createElement('zeebe:CalledElement', { - versionTag: 'v1.0.0' + bindingType: 'versionTag', + versionTag: '' }) ] }) }); - const { default: rule } = await import('bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-version-tag'); + const { default: rule } = await import('bpmnlint-plugin-camunda-compat/rules/camunda-cloud/version-tag'); - const report = await getLintError(node, rule); + const report = await getLintError(node, rule, { version: '8.6' }); // when const entryIds = getEntryIds(report); @@ -2203,7 +2205,7 @@ describe('utils/properties-panel', function() { // then expect(entryIds).to.eql([ 'versionTag' ]); - expectErrorMessage(entryIds[ 0 ], 'Only supported by Camunda 8.6 or newer.', report); + expectErrorMessage(entryIds[ 0 ], 'Version tag must be defined.', report); }); @@ -2214,15 +2216,16 @@ describe('utils/properties-panel', function() { extensionElements: createElement('bpmn:ExtensionElements', { values: [ createElement('zeebe:FormDefinition', { - versionTag: 'v1.0.0' + bindingType: 'versionTag', + versionTag: '' }) ] }) }); - const { default: rule } = await import('bpmnlint-plugin-camunda-compat/rules/camunda-cloud/no-version-tag'); + const { default: rule } = await import('bpmnlint-plugin-camunda-compat/rules/camunda-cloud/version-tag'); - const report = await getLintError(node, rule); + const report = await getLintError(node, rule, { version: '8.6' }); // when const entryIds = getEntryIds(report); @@ -2230,7 +2233,7 @@ describe('utils/properties-panel', function() { // then expect(entryIds).to.eql([ 'versionTag' ]); - expectErrorMessage(entryIds[ 0 ], 'Only supported by Camunda 8.6 or newer.', report); + expectErrorMessage(entryIds[ 0 ], 'Version tag must be defined.', report); }); });