updateEvent.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264
  1. describe('updateEvent', function() {
  2. describe('when changing an event\'s ID', function() {
  3. pushOptions({
  4. defaultView: 'month',
  5. now: '2017-07-14',
  6. events: [
  7. { id: '2', start: '2017-07-14', end: '2017-07-19' }
  8. ]
  9. });
  10. it('reflects the ID change on the event object', function(done) {
  11. var allRenderCnt = 0;
  12. initCalendar({
  13. eventAfterAllRender: function() {
  14. var eventObjs;
  15. var eventObj;
  16. allRenderCnt++;
  17. if (allRenderCnt === 1) {
  18. eventObjs = currentCalendar.clientEvents();
  19. expect(eventObjs.length).toBe(1);
  20. eventObj = eventObjs[0];
  21. eventObj.id = '3';
  22. currentCalendar.updateEvent(eventObj);
  23. eventObjs = currentCalendar.clientEvents();
  24. expect(eventObjs.length).toBe(1);
  25. eventObj = eventObjs[0];
  26. expect(eventObj.id).toBe('3');
  27. done();
  28. }
  29. }
  30. });
  31. });
  32. it('reflects the ID change during event rendering', function(done) {
  33. var allRenderCnt = 0;
  34. var renderCnt = 0;
  35. initCalendar({
  36. eventRender: function(eventObj) {
  37. if (allRenderCnt === 1) {
  38. expect(eventObj.id).toBe('3');
  39. renderCnt++;
  40. }
  41. },
  42. eventAfterAllRender: function() {
  43. var eventObjs;
  44. var eventObj;
  45. allRenderCnt++;
  46. if (allRenderCnt === 1) {
  47. eventObjs = currentCalendar.clientEvents();
  48. expect(eventObjs.length).toBe(1);
  49. eventObj = eventObjs[0];
  50. eventObj.id = '3';
  51. currentCalendar.updateEvent(eventObj);
  52. }
  53. else if (allRenderCnt === 2) {
  54. expect(renderCnt).toBe(2);
  55. done();
  56. }
  57. }
  58. });
  59. });
  60. });
  61. describe('when changing an event from timed to all-day', function() {
  62. pushOptions({
  63. defaultView: 'month',
  64. now: '2017-07-14',
  65. events: [
  66. { id: '2', start: '2017-07-14T08:00:00Z', end: '2017-07-14T12:00:00Z' }
  67. ]
  68. });
  69. it('reflects the change on the event object', function(done) {
  70. var allRenderCnt = 0;
  71. initCalendar({
  72. eventAfterAllRender: function() {
  73. var eventObj;
  74. allRenderCnt++;
  75. if (allRenderCnt === 1) {
  76. eventObj = currentCalendar.clientEvents('2')[0];
  77. expect(eventObj.allDay).toBe(false);
  78. eventObj.allDay = true;
  79. eventObj.start = '2017-07-14';
  80. eventObj.end = '2017-07-15';
  81. currentCalendar.updateEvent(eventObj);
  82. eventObj = currentCalendar.clientEvents('2')[0];
  83. expect(eventObj.allDay).toBe(true);
  84. expect(eventObj.start.format()).toBe('2017-07-14');
  85. expect(eventObj.end.format()).toBe('2017-07-15');
  86. done();
  87. }
  88. }
  89. });
  90. });
  91. });
  92. describe('when changing an event from all-day to timed', function() {
  93. it('accepts all new properties as-is', function() {
  94. var event;
  95. initCalendar({
  96. defaultView: 'month',
  97. defaultDate: '2016-04-29',
  98. events: [
  99. {
  100. title: 'Test event',
  101. start: '2016-04-29'
  102. }
  103. ]
  104. });
  105. event = currentCalendar.clientEvents()[0];
  106. event.allDay = false;
  107. event.start = '2016-04-29T12:00:00'; // 12 noon
  108. event.end = '2016-04-29T14:00:00'; // 2pm
  109. currentCalendar.updateEvent(event);
  110. event = currentCalendar.clientEvents()[0];
  111. expect(event.allDay).toBe(false);
  112. expect(moment.isMoment(event.start)).toBe(true);
  113. expect(moment.isMoment(event.end)).toBe(true);
  114. expect(event.start).toEqualMoment('2016-04-29T12:00:00');
  115. expect(event.end).toEqualMoment('2016-04-29T14:00:00');
  116. });
  117. });
  118. describe('when adding a new misc object property', function() {
  119. it('accepts the new property', function() {
  120. var event;
  121. initCalendar({
  122. now: '2017-10-05',
  123. events: [
  124. { title: 'event 0', start: '2017-10-05' }
  125. ]
  126. });
  127. event = currentCalendar.clientEvents()[0];
  128. event.user = { fname: 'Adam' };
  129. currentCalendar.updateEvent(event);
  130. event = currentCalendar.clientEvents()[0];
  131. expect(typeof event.user).toBe('object');
  132. expect(event.user.fname).toBe('Adam');
  133. })
  134. });
  135. describe('when modifying an existing misc object property', function() {
  136. it('accepts the new property', function() {
  137. var event;
  138. initCalendar({
  139. now: '2017-10-05',
  140. events: [
  141. { title: 'event 0', start: '2017-10-05', user: { fname: 'Adam' } }
  142. ]
  143. });
  144. event = currentCalendar.clientEvents()[0];
  145. expect(typeof event.user).toBe('object');
  146. expect(event.user.fname).toBe('Adam');
  147. event.user = { fname: 'John' };
  148. currentCalendar.updateEvent(event);
  149. event = currentCalendar.clientEvents()[0];
  150. expect(typeof event.user).toBe('object');
  151. expect(event.user.fname).toBe('John');
  152. })
  153. });
  154. describe('with className', function() {
  155. describe('when not modified', function() {
  156. it('maintains classNames for individual event defs', function() {
  157. var eventA, eventB;
  158. initCalendar({
  159. now: '2017-10-05',
  160. events: [
  161. { id: '1', title: 'event1', start: '2017-10-05', otherId: 'a', customProp: 'asdf', className: 'myclassA' },
  162. { id: '1', title: 'event1', start: '2017-10-12', otherId: 'b', customProp: 'asdf', className: 'myclassB' }
  163. ]
  164. });
  165. eventA = currentCalendar.clientEvents(function(eventDef) {
  166. return eventDef.otherId === 'a';
  167. })[0];
  168. eventA.customProp = 'qwer';
  169. currentCalendar.updateEvent(eventA);
  170. eventA = currentCalendar.clientEvents(function(eventDef) {
  171. return eventDef.otherId === 'a';
  172. })[0];
  173. eventB = currentCalendar.clientEvents(function(eventDef) {
  174. return eventDef.otherId === 'b';
  175. })[0];
  176. expect(eventA.customProp).toBe('qwer');
  177. expect(eventA.className).toEqual([ 'myclassA' ]);
  178. expect(eventB.customProp).toBe('qwer');
  179. expect(eventB.className).toEqual([ 'myclassB' ]);
  180. });
  181. });
  182. describe('when modified', function() {
  183. it('changes classNames for all similar event defs', function() {
  184. var eventA, eventB;
  185. initCalendar({
  186. now: '2017-10-05',
  187. events: [
  188. { id: '1', title: 'event1', start: '2017-10-05', otherId: 'a', className: 'myclassA' },
  189. { id: '1', title: 'event1', start: '2017-10-12', otherId: 'b', className: 'myclassB' }
  190. ]
  191. });
  192. eventA = currentCalendar.clientEvents(function(eventDef) {
  193. return eventDef.otherId === 'a';
  194. })[0];
  195. eventA.className = [ 'otherClass' ];
  196. currentCalendar.updateEvent(eventA);
  197. eventA = currentCalendar.clientEvents(function(eventDef) {
  198. return eventDef.otherId === 'a';
  199. })[0];
  200. eventB = currentCalendar.clientEvents(function(eventDef) {
  201. return eventDef.otherId === 'b';
  202. })[0];
  203. expect(eventA.className).toEqual([ 'otherClass' ]);
  204. expect(eventB.className).toEqual([ 'otherClass' ]);
  205. });
  206. });
  207. });
  208. });