UNPKG

bpmn-js-properties-panel

Version:
729 lines (478 loc) 19.1 kB
'use strict'; var TestHelper = require('../../../../../TestHelper'); /* global inject */ var findExtension = require('../../../../../../lib/provider/camunda/element-templates/Helper').findExtension, findCamundaInOut = require('../../../../../../lib/provider/camunda/element-templates/Helper').findCamundaInOut, findInputParameter = require('../../../../../../lib/provider/camunda/element-templates/Helper').findInputParameter, findOutputParameter = require('../../../../../../lib/provider/camunda/element-templates/Helper').findOutputParameter, findCamundaProperty = require('../../../../../../lib/provider/camunda/element-templates/Helper').findCamundaProperty; var entrySelect = require('./Helper').entrySelect, selectAndGet = require('./Helper').selectAndGet, bootstrap = require('./Helper').bootstrap; describe('element-templates/parts - Custom Properties', function() { describe('bindings', function() { var diagramXML = require('./CustomProps.bpmn'), elementTemplates = require('./CustomProps.json'); beforeEach(bootstrap(diagramXML, elementTemplates)); describe('property', function() { it('should display', inject(function() { // given selectAndGet('AsyncTask'); // when var awesomeEntry = entrySelect('custom-my.awesome.Task-0'), checkbox = entrySelect('custom-my.awesome.Task-0', '[type=checkbox]'); // then expect(awesomeEntry).to.exist; expect(checkbox).to.exist; })); it('should change, updating Boolean property', inject(function() { // given var task = selectAndGet('AsyncTask'); var checkbox = entrySelect('custom-my.awesome.Task-0', '[type=checkbox]'); // when // trigger click on the checkbox TestHelper.triggerEvent(checkbox, 'click'); // then expect(task.get('camunda:asyncBefore')).to.be.false; })); it('should change, updating String property'); }); describe('camunda:property', function() { it('should display', inject(function() { // given selectAndGet('WebserviceTask'); // when var endpointEntry = entrySelect('custom-com.mycompany.WsCaller-0'), textField = entrySelect('custom-com.mycompany.WsCaller-0', 'input'); // then expect(endpointEntry).to.exist; expect(textField).to.exist; })); it('should change, updating camunda:Property', inject(function() { // given var task = selectAndGet('WebserviceTask'); var textField = entrySelect('custom-com.mycompany.WsCaller-0', 'input'); // when TestHelper.triggerValue(textField, 'https://baba', 'change'); var camundaProperties = findExtension(task, 'camunda:Properties'), wsProperty = findCamundaProperty(camundaProperties, { name: 'webServiceUrl' }); // then expect(wsProperty).to.exist; expect(wsProperty.value).to.eql('https://baba'); })); it('should change, creating camunda:Property if non-existing', inject(function() { // given var task = selectAndGet('WebserviceTask_NoData'); var textField = entrySelect('custom-com.mycompany.WsCaller-0', 'input'); // when TestHelper.triggerValue(textField, 'https://baba', 'change'); var camundaProperties = findExtension(task, 'camunda:Properties'), wsProperty = findCamundaProperty(camundaProperties, { name: 'webServiceUrl' }); // then expect(wsProperty).to.exist; expect(wsProperty.value).to.eql('https://baba'); })); }); describe('camunda:inputParameter', function() { it('should display', inject(function() { // given selectAndGet('MailTask'); // when var recipientField = entrySelect('custom-my.mail.Task-0', 'input'), templateField = entrySelect('custom-my.mail.Task-1', 'div[contenteditable]'); // then expect(recipientField).to.exist; expect(templateField).to.exist; })); it('should hide if type=Hidden', inject(function() { // given selectAndGet('MailTask'); // when var hiddenField = entrySelect('custom-my.mail.Task-3', '*'); // then expect(hiddenField).not.to.exist; })); it('should change, setting camunda:InputParameter (plain)', inject(function() { // given var task = selectAndGet('MailTask'); var recipientField = entrySelect('custom-my.mail.Task-0', 'input'); // when TestHelper.triggerValue(recipientField, 'foo@bar', 'change'); var inputOutput = findExtension(task, 'camunda:InputOutput'), recipientMapping = findInputParameter(inputOutput, { name: 'recipient' }); // then expect(recipientMapping).to.exist; expect(recipientMapping).to.jsonEqual({ $type: 'camunda:InputParameter', name: 'recipient', value: 'foo@bar' }); })); it('should change, setting camunda:InputParameter (script)', inject(function() { // given var task = selectAndGet('MailTask'); var templateField = entrySelect('custom-my.mail.Task-1', 'div[contenteditable]'); // when TestHelper.triggerValue(templateField, 'Hello ${foo}', 'change'); var inputOutput = findExtension(task, 'camunda:InputOutput'), recipientMapping = findInputParameter(inputOutput, { name: 'messageBody' }); // then expect(recipientMapping).to.exist; expect(recipientMapping).to.jsonEqual({ $type: 'camunda:InputParameter', name: 'messageBody', definition: { $type: 'camunda:Script', scriptFormat: 'freemarker', value: 'Hello ${foo}' } }); })); it('should change, creating camunda:InputParameter if non-existing', inject(function() { // given var task = selectAndGet('MailTask_NoData'); var recipientField = entrySelect('custom-my.mail.Task-0', 'input'); // when TestHelper.triggerValue(recipientField, 'foo@bar', 'change'); var inputOutput = findExtension(task, 'camunda:InputOutput'), recipientMapping = findInputParameter(inputOutput, { name: 'recipient' }); // then expect(recipientMapping).to.exist; expect(recipientMapping).to.jsonEqual({ $type: 'camunda:InputParameter', name: 'recipient', value: 'foo@bar' }); })); }); describe('camunda:outputParameter', function() { it('should display', inject(function() { // given selectAndGet('MailTask'); // when var resultField = entrySelect('custom-my.mail.Task-2', 'input'); // then expect(resultField).to.exist; })); it('should change, setting camunda:OutputParameter (plain)'); it('should change, setting camunda:OutputParameter (script)', inject(function() { // given var task = selectAndGet('MailTask'); // when var resultField = entrySelect('custom-my.mail.Task-2', 'input'); // when TestHelper.triggerValue(resultField, 'result', 'change'); var inputOutput = findExtension(task, 'camunda:InputOutput'), resultMapping = findOutputParameter(inputOutput, { source: '${mailResult}', scriptFormat: 'freemarker' }); // then expect(resultMapping).to.exist; expect(resultMapping).to.jsonEqual({ $type: 'camunda:OutputParameter', name: 'result', definition: { $type: 'camunda:Script', scriptFormat: 'freemarker', value: '${mailResult}' } }); })); it('should change, creating camunda:OutputParameter if non-existing', inject(function() { // given var task = selectAndGet('MailTask_NoData'); // when var resultField = entrySelect('custom-my.mail.Task-2', 'input'); // when TestHelper.triggerValue(resultField, 'result', 'change'); var inputOutput = findExtension(task, 'camunda:InputOutput'), resultMapping = findOutputParameter(inputOutput, { source: '${mailResult}', scriptFormat: 'freemarker' }); // then expect(resultMapping).to.exist; expect(resultMapping).to.jsonEqual({ $type: 'camunda:OutputParameter', name: 'result', definition: { $type: 'camunda:Script', scriptFormat: 'freemarker', value: '${mailResult}' } }); })); }); describe('camunda:in', function() { it('should display', inject(function() { // given selectAndGet('CallActivity'); // when var resultField = entrySelect('custom-my.Caller-1', 'input'); // then expect(resultField).to.exist; })); it('should change, setting camunda:in (source)', inject(function() { // given var task = selectAndGet('CallActivity'); // when var resultField = entrySelect('custom-my.Caller-1', 'input'); // when TestHelper.triggerValue(resultField, 'result', 'change'); var camundaIn = findCamundaInOut(task, { type: 'camunda:in', target: 'var_called_source' }); expect(camundaIn).to.jsonEqual({ $type: 'camunda:In', target: 'var_called_source', source: 'result' }); })); it('should change, setting camunda:in:businessKey', inject(function() { // given var task = selectAndGet('CallActivity'); // when var resultField = entrySelect('custom-my.Caller-9', 'input'); // when TestHelper.triggerValue(resultField, '${key}', 'change'); var camundaIn = findCamundaInOut(task, { type: 'camunda:in:businessKey' }); expect(camundaIn).to.jsonEqual({ $type: 'camunda:In', businessKey: '${key}' }); })); it('should change, setting camunda:in (sourceExpression)', inject(function() { // given var task = selectAndGet('CallActivity'); // when var resultField = entrySelect('custom-my.Caller-3', 'input'); // when TestHelper.triggerValue(resultField, '${expr_foo}', 'change'); var camundaIn = findCamundaInOut(task, { type: 'camunda:in', target: 'var_called_expr' }); expect(camundaIn).to.jsonEqual({ $type: 'camunda:In', target: 'var_called_expr', sourceExpression: '${expr_foo}' }); })); it('should change, creating camunda:in if non-existing', inject(function() { // given var task = selectAndGet('CallActivity_NoData'); // when var resultField = entrySelect('custom-my.Caller-3', 'input'); // when TestHelper.triggerValue(resultField, '${expr_foo}', 'change'); var camundaIn = findCamundaInOut(task, { type: 'camunda:in', target: 'var_called_expr' }); expect(camundaIn).to.jsonEqual({ $type: 'camunda:In', target: 'var_called_expr', sourceExpression: '${expr_foo}' }); })); }); describe('camunda:out--', function() { it('should display', inject(function() { // given selectAndGet('CallActivity'); // when var resultField = entrySelect('custom-my.Caller-2', 'input'); // then expect(resultField).to.exist; })); it('should change, setting camunda:out (source)', inject(function() { // given var task = selectAndGet('CallActivity'); // when var resultField = entrySelect('custom-my.Caller-2', 'input'); // when TestHelper.triggerValue(resultField, 'result', 'change'); var camundaOut = findCamundaInOut(task, { type: 'camunda:out', source: 'var_local_source' }); expect(camundaOut).to.jsonEqual({ $type: 'camunda:Out', target: 'result', source: 'var_local_source' }); })); it('should change, setting camunda:out (sourceExpression)', inject(function() { // given var task = selectAndGet('CallActivity'); // when var resultField = entrySelect('custom-my.Caller-4', 'input'); // when TestHelper.triggerValue(resultField, 'local_foo', 'change'); var camundaOut = findCamundaInOut(task, { type: 'camunda:out', sourceExpression: '${expr_called}' }); expect(camundaOut).to.jsonEqual({ $type: 'camunda:Out', target: 'local_foo', sourceExpression: '${expr_called}' }); })); it('should change, creating camunda:out if non-existing', inject(function() { // given var task = selectAndGet('CallActivity_NoData'); // when var resultField = entrySelect('custom-my.Caller-4', 'input'); // when TestHelper.triggerValue(resultField, 'local_foo', 'change'); var camundaOut = findCamundaInOut(task, { type: 'camunda:out', sourceExpression: '${expr_called}' }); expect(camundaOut).to.jsonEqual({ $type: 'camunda:Out', target: 'local_foo', sourceExpression: '${expr_called}' }); })); }); describe('camunda:executionListener', function() { it('should hide', inject(function() { // given selectAndGet('ExecutionListenerTask'); // when var hiddenField = entrySelect('custom-my.execution.listener.task-0', '*'); // then expect(hiddenField).not.to.exist; })); }); }); describe('types', function() { var diagramXML = require('./CustomProps.dropdown.bpmn'), elementTemplates = require('./CustomProps.json'); beforeEach(bootstrap(diagramXML, elementTemplates)); function getDropdownOptions(selector) { var options = entrySelect.all(selector, 'select option'); return options.map(function(o) { return { value: o.value, selected: o.selected }; }); } function changeDropdown(selector, newValue) { var templateSelect = entrySelect(selector, 'select'), option = entrySelect(selector, 'option[value="' + newValue + '"]'); option.selected = 'selected'; TestHelper.triggerEvent(templateSelect, 'change'); } it('should display options', inject(function() { // given selectAndGet('PriorityTask'); // when var options = getDropdownOptions('custom-my.priority.Task-0'); // then expect(options).to.eql([ { value: '50', selected: true }, { value: '100', selected: false }, { value: '150', selected: false } ]); })); it('should change, updating binding', inject(function() { // given var task = selectAndGet('PriorityTask'); // when changeDropdown('custom-my.priority.Task-0', '100'); // then expect(task.get('camunda:priority')).to.eql('100'); })); }); describe('validation', function() { var diagramXML = require('./CustomProps.bpmn'), elementTemplates = require('./CustomProps.json'); beforeEach(bootstrap(diagramXML, elementTemplates)); function expectError(entry, message) { var errorElement = entrySelect(entry, '.bpp-error-message'); var error = errorElement && errorElement.textContent; expect(error).to.eql(message); } function expectValid(entry) { expectError(entry, null); } function changeInput(entry, newValue) { var input = entrySelect(entry, 'input'); TestHelper.triggerValue(input, newValue, 'change'); } it('should validate nonEmpty', inject(function() { // given selectAndGet('ValidateTask'); var entryId = 'custom-com.validated-inputs.Task-0'; // assume expectError(entryId, 'Must not be empty'); // when changeInput(entryId, 'FOO'); // then expectValid(entryId); })); it('should validate minLength', inject(function() { // given selectAndGet('ValidateTask'); var entryId = 'custom-com.validated-inputs.Task-1'; // assume expectError(entryId, 'Must have min length 5'); // when changeInput(entryId, 'FOOOOOOO'); // then expectValid(entryId); })); it('should validate maxLength', inject(function() { // given selectAndGet('ValidateTask'); var entryId = 'custom-com.validated-inputs.Task-2'; // assume expectValid(entryId); // when changeInput(entryId, 'FOOOOOOO'); // then expectError(entryId, 'Must have max length 5'); })); it('should validate pattern (String)', inject(function() { // given selectAndGet('ValidateTask'); var entryId = 'custom-com.validated-inputs.Task-3'; // assume expectError(entryId, 'Must match pattern A+B'); // when changeInput(entryId, 'AAAB'); // then expectValid(entryId); })); it('should validate pattern (String + Message)', inject(function() { // given selectAndGet('ValidateTask'); var entryId = 'custom-com.validated-inputs.Task-4'; // assume expectError(entryId, 'Must start with https://'); // when changeInput(entryId, 'https://'); // then expectValid(entryId); })); it('should validate pattern (Integer)', inject(function() { // given selectAndGet('ValidateTask'); var entryId = 'custom-com.validated-inputs.Task-5'; // assume expectError(entryId, 'Must be positive integer'); // when changeInput(entryId, '20'); // then expectValid(entryId); })); }); });