unit tests can be added and deleted from script tasks w/ burnettk

This commit is contained in:
jasquat 2022-09-12 17:14:26 -04:00
parent 58e3e7c158
commit 9926fb900f
3 changed files with 148 additions and 111 deletions

View File

@ -21,7 +21,9 @@ export default function ExtensionsPropertiesProvider(
this.getGroups = function (element) { this.getGroups = function (element) {
return function (groups) { return function (groups) {
if (is(element, 'bpmn:ScriptTask')) { if (is(element, 'bpmn:ScriptTask')) {
groups.push(createScriptGroup(element, translate, moddle)); groups.push(
createScriptGroup(element, translate, moddle, commandStack)
);
} else if ( } else if (
isAny(element, ['bpmn:Task', 'bpmn:CallActivity', 'bpmn:SubProcess']) isAny(element, ['bpmn:Task', 'bpmn:CallActivity', 'bpmn:SubProcess'])
) { ) {
@ -81,7 +83,8 @@ function createScriptGroup(element, translate, moddle, commandStack) {
SCRIPT_TYPE.bpmn, SCRIPT_TYPE.bpmn,
'Script', 'Script',
'Code to execute.', 'Code to execute.',
translate translate,
commandStack
), ),
}; };
} }

View File

@ -1,22 +1,29 @@
import { useService } from 'bpmn-js-properties-panel'; import { useService } from 'bpmn-js-properties-panel';
import { TextAreaEntry } from '@bpmn-io/properties-panel'; import { TextFieldEntry, TextAreaEntry } from '@bpmn-io/properties-panel';
// import { findCorrelationKeys, getRoot } from '../MessageHelpers'; import { removeFirstInstanceOfItemFromArrayInPlace } from '../../helpers';
// import { removeFirstInstanceOfItemFromArrayInPlace } from '../../helpers';
const getScriptUnitTestModdleElements = (shapeElement) => { const getScriptUnitTestsModdleElement = (shapeElement) => {
const bizObj = shapeElement.businessObject; const bizObj = shapeElement.businessObject;
if (!bizObj.extensionElements) { if (!bizObj.extensionElements) {
return null; return null;
} }
if (!bizObj.extensionElements.values) { if (!bizObj.extensionElements.values) {
return []; return null;
} }
const unitTestsModdleElement = bizObj.extensionElements return bizObj.extensionElements
.get('values') .get('values')
.filter(function getInstanceOfType(e) { .filter(function getInstanceOfType(e) {
return e.$instanceOf('spiffworkflow:unitTests'); return e.$instanceOf('spiffworkflow:unitTests');
})[0]; })[0];
return unitTestsModdleElement.unitTests; };
const getScriptUnitTestModdleElements = (shapeElement) => {
const scriptUnitTestsModdleElement =
getScriptUnitTestsModdleElement(shapeElement);
if (scriptUnitTestsModdleElement) {
return scriptUnitTestsModdleElement.unitTests;
}
return [];
}; };
/** /**
@ -25,10 +32,8 @@ const getScriptUnitTestModdleElements = (shapeElement) => {
* @constructor * @constructor
*/ */
export function ScriptUnitTestArray(props) { export function ScriptUnitTestArray(props) {
const { element, moddle, commandStack } = props; const { element, moddle, commandStack, translate } = props;
const scriptUnitTestModdleElements = getScriptUnitTestModdleElements(element); const scriptUnitTestModdleElements = getScriptUnitTestModdleElements(element);
console.log('scriptUnitTestModdleElements', scriptUnitTestModdleElements);
const items = scriptUnitTestModdleElements.map( const items = scriptUnitTestModdleElements.map(
(scriptUnitTestModdleElement, index) => { (scriptUnitTestModdleElement, index) => {
const id = `scriptUnitTest-${index}`; const id = `scriptUnitTest-${index}`;
@ -40,115 +45,130 @@ export function ScriptUnitTestArray(props) {
element, element,
scriptUnitTestModdleElement, scriptUnitTestModdleElement,
commandStack, commandStack,
translate,
}),
remove: removeFactory({
element,
scriptUnitTestModdleElement,
commandStack,
moddle,
}), }),
// remove: removeFactory({
// element,
// correlationKeyElement,
// commandStack,
// moddle,
// }),
autoFocusEntry: id, autoFocusEntry: id,
}; };
} }
); );
// function add(event) { function add(event) {
// event.stopPropagation(); event.stopPropagation();
// if (element.type === 'bpmn:Collaboration') { const scriptTaskModdleElement = element.businessObject;
// const newCorrelationKeyElement = moddle.create('bpmn:CorrelationKey'); if (!scriptTaskModdleElement.extensionElements) {
// newCorrelationKeyElement.name = scriptTaskModdleElement.extensionElements =
// moddle.ids.nextPrefixed('CorrelationKey_'); scriptTaskModdleElement.$model.create('bpmn:ExtensionElements');
// const currentCorrelationKeyElements = }
// element.businessObject.get('correlationKeys');
// currentCorrelationKeyElements.push(newCorrelationKeyElement);
// commandStack.execute('element.updateProperties', {
// element,
// properties: {},
// });
// }
// }
console.log('items', items); let scriptUnitTestsModdleElement = getScriptUnitTestsModdleElement(element);
// return { items, add };
return { items }; if (!scriptUnitTestsModdleElement) {
scriptUnitTestsModdleElement = scriptTaskModdleElement.$model.create(
'spiffworkflow:unitTests'
);
scriptTaskModdleElement.extensionElements
.get('values')
.push(scriptUnitTestsModdleElement);
}
const scriptUnitTestModdleElement = scriptTaskModdleElement.$model.create(
'spiffworkflow:unitTest'
);
const scriptUnitTestInputModdleElement =
scriptTaskModdleElement.$model.create('spiffworkflow:inputJson');
const scriptUnitTestOutputModdleElement =
scriptTaskModdleElement.$model.create('spiffworkflow:expectedOutputJson');
scriptUnitTestModdleElement.id = moddle.ids.nextPrefixed('ScriptUnitTest_');
scriptUnitTestInputModdleElement.value = '{}';
scriptUnitTestOutputModdleElement.value = '{}';
scriptUnitTestModdleElement.inputJson = scriptUnitTestInputModdleElement;
scriptUnitTestModdleElement.expectedOutputJson =
scriptUnitTestOutputModdleElement;
scriptUnitTestsModdleElement.unitTests.push(scriptUnitTestModdleElement);
commandStack.execute('element.updateProperties', {
element,
properties: {},
});
}
return { items, add };
} }
// function removeFactory(props) { function removeFactory(props) {
// const { element, correlationKeyElement, moddle, commandStack } = props; const { element, scriptUnitTestModdleElement, moddle, commandStack } = props;
//
// return function (event) { return function (event) {
// event.stopPropagation(); event.stopPropagation();
// const currentCorrelationKeyElements = const scriptUnitTestsModdleElement =
// element.businessObject.get('correlationKeys'); getScriptUnitTestsModdleElement(element);
// removeFirstInstanceOfItemFromArrayInPlace( removeFirstInstanceOfItemFromArrayInPlace(
// currentCorrelationKeyElements, scriptUnitTestsModdleElement.unitTests,
// correlationKeyElement scriptUnitTestModdleElement
// ); );
// commandStack.execute('element.updateProperties', { commandStack.execute('element.updateProperties', {
// element, element,
// properties: { properties: {},
// correlationKey: currentCorrelationKeyElements, });
// }, };
// }); }
// };
// } // <spiffworkflow:unitTests>
// // <spiffworkflow:unitTest id="test1">
// <bpmn:correlationKey name="lover"> <--- The correlationGroup // <spiffworkflow:inputJson>{}</spiffworkflow:inputJson>
// <bpmn:correlationPropertyRef>lover_name</bpmn:correlationPropertyRef> // <spiffworkflow:expectedOutputJson>{}</spiffworkflow:expectedOutputJson>
// <bpmn:correlationPropertyRef>lover_instrument</bpmn:correlationPropertyRef> // </spiffworkflow:unitTest>
// </bpmn:correlationKey> // </spiffworkflow:unitTests>
// <bpmn:correlationKey name="singer" />
function scriptUnitTestGroup(props) { function scriptUnitTestGroup(props) {
const { idPrefix, element, scriptUnitTestModdleElement, commandStack } = const {
props; idPrefix,
// const entries = [ element,
// { scriptUnitTestModdleElement,
// id: `${idPrefix}-key`, commandStack,
// component: CorrelationKeyTextField, translate,
// scriptUnitTestModdleElement, } = props;
// commandStack,
// },
// ];
// (scriptUnitTestModdleElement.correlationPropertyRef || []).forEach(
// (correlationProperty, index) => {
// entries.push({
// id: `${idPrefix}-${index}-text`,
// component: CorrelationPropertyText,
// correlationProperty,
// });
// }
// );
// return entries;
return [ return [
{
id: `${idPrefix}-id`,
label: translate('ID:'),
element,
component: ScriptUnitTestIdTextField,
scriptUnitTestModdleElement,
commandStack,
},
{ {
id: `${idPrefix}-input`, id: `${idPrefix}-input`,
label: translate('Input Json:'),
element, element,
component: ScriptUnitTestJsonTextArea, component: ScriptUnitTestJsonTextArea,
scriptUnitTestJsonModdleElement: scriptUnitTestModdleElement.inputJson, scriptUnitTestJsonModdleElement: scriptUnitTestModdleElement.inputJson,
commandStack, commandStack,
}, },
{
id: `${idPrefix}-expected-output`,
label: translate('Expected Output Json:'),
element,
component: ScriptUnitTestJsonTextArea,
scriptUnitTestJsonModdleElement:
scriptUnitTestModdleElement.expectedOutputJson,
commandStack,
},
]; ];
} }
function ScriptUnitTestJsonTextArea(props) { function ScriptUnitTestJsonTextArea(props) {
const { id, element, scriptUnitTestJsonModdleElement, commandStack } = props; const { id, element, scriptUnitTestJsonModdleElement, label } = props;
const debounce = useService('debounceInput'); const debounce = useService('debounceInput');
const setValue = (value) => { const setValue = (value) => {
commandStack.execute('element.updateModdleProperties', { scriptUnitTestJsonModdleElement.value = value;
element,
moddleElement: scriptUnitTestJsonModdleElement,
properties: {
name: value,
},
});
}; };
const getValue = () => { const getValue = () => {
console.log(
'scriptUnitTestJsonModdleElement',
scriptUnitTestJsonModdleElement
);
return scriptUnitTestJsonModdleElement.value; return scriptUnitTestJsonModdleElement.value;
}; };
@ -158,23 +178,35 @@ function ScriptUnitTestJsonTextArea(props) {
getValue, getValue,
setValue, setValue,
debounce, debounce,
label,
}); });
} }
// function CorrelationPropertyText(props) { function ScriptUnitTestIdTextField(props) {
// const { id, parameter, correlationProperty } = props; const { id, element, scriptUnitTestModdleElement, label } = props;
// const debounce = useService('debounceInput');
// const debounce = useService('debounceInput');
// const getValue = () => { const commandStack = useService('commandStack');
// return correlationProperty.id;
// }; const setValue = (value) => {
// scriptUnitTestModdleElement.id = value;
// return SimpleEntry({ commandStack.execute('element.updateModdleProperties', {
// element: parameter, element,
// id: `${id}-textField`, moddleElement: scriptUnitTestModdleElement,
// label: correlationProperty.id, properties: {},
// getValue, });
// disabled: true, };
// debounce,
// }); const getValue = () => {
// } return scriptUnitTestModdleElement.id;
};
return TextFieldEntry({
element,
id: `${id}-textArea`,
getValue,
setValue,
debounce,
label,
});
}

View File

@ -123,7 +123,8 @@ export default function getEntries(
scriptType, scriptType,
label, label,
description, description,
translate translate,
commandStack
) { ) {
return [ return [
{ {
@ -152,6 +153,7 @@ export default function getEntries(
element, element,
moddle, moddle,
translate, translate,
commandStack,
}), }),
}, },
]; ];