updateEvent.js 7.1 KB

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