@@ -26,6 +26,24 @@ import * as sinon from 'sinon';
26
26
import { triggerDomEvent , ExternalEventComponent } from './util' ;
27
27
import { take } from 'rxjs/operators' ;
28
28
import { adapterFactory } from '../src/date-adapters/date-fns' ;
29
+ import { Component } from '@angular/core' ;
30
+ import { By } from '@angular/platform-browser' ;
31
+
32
+ @Component ( {
33
+ template : `
34
+ <mwl-calendar-week-view
35
+ [viewDate]="viewDate"
36
+ [events]="events"
37
+ (eventTimesChanged)="eventTimesChanged($event)"
38
+ ></mwl-calendar-week-view>
39
+ <mwl-external-event></mwl-external-event>
40
+ `
41
+ } )
42
+ class TestComponent {
43
+ viewDate : Date ;
44
+ events : CalendarEvent [ ] ;
45
+ eventTimesChanged = sinon . spy ( ) ;
46
+ }
29
47
30
48
describe ( 'calendarWeekView component' , ( ) => {
31
49
beforeEach ( ( ) => {
@@ -45,7 +63,7 @@ describe('calendarWeekView component', () => {
45
63
) ,
46
64
DragAndDropModule
47
65
] ,
48
- declarations : [ ExternalEventComponent ] ,
66
+ declarations : [ ExternalEventComponent , TestComponent ] ,
49
67
providers : [ { provide : MOMENT , useValue : moment } ]
50
68
} ) ;
51
69
} ) ;
@@ -912,20 +930,14 @@ describe('calendarWeekView component', () => {
912
930
} ) ;
913
931
914
932
it ( 'should allow external events to be dropped on the week view headers' , ( ) => {
915
- const fixture : ComponentFixture <
916
- CalendarWeekViewComponent
917
- > = TestBed . createComponent ( CalendarWeekViewComponent ) ;
933
+ const fixture = TestBed . createComponent ( TestComponent ) ;
918
934
fixture . componentInstance . viewDate = new Date ( '2016-06-27' ) ;
919
935
fixture . componentInstance . events = [ ] ;
920
- fixture . componentInstance . ngOnChanges ( { viewDate : { } , events : { } } ) ;
921
936
fixture . detectChanges ( ) ;
922
937
document . body . appendChild ( fixture . nativeElement ) ;
923
-
924
- const externalEventFixture : ComponentFixture <
925
- ExternalEventComponent
926
- > = TestBed . createComponent ( ExternalEventComponent ) ;
927
- externalEventFixture . detectChanges ( ) ;
928
- document . body . appendChild ( externalEventFixture . nativeElement ) ;
938
+ const externalEventFixture = fixture . debugElement . query (
939
+ By . directive ( ExternalEventComponent )
940
+ ) ;
929
941
930
942
const event : HTMLElement = externalEventFixture . nativeElement . querySelector (
931
943
'.external-event'
@@ -938,8 +950,7 @@ describe('calendarWeekView component', () => {
938
950
const header : HTMLElement = headers [ 2 ] ;
939
951
const headerPosition : ClientRect = header . getBoundingClientRect ( ) ;
940
952
941
- const eventDropped : sinon . SinonSpy = sinon . spy ( ) ;
942
- fixture . componentInstance . eventTimesChanged . subscribe ( eventDropped ) ;
953
+ const eventDropped = fixture . componentInstance . eventTimesChanged ;
943
954
triggerDomEvent ( 'mousedown' , event , {
944
955
clientY : eventPosition . top ,
945
956
clientX : eventPosition . left
@@ -955,8 +966,6 @@ describe('calendarWeekView component', () => {
955
966
clientX : headerPosition . left
956
967
} ) ;
957
968
fixture . detectChanges ( ) ;
958
- fixture . destroy ( ) ;
959
- externalEventFixture . destroy ( ) ;
960
969
expect ( eventDropped ) . to . have . been . calledWith ( {
961
970
type : 'drop' ,
962
971
event : externalEventFixture . componentInstance . event ,
@@ -966,6 +975,7 @@ describe('calendarWeekView component', () => {
966
975
. toDate ( ) ,
967
976
allDay : true
968
977
} ) ;
978
+ expect ( eventDropped ) . to . have . been . calledOnce ;
969
979
} ) ;
970
980
971
981
it ( 'should allow the weekend days to be customised' , ( ) => {
@@ -2336,4 +2346,56 @@ describe('calendarWeekView component', () => {
2336
2346
) ;
2337
2347
document . head . appendChild ( style ) ;
2338
2348
} ) ;
2349
+
2350
+ it ( 'should allow external events to be dropped on the hour segments' , ( ) => {
2351
+ const fixture = TestBed . createComponent ( TestComponent ) ;
2352
+ fixture . componentInstance . viewDate = new Date ( '2016-06-27' ) ;
2353
+ fixture . componentInstance . events = [ ] ;
2354
+ fixture . detectChanges ( ) ;
2355
+ document . body . appendChild ( fixture . nativeElement ) ;
2356
+ const externalEventFixture = fixture . debugElement . query (
2357
+ By . directive ( ExternalEventComponent )
2358
+ ) ;
2359
+
2360
+ const event : HTMLElement = externalEventFixture . nativeElement . querySelector (
2361
+ '.external-event'
2362
+ ) ;
2363
+ const eventPosition : ClientRect = event . getBoundingClientRect ( ) ;
2364
+
2365
+ const segments : HTMLElement [ ] = Array . from (
2366
+ fixture . nativeElement . querySelectorAll (
2367
+ '.cal-day-columns .cal-hour-segment'
2368
+ )
2369
+ ) ;
2370
+ const segment = segments [ 1 ] ;
2371
+ const segmentPosition : ClientRect = segment . getBoundingClientRect ( ) ;
2372
+
2373
+ const eventDropped = fixture . componentInstance . eventTimesChanged ;
2374
+
2375
+ triggerDomEvent ( 'mousedown' , event , {
2376
+ clientY : eventPosition . top ,
2377
+ clientX : eventPosition . left
2378
+ } ) ;
2379
+ fixture . detectChanges ( ) ;
2380
+ triggerDomEvent ( 'mousemove' , document . body , {
2381
+ clientY : segmentPosition . top ,
2382
+ clientX : segmentPosition . left
2383
+ } ) ;
2384
+ fixture . detectChanges ( ) ;
2385
+ triggerDomEvent ( 'mouseup' , document . body , {
2386
+ clientY : segmentPosition . top ,
2387
+ clientX : segmentPosition . left
2388
+ } ) ;
2389
+ fixture . detectChanges ( ) ;
2390
+ expect ( eventDropped ) . to . have . been . calledWith ( {
2391
+ type : 'drop' ,
2392
+ event : externalEventFixture . componentInstance . event ,
2393
+ newStart : moment ( '2016-06-27' )
2394
+ . startOf ( 'week' )
2395
+ . add ( 30 , 'minutes' )
2396
+ . toDate ( ) ,
2397
+ allDay : false
2398
+ } ) ;
2399
+ expect ( eventDropped ) . to . have . been . calledOnce ;
2400
+ } ) ;
2339
2401
} ) ;
0 commit comments