1
1
import React from 'react' ;
2
2
import { renderHook , waitFor } from '@testing-library/react' ;
3
3
import { useBpmnEditor } from './useBpmnEditor' ;
4
- import { BpmnContextProvider , useBpmnContext } from '../contexts/BpmnContext' ;
4
+ import { BpmnContextProvider } from '../contexts/BpmnContext' ;
5
5
import { BpmnApiContextProvider } from '../contexts/BpmnApiContext' ;
6
6
import { useBpmnModeler } from './useBpmnModeler' ;
7
7
import type { BpmnDetails } from '../types/BpmnDetails' ;
8
8
import type { LayoutSets } from 'app-shared/types/api/LayoutSetsResponse' ;
9
9
import { getMockBpmnElementForTask , mockBpmnDetails } from '../../test/mocks/bpmnDetailsMock' ;
10
- import { mockModelerRef } from '../../test/mocks/bpmnModelerMock' ;
11
10
import { getBpmnEditorDetailsFromBusinessObject } from '../utils/bpmnObjectBuilders' ;
12
11
import { StudioRecommendedNextActionContextProvider } from '@studio/components' ;
13
12
@@ -64,7 +63,7 @@ jest.mock('../contexts/BpmnContext', () => ({
64
63
useBpmnContext : jest . fn ( ( ) => ( {
65
64
getUpdatedXml : jest . fn ( ) ,
66
65
modelerRef : { current : null } ,
67
- setBpmnDetails : jest . fn ( ) ,
66
+ setBpmnDetails : setBpmnDetailsMock ,
68
67
} ) ) ,
69
68
} ) ) ;
70
69
@@ -76,16 +75,6 @@ const setBpmnDetailsMock = jest.fn();
76
75
const onProcessTaskAddMock = jest . fn ( ) ;
77
76
const onProcessTaskRemoveMock = jest . fn ( ) ;
78
77
79
- const overrideUseBpmnContext = ( ) => {
80
- ( useBpmnContext as jest . Mock ) . mockReturnValue ( {
81
- getUpdatedXml : jest . fn ( ) ,
82
- modelerRef : {
83
- ...mockModelerRef ,
84
- } ,
85
- setBpmnDetails : setBpmnDetailsMock ,
86
- } ) ;
87
- } ;
88
-
89
78
const overrideUseBpmnModeler = ( currentEventName : string , currentEvent : any ) => {
90
79
( useBpmnModeler as jest . Mock ) . mockReturnValue ( {
91
80
getModeler : ( ) => new BpmnModelerMockImpl ( currentEventName , currentEvent ) ,
@@ -124,29 +113,29 @@ describe('useBpmnEditor', () => {
124
113
it ( 'should call saveBpmn when "commandStack.changed" event is triggered on modelerInstance' , async ( ) => {
125
114
const currentEventName = 'commandStack.changed' ;
126
115
const currentEvent = { element : getMockBpmnElementForTask ( 'data' ) } ;
127
- renderUseBpmnEditor ( false , currentEventName , currentEvent ) ;
116
+ setup ( currentEventName , currentEvent ) ;
128
117
129
118
await waitFor ( ( ) => expect ( saveBpmnMock ) . toHaveBeenCalledTimes ( 1 ) ) ;
130
119
} ) ;
131
120
132
121
it ( 'should handle "shape.added" event' , async ( ) => {
133
122
const currentEvent = { element : getMockBpmnElementForTask ( 'data' ) } ;
134
- renderUseBpmnEditor ( false , 'shape.added' , currentEvent ) ;
123
+ setup ( 'shape.added' , currentEvent ) ;
135
124
136
125
await waitFor ( ( ) => expect ( onProcessTaskAddMock ) . toHaveBeenCalledTimes ( 1 ) ) ;
137
126
} ) ;
138
127
139
128
it ( 'should handle "shape.remove" event' , async ( ) => {
140
129
const currentEvent = { element : getMockBpmnElementForTask ( 'data' ) } ;
141
- renderUseBpmnEditor ( false , 'shape.remove' , currentEvent ) ;
130
+ setup ( 'shape.remove' , currentEvent ) ;
142
131
143
132
await waitFor ( ( ) => expect ( onProcessTaskRemoveMock ) . toHaveBeenCalledTimes ( 1 ) ) ;
144
133
} ) ;
145
134
146
135
it ( 'should call setBpmnDetails with selected object when "selection.changed" event is triggered with new selection' , async ( ) => {
147
136
const currentEventName = 'selection.changed' ;
148
137
const currentEvent = { newSelection : [ getMockBpmnElementForTask ( 'data' ) ] , oldSelection : [ ] } ;
149
- renderUseBpmnEditor ( true , currentEventName , currentEvent ) ;
138
+ setup ( currentEventName , currentEvent ) ;
150
139
151
140
await waitFor ( ( ) => expect ( setBpmnDetailsMock ) . toHaveBeenCalledTimes ( 1 ) ) ;
152
141
expect ( setBpmnDetailsMock ) . toHaveBeenCalledWith ( expect . objectContaining ( mockBpmnDetails ) ) ;
@@ -155,20 +144,24 @@ describe('useBpmnEditor', () => {
155
144
it ( 'should call setBpmnDetails with null when "selection.changed" event is triggered with no new selected object' , async ( ) => {
156
145
const currentEventName = 'selection.changed' ;
157
146
const currentEvent = { oldSelection : [ getMockBpmnElementForTask ( 'data' ) ] , newSelection : [ ] } ;
158
- renderUseBpmnEditor ( true , currentEventName , currentEvent ) ;
147
+ setup ( currentEventName , currentEvent ) ;
159
148
160
149
await waitFor ( ( ) => expect ( setBpmnDetailsMock ) . toHaveBeenCalledTimes ( 1 ) ) ;
161
150
expect ( setBpmnDetailsMock ) . toHaveBeenCalledWith ( null ) ;
162
151
} ) ;
163
152
} ) ;
164
153
154
+ function setup ( ...params : Parameters < typeof renderUseBpmnEditor > ) : void {
155
+ const div = document . createElement ( 'div' ) ;
156
+ const { result } = renderUseBpmnEditor ( ...params ) ;
157
+ result . current ( div ) ;
158
+ }
159
+
165
160
const renderUseBpmnEditor = (
166
- overrideBpmnContext : boolean ,
167
161
currentEventName : string ,
168
162
currentEvent : any ,
169
163
bpmnDetails = mockBpmnDetails ,
170
164
) => {
171
- overrideBpmnContext && overrideUseBpmnContext ( ) ;
172
165
overrideGetBpmnEditorDetailsFromBusinessObject ( bpmnDetails ) ;
173
166
overrideUseBpmnModeler ( currentEventName , currentEvent ) ;
174
167
return renderHook ( ( ) => useBpmnEditor ( ) , { wrapper } ) ;
0 commit comments