1
+ import { Component } from '@angular/core' ;
1
2
import {
2
3
inject ,
3
4
ComponentFixture ,
6
7
} from '@angular/core/testing' ;
7
8
import * as moment from 'moment' ;
8
9
import { expect } from 'chai' ;
9
- import { DraggableHelper } from 'angular-draggable-droppable' ;
10
+ import * as sinon from 'sinon' ;
11
+ import { DraggableHelper , DragAndDropModule } from 'angular-draggable-droppable' ;
10
12
import {
11
13
CalendarEventTitleFormatter ,
12
14
CalendarEvent ,
@@ -23,8 +25,40 @@ import { triggerDomEvent } from './util';
23
25
24
26
describe ( 'CalendarDayViewComponent component' , ( ) => {
25
27
28
+ @Component ( {
29
+ template : '<div class="external-event" mwlDraggable [dropData]="{event: event}">{{ event.title }}</div>' ,
30
+ styles : [ `
31
+ .external-event {
32
+ position: fixed;
33
+ top: 0;
34
+ left: 0;
35
+ width: 10px;
36
+ height: 10px;
37
+ }
38
+ ` ]
39
+ } )
40
+ class ExternalEventComponent {
41
+ event : CalendarEvent = {
42
+ title : 'foo' ,
43
+ start : new Date ( ) ,
44
+ draggable : true ,
45
+ color : {
46
+ primary : 'blue' ,
47
+ secondary : 'lightblue'
48
+ }
49
+ } ;
50
+ }
51
+
26
52
beforeEach ( ( ) => {
27
- TestBed . configureTestingModule ( { imports : [ CalendarModule ] } ) ;
53
+ TestBed . configureTestingModule ( {
54
+ imports : [
55
+ CalendarModule ,
56
+ DragAndDropModule
57
+ ] ,
58
+ declarations : [
59
+ ExternalEventComponent
60
+ ]
61
+ } ) ;
28
62
TestBed . configureCompiler ( {
29
63
providers : [
30
64
DraggableHelper ,
@@ -480,4 +514,40 @@ describe('CalendarDayViewComponent component', () => {
480
514
fixture . destroy ( ) ;
481
515
} ) ;
482
516
517
+ it ( 'should allow external events to be dropped on the day view' , ( ) => {
518
+ const fixture : ComponentFixture < CalendarDayViewComponent > = TestBed . createComponent ( CalendarDayViewComponent ) ;
519
+ fixture . componentInstance . viewDate = new Date ( '2016-06-27' ) ;
520
+ fixture . componentInstance . events = [ ] ;
521
+ fixture . componentInstance . ngOnChanges ( { viewDate : { } , events : { } } ) ;
522
+ fixture . detectChanges ( ) ;
523
+ document . body . appendChild ( fixture . nativeElement ) ;
524
+
525
+ const externalEventFixture : ComponentFixture < ExternalEventComponent > = TestBed . createComponent ( ExternalEventComponent ) ;
526
+ externalEventFixture . detectChanges ( ) ;
527
+ document . body . appendChild ( externalEventFixture . nativeElement ) ;
528
+
529
+ const event : HTMLElement = externalEventFixture . nativeElement . querySelector ( '.external-event' ) ;
530
+ const eventPosition : ClientRect = event . getBoundingClientRect ( ) ;
531
+
532
+ const segments : any [ ] = Array . from ( fixture . nativeElement . querySelectorAll ( '.cal-hour-segment' ) ) ;
533
+ const segment : HTMLElement = segments [ 2 ] . parentNode ;
534
+ const segmentPosition : ClientRect = segment . getBoundingClientRect ( ) ;
535
+
536
+ const eventDropped : sinon . SinonSpy = sinon . spy ( ) ;
537
+ fixture . componentInstance . eventTimesChanged . subscribe ( eventDropped ) ;
538
+ triggerDomEvent ( 'mousedown' , event , { clientY : eventPosition . top , clientX : eventPosition . left } ) ;
539
+ fixture . detectChanges ( ) ;
540
+ triggerDomEvent ( 'mousemove' , document . body , { clientY : segmentPosition . top , clientX : segmentPosition . left } ) ;
541
+ fixture . detectChanges ( ) ;
542
+ expect ( segment . classList . contains ( 'cal-drag-over' ) ) . to . be . true ;
543
+ triggerDomEvent ( 'mouseup' , document . body , { clientY : segmentPosition . top , clientX : eventPosition . left } ) ;
544
+ fixture . detectChanges ( ) ;
545
+ fixture . destroy ( ) ;
546
+ externalEventFixture . destroy ( ) ;
547
+ expect ( eventDropped ) . to . have . been . calledWith ( {
548
+ event : externalEventFixture . componentInstance . event ,
549
+ newStart : moment ( '2016-06-27' ) . startOf ( 'day' ) . add ( 1 , 'hours' ) . toDate ( )
550
+ } ) ;
551
+ } ) ;
552
+
483
553
} ) ;
0 commit comments