From 009c9b56fc4e36de416133d1a2b7a696055bec2d Mon Sep 17 00:00:00 2001 From: Adam Shaw Date: Sat, 24 May 2014 02:05:42 -0700 Subject: [PATCH] updateEvent tests --- tests/automated/updateEvent.js | 460 ++++++++++++++++++++++++++++++++- 1 file changed, 459 insertions(+), 1 deletion(-) diff --git a/tests/automated/updateEvent.js b/tests/automated/updateEvent.js index 0a53b90..09f5aee 100644 --- a/tests/automated/updateEvent.js +++ b/tests/automated/updateEvent.js @@ -1,6 +1,464 @@ describe('updateEvent', function() { - ; + var options; + var event; + var relatedEvent; + + beforeEach(function() { + affix('#cal'); + options = { + defaultDate: '2014-05-01', + defaultView: 'month' + }; + event = null; + relatedEvent = null; + }); + + function init() { + $('#cal').fullCalendar(options); + var events = $('#cal').fullCalendar('clientEvents'); + event = events[0]; + relatedEvent = events[1]; + } + + describe('when moving an all-day event\'s start', function() { + describe('when a related event doesn\'t have an end', function() { + it('should move the start by the delta and leave the end as null', function() { + options.events = [ + { id: '1', start: '2014-05-01', allDay: true }, + { id: '1', start: '2014-05-10', allDay: true } + ]; + init(); + event.start.add('days', 2); + $('#cal').fullCalendar('updateEvent', event); + expect(event.start).toEqualMoment('2014-05-03'); + expect(event.end).toBeNull(); + expect(relatedEvent.start).toEqualMoment('2014-05-12'); + expect(relatedEvent.end).toBeNull(); + }); + }); + describe('when a related event has an end', function() { + it('should move the start and end by the delta', function() { + options.events = [ + { id: '1', start: '2014-05-01', allDay: true }, + { id: '1', start: '2014-05-10', end: '2014-05-12', allDay: true } + ]; + init(); + event.start.add('days', 2); + expect(event.start).toEqualMoment('2014-05-03'); + expect(event.end).toBeNull(); + $('#cal').fullCalendar('updateEvent', event); + expect(relatedEvent.start).toEqualMoment('2014-05-12'); + expect(relatedEvent.end).toEqualMoment('2014-05-14'); + }); + }); + }); + + describe('when moving an timed event\'s start', function() { + describe('when a related event doesn\'t have an end', function() { + it('should move the start by the delta and leave the end as null', function() { + options.events = [ + { id: '1', start: '2014-05-01T12:00:00', allDay: false }, + { id: '1', start: '2014-05-10T06:00:00', allDay: false } + ]; + init(); + event.start.add({ days: 2, hours: 2 }); + $('#cal').fullCalendar('updateEvent', event); + expect(event.start).toEqualMoment('2014-05-03T14:00:00'); + expect(event.end).toBeNull(); + expect(relatedEvent.start).toEqualMoment('2014-05-12T08:00:00'); + expect(relatedEvent.end).toBeNull(); + }); + }); + describe('when a related event has an end', function() { + it('should move the start and end by the delta', function() { + options.events = [ + { id: '1', start: '2014-05-01T12:00:00', allDay: false }, + { id: '1', start: '2014-05-10T06:00:00', end: '2014-05-12T08:00:00', allDay: false } + ]; + init(); + event.start.add({ days: 2, hours: 2 }); + $('#cal').fullCalendar('updateEvent', event); + expect(event.start).toEqualMoment('2014-05-03T14:00:00'); + expect(event.end).toBeNull(); + expect(relatedEvent.start).toEqualMoment('2014-05-12T08:00:00'); + expect(relatedEvent.end).toEqualMoment('2014-05-14T10:00:00'); + }); + }); + }); + + describe('when moving an all-day event\'s end', function() { + describe('when a related event doesn\'t have an end', function() { + it('should give the end a default duration plus the delta', function() { + options.defaultAllDayEventDuration = { days: 2 }; + options.events = [ + { id: '1', start: '2014-05-01', end: '2014-05-03', allDay: true }, + { id: '1', start: '2014-05-10', allDay: true } + ]; + init(); + event.end.add('days', 1); + $('#cal').fullCalendar('updateEvent', event); + expect(event.start).toEqualMoment('2014-05-01'); + expect(event.end).toEqualMoment('2014-05-04'); + expect(relatedEvent.start).toEqualMoment('2014-05-10'); + expect(relatedEvent.end).toEqualMoment('2014-05-13'); + }); + }); + describe('when a related event has an end', function() { + it('should move the end by the delta', function() { + options.events = [ + { id: '1', start: '2014-05-01', end: '2014-05-03', allDay: true }, + { id: '1', start: '2014-05-10', end: '2014-05-13', allDay: true } + ]; + init(); + event.end.add('days', 1); + $('#cal').fullCalendar('updateEvent', event); + expect(event.start).toEqualMoment('2014-05-01'); + expect(event.end).toEqualMoment('2014-05-04'); + expect(relatedEvent.start).toEqualMoment('2014-05-10'); + expect(relatedEvent.end).toEqualMoment('2014-05-14'); + }); + }); + }); + + describe('when moving a timed event\'s end', function() { + describe('when a related event doesn\'t have an end', function() { + describe('when forceEventDuration is off', function() { + it('should give the end a default duration plus the delta', function() { + options.forceEventDuration = false; + options.defaultTimedEventDuration = { hours: 2 }; + options.events = [ + { id: '1', start: '2014-05-01T12:00:00', end: '2014-05-01T15:00:00', allDay: false }, + { id: '1', start: '2014-05-10T16:00:00', allDay: false } + ]; + init(); + event.end.add({ days: 1, hours: 1 }); + $('#cal').fullCalendar('updateEvent', event); + expect(event.start).toEqualMoment('2014-05-01T12:00:00'); + expect(event.end).toEqualMoment('2014-05-02T16:00:00'); + expect(relatedEvent.start).toEqualMoment('2014-05-10T16:00:00'); + expect(relatedEvent.end).toEqualMoment('2014-05-11T19:00:00'); + }); + }); + describe('when forceEventDuration is on', function() { + it('should give the end a default duration plus the delta', function() { + options.forceEventDuration = true; + options.defaultTimedEventDuration = { hours: 2 }; + options.events = [ + { id: '1', start: '2014-05-01T12:00:00', end: '2014-05-01T15:00:00', allDay: false }, + { id: '1', start: '2014-05-10T16:00:00', allDay: false } + ]; + init(); + event.end.add({ days: 1, hours: 1 }); + relatedEvent.end = null; + $('#cal').fullCalendar('updateEvent', event); + expect(event.start).toEqualMoment('2014-05-01T12:00:00'); + expect(event.end).toEqualMoment('2014-05-02T16:00:00'); + expect(relatedEvent.start).toEqualMoment('2014-05-10T16:00:00'); + expect(relatedEvent.end).toEqualMoment('2014-05-11T19:00:00'); + }); + }); + }); + describe('when a related event has an end', function() { + it('should move the end by the delta', function() { + options.events = [ + { id: '1', start: '2014-05-01T12:00:00', end: '2014-05-01T14:00:00', allDay: false }, + { id: '1', start: '2014-05-10T16:00:00', end: '2014-05-10T19:00:00', allDay: false } + ]; + init(); + event.end.add({ days: 1, hours: 1 }); + $('#cal').fullCalendar('updateEvent', event); + expect(event.start).toEqualMoment('2014-05-01T12:00:00'); + expect(event.end).toEqualMoment('2014-05-02T15:00:00'); + expect(relatedEvent.start).toEqualMoment('2014-05-10T16:00:00'); + expect(relatedEvent.end).toEqualMoment('2014-05-11T20:00:00'); + }); + }); + }); + + describe('when moving an all-day event\'s start and end', function() { + it('should move the start and end of related events', function() { + options.events = [ + { id: '1', start: '2014-05-01', end: '2014-05-03', allDay: true }, + { id: '1', start: '2014-05-10', end: '2014-05-13', allDay: true } + ]; + init(); + event.start.add('days', 2); + event.end.add('day', 3); + $('#cal').fullCalendar('updateEvent', event); + expect(event.start).toEqualMoment('2014-05-03'); + expect(event.end).toEqualMoment('2014-05-06'); + expect(relatedEvent.start).toEqualMoment('2014-05-12'); + expect(relatedEvent.end).toEqualMoment('2014-05-16'); + }); + }); + + describe('when moving a timed event\'s start and end', function() { + it('should move the start and end of related events', function() { + options.events = [ + { id: '1', start: '2014-05-01T06:00:00', end: '2014-05-03T06:00:00', allDay: false }, + { id: '1', start: '2014-05-10T06:00:00', end: '2014-05-13T06:00:00', allDay: false } + ]; + init(); + event.start.add({ days: 2, hours: 1 }); + event.end.add({ days: 3, hours: 2 }); + $('#cal').fullCalendar('updateEvent', event); + expect(event.start).toEqualMoment('2014-05-03T07:00:00'); + expect(event.end).toEqualMoment('2014-05-06T08:00:00'); + expect(relatedEvent.start).toEqualMoment('2014-05-12T07:00:00'); + expect(relatedEvent.end).toEqualMoment('2014-05-16T08:00:00'); + }); + }); + + describe('when giving a time to an all-day event\'s start', function() { + it('should make the event and related events timed', function() { + options.events = [ + { id: '1', start: '2014-05-01', end: '2014-05-03', allDay: true }, + { id: '1', start: '2014-05-10', end: '2014-05-13', allDay: true } + ]; + init(); + event.start.time('18:00'); + $('#cal').fullCalendar('updateEvent', event); + expect(event.allDay).toEqual(false); + expect(event.start).toEqualMoment('2014-05-01T18:00:00'); + expect(event.end).toBeNull(); + expect(relatedEvent.allDay).toEqual(false); + expect(relatedEvent.start).toEqualMoment('2014-05-10T18:00:00'); + expect(relatedEvent.end).toBeNull(); + }); + }); + + describe('when changing an event from all-day to timed', function() { + describe('when the event\'s dates remain all-day', function() { + it('should make the event and related events allDay=false and 00:00', function() { + options.events = [ + { id: '1', start: '2014-05-01', end: '2014-05-03', allDay: true }, + { id: '1', start: '2014-05-10', end: '2014-05-13', allDay: true } + ]; + init(); + event.allDay = false; + $('#cal').fullCalendar('updateEvent', event); + expect(event.allDay).toEqual(false); + expect(event.start).toEqualMoment('2014-05-01T00:00:00'); + expect(event.end).toBeNull(); + expect(relatedEvent.allDay).toEqual(false); + expect(relatedEvent.start).toEqualMoment('2014-05-10T00:00:00'); + expect(relatedEvent.end).toBeNull(); + }); + }); + describe('when the event\'s dates are set to a time', function() { + it('should adjust the event and related event\'s allDay/start/end', function() { + options.events = [ + { id: '1', start: '2014-05-01', end: '2014-05-03', allDay: true }, + { id: '1', start: '2014-05-10', end: '2014-05-13', allDay: true } + ]; + init(); + event.allDay = false; + event.start.time('14:00'); + $('#cal').fullCalendar('updateEvent', event); + expect(event.allDay).toEqual(false); + expect(event.start).toEqualMoment('2014-05-01T14:00:00'); + expect(event.end).toBeNull(); + expect(relatedEvent.allDay).toEqual(false); + expect(relatedEvent.start).toEqualMoment('2014-05-10T14:00:00'); + expect(relatedEvent.end).toBeNull(); + }); + }); + describe('when the event\'s start is also moved', function() { + it('should adjust the event and related event\'s allDay/start/end', function() { + options.events = [ + { id: '1', start: '2014-05-01', end: '2014-05-03', allDay: true }, + { id: '1', start: '2014-05-10', end: '2014-05-13', allDay: true } + ]; + init(); + event.allDay = false; + event.start.add('days', 1); + $('#cal').fullCalendar('updateEvent', event); + expect(event.allDay).toEqual(false); + expect(event.start).toEqualMoment('2014-05-02T00:00:00'); + expect(event.end).toBeNull(); + expect(relatedEvent.allDay).toEqual(false); + expect(relatedEvent.start).toEqualMoment('2014-05-11T00:00:00'); + expect(relatedEvent.end).toBeNull(); + }); + }); + }); + + describe('when changing an event from timed to all-day', function() { + it('should adjust the event and related event\'s allDay/start/end', function() { + options.events = [ + { id: '1', start: '2014-05-01T06:00:00', end: '2014-05-03T06:00:00', allDay: false }, + { id: '1', start: '2014-05-10T06:00:00', end: '2014-05-13T06:00:00', allDay: false } + ]; + init(); + event.allDay = true; + $('#cal').fullCalendar('updateEvent', event); + expect(event.allDay).toEqual(true); + expect(event.start).toEqualMoment('2014-05-01'); + expect(event.end).toBeNull + expect(relatedEvent.allDay).toEqual(true); + expect(relatedEvent.start).toEqualMoment('2014-05-10'); + expect(relatedEvent.end).toBeNull(); + }); + it('should adjust the event and related event\'s allDay/start/end and account for a new start', function() { + options.events = [ + { id: '1', start: '2014-05-01T06:00:00', end: '2014-05-03T06:00:00', allDay: false }, + { id: '1', start: '2014-05-10T06:00:00', end: '2014-05-13T06:00:00', allDay: false } + ]; + init(); + event.allDay = true; + event.start.add('days', 1); + $('#cal').fullCalendar('updateEvent', event); + expect(event.allDay).toEqual(true); + expect(event.start).toEqualMoment('2014-05-02'); + expect(event.end).toBeNull + expect(relatedEvent.allDay).toEqual(true); + expect(relatedEvent.start).toEqualMoment('2014-05-11'); + expect(relatedEvent.end).toBeNull(); + }); + }); + + function whenMovingStart(should) { + describe('when moving an timed event\'s start', function() { + beforeEach(function() { + options.events = [ + { id: '1', start: '2014-05-01T06:00:00+05:00', end: '2014-05-03T06:00:00+05:00', allDay: false }, + { id: '1', start: '2014-05-11T06:00:00+05:00', end: '2014-05-13T06:00:00+05:00', allDay: false } + ]; + init(); + event.start.add('hours', 2); + $('#cal').fullCalendar('updateEvent', event); + }); + should(); + }); + } + + function whenMovingEnd(should) { + describe('when moving a timed event\'s end', function() { + beforeEach(function() { + options.events = [ + { id: '1', start: '2014-05-01T06:00:00+05:00', end: '2014-05-03T06:00:00+05:00', allDay: false }, + { id: '1', start: '2014-05-11T06:00:00+05:00', end: '2014-05-13T06:00:00+05:00', allDay: false }, + ]; + init(); + event.end.add('hours', 2); + $('#cal').fullCalendar('updateEvent', event); + }); + should(); + }); + } + + function whenMovingToTimed(should) { + describe('when moving an all-day event to timed', function() { + beforeEach(function() { + options.events = [ + { id: '1', start: '2014-05-01', end: '2014-05-03', allDay: true }, + { id: '1', start: '2014-05-11', end: '2014-05-13', allDay: true } + ]; + init(); + event.allDay = false; + $('#cal').fullCalendar('updateEvent', event); + }); + should(); + }); + } + + function whenReportingUnchanged(should) { // not used right now + describe('when reporting an event that hasn\'t changed', function() { + beforeEach(function() { + options.events = [ + { id: '1', start: '2014-05-01T06:00:00+05:00', end: '2014-05-03T06:00:00+05:00', allDay: false }, + { id: '1', start: '2014-05-11T06:00:00+05:00', end: '2014-05-13T06:00:00+05:00', allDay: false } + ]; + init(); + $('#cal').fullCalendar('updateEvent', event); + }); + should(); + }); + } + + function shouldBeAmbiguouslyZoned() { + it('should make the events ambiguously zoned', function() { + expect(event.start.hasZone()).toEqual(false); + if (event.end) { + expect(event.end.hasZone()).toEqual(false); + } + expect(relatedEvent.start.hasZone()).toEqual(false); + if (relatedEvent.end) { + expect(relatedEvent.end.hasZone()).toEqual(false); + } + }); + } + + function shouldBeLocal() { + it('should make the events local', function() { + expect(event.start.hasZone()).toEqual(true); + expect(event.start._isUTC).toEqual(false); + if (event.end) { + expect(event.end.hasZone()).toEqual(true); + expect(event.end._isUTC).toEqual(false); + } + expect(relatedEvent.start.hasZone()).toEqual(true); + expect(relatedEvent.start._isUTC).toEqual(false); + if (relatedEvent.end) { + expect(relatedEvent.end.hasZone()).toEqual(true); + expect(relatedEvent.end._isUTC).toEqual(false); + } + }); + } + + function shouldBeUTC() { + it('should make the events UTC', function() { + expect(event.start.hasZone()).toEqual(true); + expect(event.start._isUTC).toEqual(true); + if (event.end) { + expect(event.end.hasZone()).toEqual(true); + expect(event.end._isUTC).toEqual(true); + } + expect(event.start.hasZone()).toEqual(true); + expect(event.start._isUTC).toEqual(true); + if (relatedEvent.end) { + expect(relatedEvent.end.hasZone()).toEqual(true); + expect(relatedEvent.end._isUTC).toEqual(true); + } + }); + } + + describe('when calendar has no timezone', function() { + beforeEach(function() { + options.timezone = false; + }); + whenMovingStart(shouldBeAmbiguouslyZoned); + whenMovingEnd(shouldBeAmbiguouslyZoned); + whenMovingToTimed(shouldBeAmbiguouslyZoned); + }); + + describe('when calendar has a local timezone', function() { + beforeEach(function() { + options.timezone = 'local'; + }); + whenMovingStart(shouldBeLocal); + whenMovingEnd(shouldBeLocal); + whenMovingToTimed(shouldBeLocal); + }); + + describe('when calendar has a UTC timezone', function() { + beforeEach(function() { + options.timezone = 'UTC'; + }); + whenMovingStart(shouldBeUTC); + whenMovingEnd(shouldBeUTC); + whenMovingToTimed(shouldBeUTC); + }); + + describe('when calendar has a custom timezone', function() { + beforeEach(function() { + options.timezone = 'America/Chicago'; + }); + whenMovingStart(shouldBeAmbiguouslyZoned); + whenMovingEnd(shouldBeAmbiguouslyZoned); + whenMovingToTimed(shouldBeAmbiguouslyZoned); + }); }); \ No newline at end of file