Skip to content

Commit

Permalink
fix(user-task-forms): report error on empty string
Browse files Browse the repository at this point in the history
  • Loading branch information
philippfromme authored and merge-me[bot] committed Nov 7, 2023
1 parent 95bced6 commit fd01713
Show file tree
Hide file tree
Showing 3 changed files with 204 additions and 11 deletions.
20 changes: 16 additions & 4 deletions rules/utils/element.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,8 @@ const {
isFunction,
isNil,
isObject,
isString,
isUndefined,
some
} = require('min-dash');

Expand Down Expand Up @@ -141,7 +143,7 @@ module.exports.hasProperties = function(node, properties, parentNode = null) {

const propertyValue = node.get(propertyName);

if (propertyChecks.required && !propertyValue) {
if (propertyChecks.required && isEmptyValue(propertyValue)) {
return [
...results,
{
Expand All @@ -164,7 +166,7 @@ module.exports.hasProperties = function(node, properties, parentNode = null) {
if (propertyChecks.dependentRequired) {
const dependency = node.get(propertyChecks.dependentRequired);

if (dependency && !propertyValue) {
if (dependency && isEmptyValue(propertyValue)) {
return [
...results,
{
Expand Down Expand Up @@ -303,7 +305,9 @@ function findProperties(node, propertyNames) {
const properties = [];

for (const propertyName of propertyNames) {
if (isDefined(node.get(propertyName))) {
const propertyValue = node.get(propertyName);

if (!isEmptyValue(propertyValue)) {
properties.push(node.get(propertyName));
}
}
Expand Down Expand Up @@ -470,4 +474,12 @@ function findParent(node, type) {
return findParent(parent, type);
}

module.exports.findParent = findParent;
module.exports.findParent = findParent;

function isEmptyString(value) {
return isString(value) && value.trim() === '';
}

function isEmptyValue(value) {
return isUndefined(value) || isNil(value) || isEmptyString(value);
}
95 changes: 90 additions & 5 deletions test/camunda-cloud/user-task-form.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -49,7 +49,7 @@ const valid = [

const invalid = [
{
name: 'user task (no form key)',
name: 'user task (no form key) (Camunda 8.2)',
config: { version: '8.2' },
moddleElement: createModdle(createProcess(`
<bpmn:userTask id="UserTask_1">
Expand All @@ -76,7 +76,34 @@ const invalid = [
}
},
{
name: 'user task (no form key or form ID)',
name: 'user task (empty form key) (Camunda 8.2)',
config: { version: '8.2' },
moddleElement: createModdle(createProcess(`
<bpmn:userTask id="UserTask_1">
<bpmn:extensionElements>
<zeebe:formDefinition formKey="" />
</bpmn:extensionElements>
</bpmn:userTask>
`)),
report: {
id: 'UserTask_1',
message: 'Element of type <zeebe:FormDefinition> must have property <formKey>',
path: [
'extensionElements',
'values',
0,
'formKey'
],
data: {
type: ERROR_TYPES.PROPERTY_REQUIRED,
node: 'zeebe:FormDefinition',
parentNode: 'UserTask_1',
requiredProperty: 'formKey'
}
}
},
{
name: 'user task (no form key or form ID) (Camunda 8.3)',
config: { version: '8.3' },
moddleElement: createModdle(createProcess(`
<bpmn:userTask id="UserTask_1">
Expand Down Expand Up @@ -105,7 +132,65 @@ const invalid = [
}
},
{
name: 'user task (form ID with Camunda 8.2)',
name: 'user task (empty form key) (Camunda 8.3)',
config: { version: '8.3' },
moddleElement: createModdle(createProcess(`
<bpmn:userTask id="UserTask_1">
<bpmn:extensionElements>
<zeebe:formDefinition formKey="" />
</bpmn:extensionElements>
</bpmn:userTask>
`)),
report: {
id: 'UserTask_1',
message: 'Element of type <zeebe:FormDefinition> must have property <formKey> or <formId>',
path: [
'extensionElements',
'values',
0
],
data: {
type: ERROR_TYPES.PROPERTY_REQUIRED,
node: 'zeebe:FormDefinition',
parentNode: 'UserTask_1',
requiredProperty: [
'formKey',
'formId'
]
}
}
},
{
name: 'user task (empty form ID) (Camunda 8.3)',
config: { version: '8.3' },
moddleElement: createModdle(createProcess(`
<bpmn:userTask id="UserTask_1">
<bpmn:extensionElements>
<zeebe:formDefinition formId="" />
</bpmn:extensionElements>
</bpmn:userTask>
`)),
report: {
id: 'UserTask_1',
message: 'Element of type <zeebe:FormDefinition> must have property <formKey> or <formId>',
path: [
'extensionElements',
'values',
0
],
data: {
type: ERROR_TYPES.PROPERTY_REQUIRED,
node: 'zeebe:FormDefinition',
parentNode: 'UserTask_1',
requiredProperty: [
'formKey',
'formId'
]
}
}
},
{
name: 'user task (form ID) (Camunda 8.2)',
config: { version: '8.2' },
moddleElement: createModdle(createProcess(`
<bpmn:userTask id="UserTask_1">
Expand Down Expand Up @@ -133,7 +218,7 @@ const invalid = [
}
},
{
name: 'user task (form key and form ID)',
name: 'user task (form key and form ID) (Camunda 8.3)',
config: { version: '8.3' },
moddleElement: createModdle(createProcess(`
<bpmn:userTask id="UserTask_1">
Expand Down Expand Up @@ -162,7 +247,7 @@ const invalid = [
}
},
{
name: 'user task (empty user task form)',
name: 'user task (empty user task form) (Camunda 8.2)',
config: { version: '8.2' },
moddleElement: createModdle(createProcess(`
<bpmn:extensionElements>
Expand Down
100 changes: 98 additions & 2 deletions test/utils/element.spec.js
Original file line number Diff line number Diff line change
Expand Up @@ -552,6 +552,36 @@ describe('utils/element', function() {
}
]);
});


it('should return errors (property is empty string)', function() {

// given
const formDefinition = createElement('zeebe:FormDefinition', {
formKey: ''
});

// when
const errors = hasProperty(formDefinition, [ 'formKey', 'formId' ]);

// then
expect(errors).to.eql([
{
message: 'Element of type <zeebe:FormDefinition> must have property <formKey> or <formId>',
path: null,
data: {
type: ERROR_TYPES.PROPERTY_REQUIRED,
node: formDefinition,
parentNode: null,
requiredProperty: [
'formKey',
'formId'
]
}
}
]);
});

});


Expand All @@ -578,7 +608,7 @@ describe('utils/element', function() {
});


it('should return errors', function() {
it('should return errors (undefined)', function() {

// given
const taskDefinition = createElement('zeebe:TaskDefinition');
Expand Down Expand Up @@ -607,6 +637,38 @@ describe('utils/element', function() {
]);
});


it('should return errors (empty string)', function() {

// given
const taskDefinition = createElement('zeebe:TaskDefinition', {
type: ''
});

// when
const errors = hasProperties(taskDefinition, {
type: {
required: true
}
});

// then
expect(errors).eql([
{
message: 'Element of type <zeebe:TaskDefinition> must have property <type>',
path: [
'type'
],
data: {
type: ERROR_TYPES.PROPERTY_REQUIRED,
node: taskDefinition,
parentNode: null,
requiredProperty: 'type'
}
}
]);
});

});


Expand All @@ -632,7 +694,7 @@ describe('utils/element', function() {
});


it('should return errors', function() {
it('should return errors (undefined)', function() {

// given
const loopCharacteristics = createElement('zeebe:LoopCharacteristics', {
Expand Down Expand Up @@ -664,6 +726,40 @@ describe('utils/element', function() {
]);
});


it('should return errors (empty string)', function() {

// given
const loopCharacteristics = createElement('zeebe:LoopCharacteristics', {
outputCollection: 'foo',
outputElement: ''
});

// when
const errors = hasProperties(loopCharacteristics, {
outputElement: {
dependentRequired: 'outputCollection'
}
});

// then
expect(errors).eql([
{
message: 'Element of type <zeebe:LoopCharacteristics> must have property <outputElement> if it has property <outputCollection>',
path: [
'outputElement'
],
data: {
type: ERROR_TYPES.PROPERTY_DEPENDENT_REQUIRED,
node: loopCharacteristics,
parentNode: null,
property: 'outputCollection',
dependentRequiredProperty: 'outputElement'
}
}
]);
});

});


Expand Down

0 comments on commit fd01713

Please sign in to comment.