@@ -10,6 +10,7 @@ import pluginConfig from './pluginConfig';
10
10
// should be re-thought and cleaned up to avoid this pattern.
11
11
// eslint-disable-next-line import/no-self-import
12
12
import * as module from './hooks' ;
13
+ import { updateCourseDetailsOverview } from '../../../schedule-and-details/data/slice' ;
13
14
14
15
jest . mock ( 'react' , ( ) => ( {
15
16
...jest . requireActual ( 'react' ) ,
@@ -167,6 +168,97 @@ describe('TinyMceEditor hooks', () => {
167
168
expect ( openImgModal ) . not . toHaveBeenCalled ( ) ;
168
169
expect ( editor . on ) . toHaveBeenCalled ( ) ;
169
170
} ) ;
171
+ test ( 'dispatches updateCourseDetailsOverview if newContent exists on mceFocus' , ( ) => {
172
+ const dispatch = jest . fn ( ) ;
173
+ const editorType = 'text' ;
174
+
175
+ const editor = {
176
+ ui : {
177
+ registry : {
178
+ addButton : jest . fn ( ) ,
179
+ addToggleButton : jest . fn ( ) ,
180
+ addIcon : jest . fn ( ) ,
181
+ } ,
182
+ } ,
183
+ on : jest . fn ( ( event , callback ) => {
184
+ if ( event === 'ExecCommand' ) {
185
+ callback ( { command : 'mceFocus' } ) ;
186
+ }
187
+ } ) ,
188
+ getContent : jest . fn ( ( ) => '<p>Some content</p>' ) ,
189
+ formatter : { remove : jest . fn ( ) , formatChanged : jest . fn ( ) } ,
190
+ undoManager : { add : jest . fn ( ) } ,
191
+ focus : jest . fn ( ) ,
192
+ } ;
193
+
194
+ const replaceStaticWithAssetSpy = jest
195
+ . spyOn ( module , 'replaceStaticWithAsset' )
196
+ . mockReturnValue ( '<p>Updated content</p>' ) ;
197
+
198
+ const setup = module . setupCustomBehavior ( {
199
+ editorType,
200
+ updateContent : jest . fn ( ) ,
201
+ openImgModal : jest . fn ( ) ,
202
+ openSourceCodeModal : jest . fn ( ) ,
203
+ setImage : jest . fn ( ) ,
204
+ lmsEndpointUrl : 'http://example.com' ,
205
+ learningContextId : 'course-v1:test' ,
206
+ images : { current : [ ] } ,
207
+ dispatch,
208
+ } ) ;
209
+
210
+ setup ( editor ) ;
211
+
212
+ expect ( dispatch ) . toHaveBeenCalledWith ( updateCourseDetailsOverview ( '<p>Updated content</p>' ) ) ;
213
+
214
+ replaceStaticWithAssetSpy . mockRestore ( ) ;
215
+ } ) ;
216
+
217
+ test ( 'does not dispatch updateCourseDetailsOverview if newContent is falsy on mceFocus' , ( ) => {
218
+ const dispatch = jest . fn ( ) ;
219
+ const editorType = 'text' ;
220
+
221
+ const editor = {
222
+ ui : {
223
+ registry : {
224
+ addButton : jest . fn ( ) ,
225
+ addToggleButton : jest . fn ( ) ,
226
+ addIcon : jest . fn ( ) ,
227
+ } ,
228
+ } ,
229
+ on : jest . fn ( ( event , callback ) => {
230
+ if ( event === 'ExecCommand' ) {
231
+ callback ( { command : 'mceFocus' } ) ;
232
+ }
233
+ } ) ,
234
+ getContent : jest . fn ( ( ) => '<p>Unchanged content</p>' ) ,
235
+ formatter : { remove : jest . fn ( ) , formatChanged : jest . fn ( ) } ,
236
+ undoManager : { add : jest . fn ( ) } ,
237
+ focus : jest . fn ( ) ,
238
+ } ;
239
+
240
+ const replaceStaticWithAssetSpy = jest
241
+ . spyOn ( module , 'replaceStaticWithAsset' )
242
+ . mockReturnValue ( false ) ;
243
+
244
+ const setup = module . setupCustomBehavior ( {
245
+ editorType,
246
+ updateContent : jest . fn ( ) ,
247
+ openImgModal : jest . fn ( ) ,
248
+ openSourceCodeModal : jest . fn ( ) ,
249
+ setImage : jest . fn ( ) ,
250
+ lmsEndpointUrl : 'http://example.com' ,
251
+ learningContextId : 'course-v1:test' ,
252
+ images : { current : [ ] } ,
253
+ dispatch,
254
+ } ) ;
255
+
256
+ setup ( editor ) ;
257
+
258
+ expect ( dispatch ) . not . toHaveBeenCalled ( ) ;
259
+
260
+ replaceStaticWithAssetSpy . mockRestore ( ) ;
261
+ } ) ;
170
262
} ) ;
171
263
172
264
describe ( 'parseContentForLabels' , ( ) => {
0 commit comments