Sfoglia il codice sorgente

make updateEvent less magical. solves issue 2194. modify/add tests

Adam Shaw 11 anni fa
parent
commit
8fc29dd278
2 ha cambiato i file con 34 aggiunte e 36 eliminazioni
  1. 1 19
      src/EventManager.js
  2. 33 17
      tests/automated/updateEvent.js

+ 1 - 19
src/EventManager.js

@@ -332,25 +332,7 @@ function EventManager(options) { // assumed to be a calendar
 			event.end = null;
 			event.end = null;
 		}
 		}
 
 
-		// if the allDay value has not changed, but one of the dates has been given a time,
-		// infer that the caller wants the event to be timed (not allDay).
-		if (
-			event.allDay == event._allDay &&
-			(event.start.hasTime() || (event.end && event.end.hasTime()))
-		) {
-			event.allDay = false;
-		}
-
-		// if the allDay values has changed, but the end is no longer consistent, clear it
-		if (
-			event.allDay != event._allDay &&
-			event.end &&
-			event.end.hasTime() == event.allDay
-		) {
-			event.end = null;
-		}
-
-		mutateEvent(event, getMiscEventProps(event));
+		mutateEvent(event, getMiscEventProps(event)); // will handle start/end/allDay normalization
 		reportEvents(cache); // reports event modifications (so we can redraw)
 		reportEvents(cache); // reports event modifications (so we can redraw)
 	}
 	}
 
 

+ 33 - 17
tests/automated/updateEvent.js

@@ -212,7 +212,7 @@ describe('updateEvent', function() {
 	});
 	});
 
 
 	describe('when giving a time to an all-day event\'s start', function() {
 	describe('when giving a time to an all-day event\'s start', function() {
-		it('should make the event and related events timed', function() {
+		it('should erase the start\'s time and keep the event all-day', function() {
 			options.events = [
 			options.events = [
 				{ id: '1', start: '2014-05-01', end: '2014-05-03', allDay: true },
 				{ id: '1', start: '2014-05-01', end: '2014-05-03', allDay: true },
 				{ id: '1', start: '2014-05-10', end: '2014-05-13', allDay: true }
 				{ id: '1', start: '2014-05-10', end: '2014-05-13', allDay: true }
@@ -220,12 +220,28 @@ describe('updateEvent', function() {
 			init();
 			init();
 			event.start.time('18:00');
 			event.start.time('18:00');
 			$('#cal').fullCalendar('updateEvent', event);
 			$('#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();
+			expect(event.allDay).toEqual(true);
+			expect(event.start).toEqualMoment('2014-05-01');
+			expect(event.end).toEqualMoment('2014-05-03');
+			expect(relatedEvent.allDay).toEqual(true);
+			expect(relatedEvent.start).toEqualMoment('2014-05-10');
+			expect(relatedEvent.end).toEqualMoment('2014-05-13');
+		});
+	});
+
+	// issue 2194
+	describe('when accidentally giving a time to an all-day event with moment()', function() {
+		it('should erase the start and end\'s times and keep the event all-day', function() {
+			options.events = [
+				{ id: '1', start: '2014-05-01', end: '2014-05-03', allDay: true }
+			];
+			init();
+			event.start = moment('2014-05-01'); // won't have an ambig time
+			event.end = moment('2014-05-03'); // "
+			$('#cal').fullCalendar('updateEvent', event);
+			expect(event.allDay).toEqual(true);
+			expect(event.start).toEqualMoment('2014-05-01');
+			expect(event.end).toEqualMoment('2014-05-03');
 		});
 		});
 	});
 	});
 
 
@@ -241,10 +257,10 @@ describe('updateEvent', function() {
 				$('#cal').fullCalendar('updateEvent', event);
 				$('#cal').fullCalendar('updateEvent', event);
 				expect(event.allDay).toEqual(false);
 				expect(event.allDay).toEqual(false);
 				expect(event.start).toEqualMoment('2014-05-01T00:00:00');
 				expect(event.start).toEqualMoment('2014-05-01T00:00:00');
-				expect(event.end).toBeNull();
+				expect(event.end).toEqualMoment('2014-05-03T00:00:00');
 				expect(relatedEvent.allDay).toEqual(false);
 				expect(relatedEvent.allDay).toEqual(false);
 				expect(relatedEvent.start).toEqualMoment('2014-05-10T00:00:00');
 				expect(relatedEvent.start).toEqualMoment('2014-05-10T00:00:00');
-				expect(relatedEvent.end).toBeNull();
+				expect(relatedEvent.end).toEqualMoment('2014-05-13T00:00:00');
 			});
 			});
 		});
 		});
 		describe('when the event\'s dates are set to a time', function() {
 		describe('when the event\'s dates are set to a time', function() {
@@ -259,10 +275,10 @@ describe('updateEvent', function() {
 				$('#cal').fullCalendar('updateEvent', event);
 				$('#cal').fullCalendar('updateEvent', event);
 				expect(event.allDay).toEqual(false);
 				expect(event.allDay).toEqual(false);
 				expect(event.start).toEqualMoment('2014-05-01T14:00:00');
 				expect(event.start).toEqualMoment('2014-05-01T14:00:00');
-				expect(event.end).toBeNull();
+				expect(event.end).toEqualMoment('2014-05-03T00:00:00');
 				expect(relatedEvent.allDay).toEqual(false);
 				expect(relatedEvent.allDay).toEqual(false);
 				expect(relatedEvent.start).toEqualMoment('2014-05-10T14:00:00');
 				expect(relatedEvent.start).toEqualMoment('2014-05-10T14:00:00');
-				expect(relatedEvent.end).toBeNull();
+				expect(relatedEvent.end).toEqualMoment('2014-05-13T00:00:00');
 			});
 			});
 		});
 		});
 		describe('when the event\'s start is also moved', function() {
 		describe('when the event\'s start is also moved', function() {
@@ -277,10 +293,10 @@ describe('updateEvent', function() {
 				$('#cal').fullCalendar('updateEvent', event);
 				$('#cal').fullCalendar('updateEvent', event);
 				expect(event.allDay).toEqual(false);
 				expect(event.allDay).toEqual(false);
 				expect(event.start).toEqualMoment('2014-05-02T00:00:00');
 				expect(event.start).toEqualMoment('2014-05-02T00:00:00');
-				expect(event.end).toBeNull();
+				expect(event.end).toEqualMoment('2014-05-03T00:00:00');
 				expect(relatedEvent.allDay).toEqual(false);
 				expect(relatedEvent.allDay).toEqual(false);
 				expect(relatedEvent.start).toEqualMoment('2014-05-11T00:00:00');
 				expect(relatedEvent.start).toEqualMoment('2014-05-11T00:00:00');
-				expect(relatedEvent.end).toBeNull();
+				expect(relatedEvent.end).toEqualMoment('2014-05-13T00:00:00');
 			});
 			});
 		});
 		});
 	});
 	});
