1
- import { createSandbox , triggerEvent , TestPlugin } from 'helper' ;
1
+ import { createSandbox , triggerEvent , TestPlugin , clickMouse , moveMouse , releaseMouse , waitForDragDelay } from 'helper' ;
2
+
2
3
import Draggable , { defaultOptions } from '../Draggable' ;
3
4
import { DragStartEvent , DragMoveEvent , DragStopEvent } from '../DragEvent' ;
4
5
import { DraggableInitializedEvent , DraggableDestroyEvent } from '../DraggableEvent' ;
5
6
import { Accessibility , Mirror , Scrollable , Announcement } from '../Plugins' ;
6
7
import { MouseSensor , TouchSensor } from '../Sensors' ;
7
8
8
9
const sampleMarkup = `
9
- <ul>
10
+ <ul class="Container">
11
+ <li>First item</li>
12
+ <li>Second item</li>
13
+ </ul>
14
+ <ul class="DynamicContainer">
10
15
<li>First item</li>
11
16
<li>Second item</li>
12
17
</ul>
@@ -20,7 +25,7 @@ describe('Draggable', () => {
20
25
21
26
beforeEach ( ( ) => {
22
27
sandbox = createSandbox ( sampleMarkup ) ;
23
- containers = sandbox . querySelectorAll ( 'ul ' ) ;
28
+ containers = sandbox . querySelectorAll ( '.Container ' ) ;
24
29
} ) ;
25
30
26
31
afterEach ( ( ) => {
@@ -296,6 +301,78 @@ describe('Draggable', () => {
296
301
} ) ;
297
302
} ) ;
298
303
304
+ describe ( '#addContainer' , ( ) => {
305
+ it ( 'adds single container dynamically' , ( ) => {
306
+ const dragOverContainerHandler = jest . fn ( ) ;
307
+ const newInstance = new Draggable ( containers , {
308
+ draggable : 'li' ,
309
+ } ) ;
310
+
311
+ newInstance . on ( 'drag:over:container' , dragOverContainerHandler ) ;
312
+
313
+ const draggableElement = document . querySelector ( 'li' ) ;
314
+ const dynamicContainer = document . querySelector ( '.DynamicContainer' ) ;
315
+
316
+ clickMouse ( draggableElement ) ;
317
+ waitForDragDelay ( 100 ) ;
318
+ moveMouse ( dynamicContainer ) ;
319
+
320
+ expect ( dragOverContainerHandler ) . not . toHaveBeenCalled ( ) ;
321
+
322
+ releaseMouse ( newInstance . source ) ;
323
+
324
+ newInstance . addContainer ( dynamicContainer ) ;
325
+
326
+ expect ( newInstance . containers ) . toEqual ( [ ...containers , dynamicContainer ] ) ;
327
+
328
+ clickMouse ( draggableElement ) ;
329
+ waitForDragDelay ( 100 ) ;
330
+ moveMouse ( dynamicContainer ) ;
331
+
332
+ expect ( dragOverContainerHandler ) . toHaveBeenCalled ( ) ;
333
+
334
+ releaseMouse ( newInstance . source ) ;
335
+ } ) ;
336
+ } ) ;
337
+
338
+ describe ( '#removeContainer' , ( ) => {
339
+ it ( 'removes single container dynamically' , ( ) => {
340
+ let dragOverContainerHandler = jest . fn ( ) ;
341
+ const allContainers = document . querySelectorAll ( '.Container, .DynamicContainer' ) ;
342
+ const newInstance = new Draggable ( allContainers , {
343
+ draggable : 'li' ,
344
+ } ) ;
345
+
346
+ newInstance . on ( 'drag:over:container' , dragOverContainerHandler ) ;
347
+
348
+ const draggableElement = document . querySelector ( 'li' ) ;
349
+ const dynamicContainer = document . querySelector ( '.DynamicContainer' ) ;
350
+
351
+ clickMouse ( draggableElement ) ;
352
+ waitForDragDelay ( 100 ) ;
353
+ moveMouse ( dynamicContainer ) ;
354
+
355
+ expect ( dragOverContainerHandler ) . toHaveBeenCalled ( ) ;
356
+
357
+ releaseMouse ( newInstance . source ) ;
358
+
359
+ newInstance . removeContainer ( dynamicContainer ) ;
360
+
361
+ expect ( newInstance . containers ) . toEqual ( [ ...containers ] ) ;
362
+
363
+ dragOverContainerHandler = jest . fn ( ) ;
364
+ newInstance . on ( 'drag:over:container' , dragOverContainerHandler ) ;
365
+
366
+ clickMouse ( draggableElement ) ;
367
+ waitForDragDelay ( 100 ) ;
368
+ moveMouse ( dynamicContainer ) ;
369
+
370
+ expect ( dragOverContainerHandler ) . not . toHaveBeenCalled ( ) ;
371
+
372
+ releaseMouse ( newInstance . source ) ;
373
+ } ) ;
374
+ } ) ;
375
+
299
376
it ( 'triggers `drag:start` drag event on mousedown' , ( ) => {
300
377
const newInstance = new Draggable ( containers , {
301
378
draggable : 'li' ,
0 commit comments