Skip to content

Commit

Permalink
feat: add refactorings tracking
Browse files Browse the repository at this point in the history
  • Loading branch information
philippfromme committed Apr 26, 2024
1 parent 1d5d02d commit 2f9f32b
Show file tree
Hide file tree
Showing 4 changed files with 153 additions and 0 deletions.
2 changes: 2 additions & 0 deletions lib/features/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import feelPopupTracking from './feel-popup';
import modelingTracking from './modeling';
import paletteTracking from './palette';
import popupMenuTracking from './popup-menu';
import refactoringsTracking from './refactorings';
import selectionTracking from './selection';

export default {
Expand All @@ -14,6 +15,7 @@ export default {
modelingTracking,
paletteTracking,
popupMenuTracking,
refactoringsTracking,
selectionTracking
]
};
24 changes: 24 additions & 0 deletions lib/features/refactorings/RefactoringsTracking.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,24 @@
export default class ContextPadTracking {
constructor(eventBus, bpmnJSTracking) {
this._bpmnJSTracking = bpmnJSTracking;
this._eventBus = eventBus;

this._eventBus.on('refactorings.execute', this.trackRefactoring.bind(this));
}

trackRefactoring(event) {
const { refactoring } = event;

this._bpmnJSTracking.track({
name: 'refactorings.execute',
data: {
refactoring
}
});
}
}

ContextPadTracking.$inject = [
'eventBus',
'bpmnJSTracking'
];
8 changes: 8 additions & 0 deletions lib/features/refactorings/index.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,8 @@
import RefactoringsTracking from './RefactoringsTracking';

export default {
__init__: [
'refactoringsTracking'
],
refactoringsTracking: [ 'type', RefactoringsTracking ]
};
119 changes: 119 additions & 0 deletions test/spec/features/RefactoringsTracking.spec.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,119 @@
import {
bootstrapModeler,
inject
} from 'test/TestHelper';

import RefactoringsModule from '@bpmn-io/refactorings';

import { BpmnJSTracking } from 'lib';
import RefactoringsTracking from 'lib/features/refactorings';

class FoobarProvider {
constructor(eventBus, refactorings) {
refactorings.registerProvider(this);

this._eventBus = eventBus;
}

/**
* @param {Element[]} elements
*
* @returns {Refactoring[]}
*/
getRefactorings(elements) {
return [
{
id: 'foo',
label: 'Foo',
execute: () => {
this._eventBus.fire('refactorings.execute', {
refactoring: {
type: 'foo'
}
});
}
}
];
}
}

FoobarProvider.$inject = [ 'eventBus', 'refactorings' ];

describe('RefactoringsTracking', function() {

const diagram = require('test/spec/simple.bpmn').default;

beforeEach(bootstrapModeler(diagram, {
additionalModules: [
BpmnJSTracking,
RefactoringsTracking,
RefactoringsModule,
{
__init__: [
'foobarProvider'
],
foobarProvider: [ 'type', FoobarProvider ],
openAIElementTemplatesProvider: [ 'value', null ]
}
]
}));


describe('should subscribe', function() {

it('refactorings.execute', inject(async function(elementRegistry, bpmnJSTracking, refactorings) {

// given
const spy = sinon.spy(bpmnJSTracking, 'track');

const element = elementRegistry.get('StartEvent_1');

const [ refactoring ] = await refactorings.getRefactorings([ element ]);

// when
refactoring.execute();

// expect
expect(spy).to.have.been.calledOnce;
}));

});


describe('should track', function() {

beforeEach(inject(function(bpmnJSTracking) {
bpmnJSTracking.enable();
}));

it('popup menu open', inject(async function(bpmnJSTracking, elementRegistry, refactorings) {

// given
const element = elementRegistry.get('StartEvent_1');

const spy = sinon.spy(function(event) {
expect(event).to.eventEqual({
name: 'refactorings.execute',
data: {
refactoring: {
type: 'foo'
}
},
type: 'tracking.event'
});
});

bpmnJSTracking.on('tracking.event', spy);

const [ refactoring ] = await refactorings.getRefactorings([ element ]);

// when
refactoring.execute();

// then
expect(spy).to.have.been.calledOnce;
}));

});

});

0 comments on commit 2f9f32b

Please sign in to comment.