@@ -296,10 +312,10 @@ describe('updateEvent', function() {
 			$('#cal').fullCalendar('updateEvent', event);
 			$('#cal').fullCalendar('updateEvent', event);
 			expect(event.allDay).toEqual(true);
 			expect(event.allDay).toEqual(true);
 			expect(event.start).toEqualMoment('2014-05-01');
 			expect(event.start).toEqualMoment('2014-05-01');
-			expect(event.end).toBeNull();
+			expect(event.end).toEqualMoment('2014-05-03');
 			expect(relatedEvent.allDay).toEqual(true);
 			expect(relatedEvent.allDay).toEqual(true);
 			expect(relatedEvent.start).toEqualMoment('2014-05-10');
 			expect(relatedEvent.start).toEqualMoment('2014-05-10');
-			expect(relatedEvent.end).toBeNull();
+			expect(relatedEvent.end).toEqualMoment('2014-05-13');
 		});
 		});
 		it('should adjust the event and related event\'s allDay/start/end and account for a new start', function() {
 		it('should adjust the event and related event\'s allDay/start/end and account for a new start', function() {
 			options.events = [
 			options.events = [
@@ -312,10 +328,10 @@ describe('updateEvent', function() {
 			$('#cal').fullCalendar('updateEvent', event);
 			$('#cal').fullCalendar('updateEvent', event);
 			expect(event.allDay).toEqual(true);
 			expect(event.allDay).toEqual(true);
 			expect(event.start).toEqualMoment('2014-05-02');
 			expect(event.start).toEqualMoment('2014-05-02');
-			expect(event.end).toBeNull();
+			expect(event.end).toEqualMoment('2014-05-03');
 			expect(relatedEvent.allDay).toEqual(true);
 			expect(relatedEvent.allDay).toEqual(true);
 			expect(relatedEvent.start).toEqualMoment('2014-05-11');
 			expect(relatedEvent.start).toEqualMoment('2014-05-11');
-			expect(relatedEvent.end).toBeNull();
+			expect(relatedEvent.end).toEqualMoment('2014-05-13');
 		});
 		});
 	});
 	});