Skip to content

Commit

Permalink
feat: add templates rule
Browse files Browse the repository at this point in the history
  • Loading branch information
philippfromme committed Jun 8, 2022
1 parent ca5b935 commit fbfb24c
Show file tree
Hide file tree
Showing 21 changed files with 343 additions and 23 deletions.
38 changes: 38 additions & 0 deletions docs/ERRORS.md
Original file line number Diff line number Diff line change
Expand Up @@ -205,6 +205,44 @@ const ERROR_TYPES = {
}
```

## ❌ Property Not Allowed Error

### Type Definition

```js
/**
* @typedef PropertyNotAllowedError
*
* @type {Object}
*
* @property {string} id
* @property {(number|string)[]|null} path
* @property {Object} error
* @property {ERROR_TYPES} error.type
* @property {import('moddle/lib/base')} error.node
* @property {import('moddle/lib/base')|null} error.parentNode
* @property {string} error.property
*/
```

### Example

```js
{
id: 'ServiceTask_1',
message: 'Property <modelerTemplate> not allowed',
path: [
'modelerTemplate'
],
error: {
type: ERROR_TYPES.PROPERTY_NOT_ALLOWED,
node: Base { $type: 'bpmn:ServiceTask', ... },
parentNode: null,
property: 'modelerTemplate'
}
}
```

## ❌ Property Required Error

### Type Definition
Expand Down
4 changes: 4 additions & 0 deletions index.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ module.exports = {
'has-error-reference': 'error',
'has-loop-characteristics': 'error',
'has-message-reference': 'error',
'has-no-template': 'error',
'has-subscription': 'error',
'is-element': [ 'error', isElementConfig.camundaCloud10 ]
}
Expand All @@ -21,6 +22,7 @@ module.exports = {
'has-error-reference': 'error',
'has-loop-characteristics': 'error',
'has-message-reference': 'error',
'has-no-template': 'error',
'has-subscription': 'error',
'is-element': [ 'error', isElementConfig.camundaCloud11 ]
}
Expand All @@ -32,6 +34,7 @@ module.exports = {
'has-error-reference': 'error',
'has-loop-characteristics': 'error',
'has-message-reference': 'error',
'has-no-template': 'error',
'has-subscription': 'error',
'is-element': [ 'error', isElementConfig.camundaCloud12 ]
}
Expand All @@ -43,6 +46,7 @@ module.exports = {
'has-error-reference': 'error',
'has-loop-characteristics': 'error',
'has-message-reference': 'error',
'has-no-template': 'error',
'has-subscription': 'error',
'is-element': [ 'error', isElementConfig.camundaCloud12 ]
}
Expand Down
15 changes: 3 additions & 12 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

3 changes: 1 addition & 2 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -25,15 +25,14 @@
"devDependencies": {
"bpmn-moddle": "^7.1.2",
"bpmnlint": "^7.8.0",
"camunda-bpmn-moddle": "^6.1.1",
"chai": "^4.3.5",
"eslint": "^7.32.0",
"eslint-plugin-bpmn-io": "^0.13.0",
"mocha": "^5.2.0",
"modeler-moddle": "^0.1.0",
"sinon": "^13.0.1",
"sinon-chai": "^3.7.0",
"zeebe-bpmn-moddle": "^0.10.0"
"zeebe-bpmn-moddle": "^0.12.1"
},
"dependencies": {
"@philippfromme/moddle-helpers": "^0.1.0",
Expand Down
21 changes: 21 additions & 0 deletions rules/has-no-template.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
const { hasProperties } = require('./utils/element');

const { reportErrors } = require('./utils/reporter');

module.exports = function() {
function check(node, reporter) {
const errors = hasProperties(node, {
modelerTemplate: {
allowed: false
}
}, node);

if (errors && errors.length) {
reportErrors(node, reporter, errors);
}
}

return {
check
};
};
19 changes: 19 additions & 0 deletions rules/utils/element.js
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
const {
isArray,
isDefined,
some
} = require('min-dash');

Expand Down Expand Up @@ -144,6 +145,24 @@ module.exports.hasProperties = function(node, properties, parentNode = null) {
];
}

if (propertyChecks.allowed === false && isDefined(propertyValue)) {
return [
...results,
{
message: `Property <${ propertyName }> not allowed`,
path: path
? [ ...path, propertyName ]
: [ propertyName ],
error: {
type: ERROR_TYPES.PROPERTY_NOT_ALLOWED,
node,
parentNode: parentNode == node ? null : parentNode,
property: propertyName
}
}
];
}

return results;
}, []);
};
Expand Down
1 change: 1 addition & 0 deletions rules/utils/error-types.js
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ module.exports.ERROR_TYPES = Object.freeze({
EXTENSION_ELEMENT_NOT_ALLOWED: 'extensionElementNotAllowed',
EXTENSION_ELEMENT_REQUIRED: 'extensionElementRequired',
PROPERTY_DEPENDEND_REQUIRED: 'propertyDependendRequired',
PROPERTY_NOT_ALLOWED: 'propertyNotAllowed',
PROPERTY_REQUIRED: 'propertyRequired',
PROPERTY_TYPE_NOT_ALLOWED: 'propertyTypeNotAllowed'
});
65 changes: 65 additions & 0 deletions test/camunda-cloud/has-no-template.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,65 @@
const RuleTester = require('bpmnlint/lib/testers/rule-tester');

const rule = require('../../rules/has-no-template');

const {
createModdle,
createProcess
} = require('../helper');

const { ERROR_TYPES } = require('../../rules/utils/element');

const valid = [
{
name: 'service task',
moddleElement: createModdle(createProcess(`
<bpmn:serviceTask id="ServiceTask_1" />
`))
}
];

const invalid = [
{
name: 'service task (template)',
moddleElement: createModdle(createProcess(`
<bpmn:serviceTask id="ServiceTask_1" zeebe:modelerTemplate="foo" />
`)),
report: {
id: 'ServiceTask_1',
message: 'Property <modelerTemplate> not allowed',
path: [
'modelerTemplate'
],
error: {
type: ERROR_TYPES.PROPERTY_NOT_ALLOWED,
node: 'ServiceTask_1',
parentNode: null,
property: 'modelerTemplate'
}
}
},
{
name: 'service task (REST connector)',
moddleElement: createModdle(createProcess(`
<bpmn:serviceTask id="ServiceTask_1" zeebe:modelerTemplate="io.camunda.connectors.HttpJson.v1.noAuth" />
`)),
report: {
id: 'ServiceTask_1',
message: 'Property <modelerTemplate> not allowed',
path: [
'modelerTemplate'
],
error: {
type: ERROR_TYPES.PROPERTY_NOT_ALLOWED,
node: 'ServiceTask_1',
parentNode: null,
property: 'modelerTemplate'
}
}
}
];

RuleTester.verify('has-no-template', rule, {
valid,
invalid
});
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,7 @@
<bpmn:startEvent id="StartEvent_1">
<bpmn:outgoing>Flow_1c9prry</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:serviceTask id="Activity_0tmvr8k" name="foo">
<bpmn:serviceTask id="Activity_0tmvr8k" name="foo" zeebe:modelerTemplate="io.camunda.connectors.HttpJson.v1.noAuth">
<bpmn:extensionElements>
<zeebe:taskDefinition />
</bpmn:extensionElements>
Expand Down
3 changes: 3 additions & 0 deletions test/camunda-cloud/integration/camunda-cloud-1-0.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -67,6 +67,9 @@ describe('integration - camunda-cloud-1-0', function() {
expect(reports[ 'camunda-compat/has-message-reference' ]).to.exist;
expect(reports[ 'camunda-compat/has-message-reference' ]).to.have.length(1);

expect(reports[ 'camunda-compat/has-no-template' ]).to.exist;
expect(reports[ 'camunda-compat/has-no-template' ]).to.have.length(1);

expect(reports[ 'camunda-compat/has-subscription' ]).to.exist;
expect(reports[ 'camunda-compat/has-subscription' ]).to.have.length(1);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<bpmn:outgoing>Flow_1c9prry</bpmn:outgoing>
<bpmn:outgoing>Flow_00dv1kp</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:serviceTask id="Activity_0tmvr8k" name="foo">
<bpmn:serviceTask id="Activity_0tmvr8k" name="foo" zeebe:modelerTemplate="io.camunda.connectors.HttpJson.v1.noAuth">
<bpmn:extensionElements>
<zeebe:taskDefinition />
</bpmn:extensionElements>
Expand Down
3 changes: 3 additions & 0 deletions test/camunda-cloud/integration/camunda-cloud-1-1.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,9 @@ describe('integration - camunda-cloud-1-1', function() {
expect(reports[ 'camunda-compat/has-message-reference' ]).to.exist;
expect(reports[ 'camunda-compat/has-message-reference' ]).to.have.length(2);

expect(reports[ 'camunda-compat/has-no-template' ]).to.exist;
expect(reports[ 'camunda-compat/has-no-template' ]).to.have.length(1);

expect(reports[ 'camunda-compat/has-subscription' ]).to.exist;
expect(reports[ 'camunda-compat/has-subscription' ]).to.have.length(1);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<bpmn:outgoing>Flow_1c9prry</bpmn:outgoing>
<bpmn:outgoing>Flow_00dv1kp</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:serviceTask id="Activity_0tmvr8k" name="foo">
<bpmn:serviceTask id="Activity_0tmvr8k" name="foo" zeebe:modelerTemplate="io.camunda.connectors.HttpJson.v1.noAuth">
<bpmn:extensionElements>
<zeebe:taskDefinition />
</bpmn:extensionElements>
Expand Down
3 changes: 3 additions & 0 deletions test/camunda-cloud/integration/camunda-cloud-1-2.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -119,6 +119,9 @@ describe('integration - camunda-cloud-1-2', function() {
expect(reports[ 'camunda-compat/has-message-reference' ]).to.exist;
expect(reports[ 'camunda-compat/has-message-reference' ]).to.have.length(2);

expect(reports[ 'camunda-compat/has-no-template' ]).to.exist;
expect(reports[ 'camunda-compat/has-no-template' ]).to.have.length(1);

expect(reports[ 'camunda-compat/has-subscription' ]).to.exist;
expect(reports[ 'camunda-compat/has-subscription' ]).to.have.length(1);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<bpmn:outgoing>Flow_1c9prry</bpmn:outgoing>
<bpmn:outgoing>Flow_00dv1kp</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:serviceTask id="Activity_0tmvr8k" name="foo">
<bpmn:serviceTask id="Activity_0tmvr8k" name="foo" zeebe:modelerTemplate="io.camunda.connectors.HttpJson.v1.noAuth">
<bpmn:extensionElements>
<zeebe:taskDefinition />
</bpmn:extensionElements>
Expand Down
3 changes: 3 additions & 0 deletions test/camunda-cloud/integration/camunda-cloud-1-3.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -145,6 +145,9 @@ describe('integration - camunda-cloud-1-3', function() {
expect(reports[ 'camunda-compat/has-message-reference' ]).to.exist;
expect(reports[ 'camunda-compat/has-message-reference' ]).to.have.length(2);

expect(reports[ 'camunda-compat/has-no-template' ]).to.exist;
expect(reports[ 'camunda-compat/has-no-template' ]).to.have.length(1);

expect(reports[ 'camunda-compat/has-subscription' ]).to.exist;
expect(reports[ 'camunda-compat/has-subscription' ]).to.have.length(1);

Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<bpmn:outgoing>Flow_1c9prry</bpmn:outgoing>
<bpmn:outgoing>Flow_00dv1kp</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:serviceTask id="Activity_0tmvr8k" name="foo">
<bpmn:serviceTask id="Activity_0tmvr8k" name="foo" zeebe:modelerTemplate="io.camunda.connectors.HttpJson.v1.noAuth">
<bpmn:extensionElements>
<zeebe:taskDefinition />
</bpmn:extensionElements>
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -8,7 +8,7 @@
<bpmn:outgoing>Flow_1c9prry</bpmn:outgoing>
<bpmn:outgoing>Flow_00dv1kp</bpmn:outgoing>
</bpmn:startEvent>
<bpmn:serviceTask id="Activity_0tmvr8k" name="foo">
<bpmn:serviceTask id="Activity_0tmvr8k" name="foo" zeebe:modelerTemplate="io.camunda.connectors.HttpJson.v1.noAuth">
<bpmn:extensionElements>
<zeebe:taskDefinition type="foo" />
</bpmn:extensionElements>
Expand Down
4 changes: 4 additions & 0 deletions test/configs.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -10,6 +10,7 @@ describe('configs', function() {
'has-error-reference': 'error',
'has-loop-characteristics': 'error',
'has-message-reference': 'error',
'has-no-template': 'error',
'has-subscription': 'error',
'is-element': 'error'
}));
Expand All @@ -21,6 +22,7 @@ describe('configs', function() {
'has-error-reference': 'error',
'has-loop-characteristics': 'error',
'has-message-reference': 'error',
'has-no-template': 'error',
'has-subscription': 'error',
'is-element': 'error'
}));
Expand All @@ -32,6 +34,7 @@ describe('configs', function() {
'has-error-reference': 'error',
'has-loop-characteristics': 'error',
'has-message-reference': 'error',
'has-no-template': 'error',
'has-subscription': 'error',
'is-element': 'error'
}));
Expand All @@ -43,6 +46,7 @@ describe('configs', function() {
'has-error-reference': 'error',
'has-loop-characteristics': 'error',
'has-message-reference': 'error',
'has-no-template': 'error',
'has-subscription': 'error',
'is-element': 'error'
}));
Expand Down
Loading

0 comments on commit fbfb24c

Please sign in to comment.