This commit is contained in:
theaubmov 2023-11-25 15:49:40 +01:00
parent a368d0cec7
commit 2778c764f3
5 changed files with 97 additions and 4 deletions

View File

@ -62,7 +62,8 @@ export default class DataStoreInterceptor extends CommandInterceptor {
this.executed(['shape.delete'], HIGH_PRIORITY, function (event) {
const { context } = event;
const { shape } = context;
if (is(shape, 'bpmn:DataStoreReference') && shape.type !== 'label') {
if (is(shape, 'bpmn:DataStoreReference') && shape.type !== 'label') {
const definitions = context.oldParent.businessObject.$parent;
const dataStore = shape.businessObject.dataStoreRef;
if (dataStore && !isDataStoreReferenced(definitions, dataStore.id)) {

View File

@ -1,10 +1,12 @@
import RulesModule from 'diagram-js/lib/features/rules';
import DataStorePropertiesProvider from './propertiesPanel/DataStorePropertiesProvider';
import DataStoreInterceptor from './DataStoreInterceptor';
export default {
__depends__: [
RulesModule
],
__init__: [ 'dataStorePropertiesProvider' ],
__init__: [ 'dataStoreInterceptor', 'dataStorePropertiesProvider' ],
dataStoreInterceptor: [ 'type', DataStoreInterceptor ],
dataStorePropertiesProvider: [ 'type', DataStorePropertiesProvider ]
};

View File

@ -0,0 +1,50 @@
import { bootstrapPropertiesPanel, expectSelected } from './helpers';
import { BpmnPropertiesPanelModule, BpmnPropertiesProviderModule } from 'bpmn-js-properties-panel';
import {
getBpmnJS,
inject
} from 'bpmn-js/test/helper';
import dataStoreInterceptor from '../../app/spiffworkflow/DataStoreReference';
describe('DataStore Interceptor', function () {
let xml = require('./bpmn/data_store.bpmn').default;
beforeEach(bootstrapPropertiesPanel(xml, {
debounceInput: false,
additionalModules: [
dataStoreInterceptor,
BpmnPropertiesPanelModule,
BpmnPropertiesProviderModule,
]
}));
it('should delete dataStore in case dataStoreRef is deleted - DataStoreReference element', inject(async function (modeling) {
const modeler = getBpmnJS();
// We Select a DataStoreReference element
const shapeElement = await expectSelected('DataStoreReference_0eqeh4p');
expect(shapeElement, "I can't find DataStoreReference element").to.exist;
let definitions = await modeler.getDefinitions();
let dataStoreExists = definitions.get('rootElements').some(element =>
element.$type === 'bpmn:DataStore' && element.id === 'countries'
);
expect(dataStoreExists, "DataStore 'countries' should be added at the root level").to.be.true;
// Remove dataStoreReference
await modeler.get('modeling').removeShape(shapeElement);
const nwshapeElement = await expectSelected('DataStoreReference_0eqeh4p');
expect(nwshapeElement, "I can't find DataStoreReference element").not.to.exist;
// Check that DataStore foods is removed from the root of the process
definitions = await modeler.getDefinitions();
dataStoreExists = definitions.get('rootElements').some(element =>
element.$type === 'bpmn:DataStore' && element.id === 'countries'
);
expect(dataStoreExists, "DataStore 'countries' should be removed from the root level").not.to.be.true;
}));
});

View File

@ -14,10 +14,11 @@ import {
getPropertiesPanel
} from './helpers';
import { getBpmnJS } from 'bpmn-js/test/helper';
import { getBpmnJS, inject } from 'bpmn-js/test/helper';
import spiffModdleExtension from '../../app/spiffworkflow/moddle/spiffworkflow.json';
import DataStoreReference from '../../app/spiffworkflow/DataStoreReference';
import DataStoreInterceptor from '../../app/spiffworkflow/DataStoreReference/DataStoreInterceptor';
const return_datastores = (event) => {
event.eventBus.fire('spiff.data_stores.returned', {
@ -28,7 +29,6 @@ const return_datastores = (event) => {
});
}
describe('Data Source Reference Test cases', function () {
const xml = require('./bpmn/data_store.bpmn').default;
let container;
@ -43,6 +43,7 @@ describe('Data Source Reference Test cases', function () {
debounceInput: false,
additionalModules: [
DataStoreReference,
DataStoreInterceptor,
BpmnPropertiesPanelModule,
BpmnPropertiesProviderModule,
],
@ -116,4 +117,42 @@ describe('Data Source Reference Test cases', function () {
});
it('should delete dataStore if dataStorRef is updated - DataStoreReference element', async function () {
const modeler = getBpmnJS();
modeler.get('eventBus').once('spiff.data_stores.requested', return_datastores);
// We Select a DataStoreReference element
const shapeElement = await expectSelected('DataStoreReference_0eqeh4p');
expect(shapeElement, "I can't find DataStoreReference element").to.exist;
// Interact with the DataStoreSelect component
const selectGroup = findGroupEntry('custom-datastore-properties', container)
expect(selectGroup).to.exist;
const entry = findEntry('selectDataStore', getPropertiesPanel());
expect(entry).to.exist;
// Verification if the dataStoreRef attribute is updated
let selector = findSelect(entry);
changeInput(selector, 'foods');
let nwbusinessObject = getBusinessObject(shapeElement);
expect(nwbusinessObject.get('dataStoreRef').id).to.equal('foods');
// Then choose new dataStore
changeInput(selector, 'countries');
nwbusinessObject = getBusinessObject(shapeElement);
expect(nwbusinessObject.get('dataStoreRef').id).to.equal('countries');
// Check if the DataStore is added at the root level with the updated dataStore
const definitions = modeler.getDefinitions();
const countriesDataStoreExists = definitions.get('rootElements').some(element =>
element.$type === 'bpmn:DataStore' && element.id === 'countries'
);
expect(countriesDataStoreExists, "DataStore 'countries' should be added at the root level").to.be.true;
const foodsDataStoreExists = definitions.get('rootElements').some(element =>
element.$type === 'bpmn:DataStore' && element.id === 'foods'
);
expect(foodsDataStoreExists, "DataStore 'countries' should be removed from the root level").not.to.be.true;
});
});

View File

@ -30,6 +30,7 @@
</bpmn:userTask>
<bpmn:dataStoreReference id="DataStoreReference_0eqeh4p" dataStoreRef="countries" />
</bpmn:process>
<bpmn:dataStore id="countries" name="DataStore_countries" />
<bpmndi:BPMNDiagram id="BPMNDiagram_1">
<bpmndi:BPMNPlane id="BPMNPlane_1" bpmnElement="Process_16xfaqc">
<bpmndi:BPMNShape id="_BPMNShape_StartEvent_2" bpmnElement="StartEvent_1">