@@ -13,16 +13,25 @@ import {
13
13
CalendarModule ,
14
14
MOMENT ,
15
15
CalendarEventTimesChangedEvent
16
- } from './../src' ;
17
- import { CalendarWeekViewComponent } from './../src/components/week/calendarWeekView.component' ;
18
- import { DraggableHelper } from 'angular-draggable-droppable' ;
19
- import { Subject } from 'rxjs/Rx' ;
20
- import { triggerDomEvent } from './util' ;
16
+ } from '../src' ;
17
+ import { CalendarWeekViewComponent } from '../src/components/week/calendarWeekView.component' ;
18
+ import { DraggableHelper , DragAndDropModule } from 'angular-draggable-droppable' ;
19
+ import { Subject } from 'rxjs/Subject' ;
20
+ import * as sinon from 'sinon' ;
21
+ import { triggerDomEvent , ExternalEventComponent } from './util' ;
21
22
22
23
describe ( 'calendarWeekView component' , ( ) => {
23
24
24
25
beforeEach ( ( ) => {
25
- TestBed . configureTestingModule ( { imports : [ CalendarModule ] } ) ;
26
+ TestBed . configureTestingModule ( {
27
+ imports : [
28
+ CalendarModule ,
29
+ DragAndDropModule
30
+ ] ,
31
+ declarations : [
32
+ ExternalEventComponent
33
+ ]
34
+ } ) ;
26
35
TestBed . configureCompiler ( {
27
36
providers : [
28
37
CalendarEventTitleFormatter ,
@@ -393,4 +402,40 @@ describe('calendarWeekView component', () => {
393
402
fixture . destroy ( ) ;
394
403
} ) ;
395
404
405
+ it ( 'should allow external events to be dropped on the week view headers' , ( ) => {
406
+ const fixture : ComponentFixture < CalendarWeekViewComponent > = TestBed . createComponent ( CalendarWeekViewComponent ) ;
407
+ fixture . componentInstance . viewDate = new Date ( '2016-06-27' ) ;
408
+ fixture . componentInstance . events = [ ] ;
409
+ fixture . componentInstance . ngOnChanges ( { viewDate : { } , events : { } } ) ;
410
+ fixture . detectChanges ( ) ;
411
+ document . body . appendChild ( fixture . nativeElement ) ;
412
+
413
+ const externalEventFixture : ComponentFixture < ExternalEventComponent > = TestBed . createComponent ( ExternalEventComponent ) ;
414
+ externalEventFixture . detectChanges ( ) ;
415
+ document . body . appendChild ( externalEventFixture . nativeElement ) ;
416
+
417
+ const event : HTMLElement = externalEventFixture . nativeElement . querySelector ( '.external-event' ) ;
418
+ const eventPosition : ClientRect = event . getBoundingClientRect ( ) ;
419
+
420
+ const headers : any [ ] = Array . from ( fixture . nativeElement . querySelectorAll ( 'mwl-calendar-week-view-header' ) ) ;
421
+ const header : HTMLElement = headers [ 2 ] ;
422
+ const headerPosition : ClientRect = header . getBoundingClientRect ( ) ;
423
+
424
+ const eventDropped : sinon . SinonSpy = sinon . spy ( ) ;
425
+ fixture . componentInstance . eventTimesChanged . subscribe ( eventDropped ) ;
426
+ triggerDomEvent ( 'mousedown' , event , { clientY : eventPosition . top , clientX : eventPosition . left } ) ;
427
+ fixture . detectChanges ( ) ;
428
+ triggerDomEvent ( 'mousemove' , document . body , { clientY : headerPosition . top , clientX : headerPosition . left } ) ;
429
+ fixture . detectChanges ( ) ;
430
+ expect ( header . classList . contains ( 'cal-drag-over' ) ) . to . be . true ;
431
+ triggerDomEvent ( 'mouseup' , document . body , { clientY : headerPosition . top , clientX : headerPosition . left } ) ;
432
+ fixture . detectChanges ( ) ;
433
+ fixture . destroy ( ) ;
434
+ externalEventFixture . destroy ( ) ;
435
+ expect ( eventDropped ) . to . have . been . calledWith ( {
436
+ event : externalEventFixture . componentInstance . event ,
437
+ newStart : moment ( '2016-06-27' ) . startOf ( 'week' ) . add ( 2 , 'days' ) . toDate ( )
438
+ } ) ;
439
+ } ) ;
440
+
396
441
} ) ;
0 commit comments