updateEvent.js 25 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746
  1. describe('updateEvent', function() {
  2. pushOptions({
  3. defaultDate: '2014-05-01',
  4. defaultView: 'month'
  5. })
  6. function getMainEvent() {
  7. return currentCalendar.clientEvents(function(event) {
  8. return event.className[0] === 'mainEvent'
  9. })[0]
  10. }
  11. function getRelatedEvent() {
  12. return currentCalendar.clientEvents(function(event) {
  13. return event.className[0] === 'relatedEvent'
  14. })[0]
  15. }
  16. describe('when moving an all-day event\'s start', function() {
  17. describe('when a related event doesn\'t have an end', function() {
  18. it('should move the start by the delta and leave the end as null', function() {
  19. var event, relatedEvent
  20. initCalendar({
  21. events: [
  22. { id: '1', start: '2014-05-01', allDay: true, className: 'mainEvent' },
  23. { id: '1', start: '2014-05-10', allDay: true, className: 'relatedEvent' }
  24. ]
  25. })
  26. event = getMainEvent()
  27. event.start.add(2, 'days')
  28. currentCalendar.updateEvent(event)
  29. event = getMainEvent()
  30. expect(event.start).toEqualMoment('2014-05-03')
  31. expect(event.end).toBeNull()
  32. relatedEvent = getRelatedEvent()
  33. expect(relatedEvent.start).toEqualMoment('2014-05-12')
  34. expect(relatedEvent.end).toBeNull()
  35. })
  36. })
  37. describe('when a related event has an end', function() {
  38. it('should move the start and end by the delta', function() {
  39. var event, relatedEvent
  40. initCalendar({
  41. events: [
  42. { id: '1', start: '2014-05-01', allDay: true, className: 'mainEvent' },
  43. { id: '1', start: '2014-05-10', end: '2014-05-12', allDay: true, className: 'relatedEvent' }
  44. ]
  45. })
  46. event = getMainEvent()
  47. event.start.add(2, 'days')
  48. expect(event.start).toEqualMoment('2014-05-03')
  49. expect(event.end).toBeNull()
  50. currentCalendar.updateEvent(event)
  51. relatedEvent = getRelatedEvent()
  52. expect(relatedEvent.start).toEqualMoment('2014-05-12')
  53. expect(relatedEvent.end).toEqualMoment('2014-05-14')
  54. })
  55. })
  56. })
  57. describe('when moving an timed event\'s start', function() {
  58. describe('when a related event doesn\'t have an end', function() {
  59. it('should move the start by the delta and leave the end as null', function() {
  60. var event, relatedEvent
  61. initCalendar({
  62. events: [
  63. { id: '1', start: '2014-05-01T12:00:00', allDay: false, className: 'mainEvent' },
  64. { id: '1', start: '2014-05-10T06:00:00', allDay: false, className: 'relatedEvent' }
  65. ]
  66. })
  67. event = getMainEvent()
  68. event.start.add({ days: 2, hours: 2 })
  69. currentCalendar.updateEvent(event)
  70. expect(event.start).toEqualMoment('2014-05-03T14:00:00')
  71. expect(event.end).toBeNull()
  72. relatedEvent = getRelatedEvent()
  73. expect(relatedEvent.start).toEqualMoment('2014-05-12T08:00:00')
  74. expect(relatedEvent.end).toBeNull()
  75. })
  76. })
  77. describe('when a related event has an end', function() {
  78. it('should move the start and end by the delta', function() {
  79. var event, relatedEvent
  80. initCalendar({
  81. events: [
  82. { id: '1', start: '2014-05-01T12:00:00', allDay: false, className: 'mainEvent' },
  83. { id: '1', start: '2014-05-10T06:00:00', end: '2014-05-12T08:00:00', allDay: false, className: 'relatedEvent' }
  84. ]
  85. })
  86. event = getMainEvent()
  87. event.start.add({ days: 2, hours: 2 })
  88. currentCalendar.updateEvent(event)
  89. event = getMainEvent()
  90. expect(event.start).toEqualMoment('2014-05-03T14:00:00')
  91. expect(event.end).toBeNull()
  92. relatedEvent = getRelatedEvent()
  93. expect(relatedEvent.start).toEqualMoment('2014-05-12T08:00:00')
  94. expect(relatedEvent.end).toEqualMoment('2014-05-14T10:00:00')
  95. })
  96. })
  97. })
  98. describe('when moving an all-day event\'s end', function() {
  99. describe('when a related event doesn\'t have an end', function() {
  100. it('should give the end a default duration plus the delta', function() {
  101. var event, relatedEvent
  102. initCalendar({
  103. defaultAllDayEventDuration: { days: 2 },
  104. events: [
  105. { id: '1', start: '2014-05-01', end: '2014-05-03', allDay: true, className: 'mainEvent' },
  106. { id: '1', start: '2014-05-10', allDay: true, className: 'relatedEvent' }
  107. ]
  108. })
  109. event = getMainEvent()
  110. event.end.add(1, 'days')
  111. currentCalendar.updateEvent(event)
  112. event = getMainEvent()
  113. expect(event.start).toEqualMoment('2014-05-01')
  114. expect(event.end).toEqualMoment('2014-05-04')
  115. relatedEvent = getRelatedEvent()
  116. expect(relatedEvent.start).toEqualMoment('2014-05-10')
  117. expect(relatedEvent.end).toEqualMoment('2014-05-13')
  118. })
  119. })
  120. describe('when a related event has an end', function() {
  121. it('should move the end by the delta', function() {
  122. var event, relatedEvent
  123. initCalendar({
  124. events: [
  125. { id: '1', start: '2014-05-01', end: '2014-05-03', allDay: true, className: 'mainEvent' },
  126. { id: '1', start: '2014-05-10', end: '2014-05-13', allDay: true, className: 'relatedEvent' }
  127. ]
  128. })
  129. event = getMainEvent()
  130. event.end.add(1, 'days')
  131. currentCalendar.updateEvent(event)
  132. event = getMainEvent()
  133. expect(event.start).toEqualMoment('2014-05-01')
  134. expect(event.end).toEqualMoment('2014-05-04')
  135. relatedEvent = getRelatedEvent()
  136. expect(relatedEvent.start).toEqualMoment('2014-05-10')
  137. expect(relatedEvent.end).toEqualMoment('2014-05-14')
  138. })
  139. })
  140. })
  141. describe('when moving a timed event\'s end', function() {
  142. describe('when a related event doesn\'t have an end', function() {
  143. describe('when forceEventDuration is off', function() {
  144. it('should give the end a default duration plus the delta', function() {
  145. var event, relatedEvent
  146. initCalendar({
  147. forceEventDuration: false,
  148. defaultTimedEventDuration: { hours: 2 },
  149. events: [
  150. { id: '1', start: '2014-05-01T12:00:00', end: '2014-05-01T15:00:00', allDay: false, className: 'mainEvent' },
  151. { id: '1', start: '2014-05-10T16:00:00', allDay: false, className: 'relatedEvent' }
  152. ]
  153. })
  154. event = getMainEvent()
  155. event.end.add({ days: 1, hours: 1 })
  156. currentCalendar.updateEvent(event)
  157. event = getMainEvent()
  158. expect(event.start).toEqualMoment('2014-05-01T12:00:00')
  159. expect(event.end).toEqualMoment('2014-05-02T16:00:00')
  160. relatedEvent = getRelatedEvent()
  161. expect(relatedEvent.start).toEqualMoment('2014-05-10T16:00:00')
  162. expect(relatedEvent.end).toEqualMoment('2014-05-11T19:00:00')
  163. })
  164. })
  165. describe('when forceEventDuration is on', function() {
  166. it('should reset end based on defaultTimedEventDuration', function() {
  167. var event, relatedEvent
  168. initCalendar({
  169. forceEventDuration: true,
  170. defaultTimedEventDuration: { hours: 2 },
  171. events: [
  172. { id: '1', start: '2014-05-01T12:00:00', end: '2014-05-01T15:00:00', allDay: false, className: 'mainEvent' },
  173. { id: '1', start: '2014-05-10T16:00:00', end: '2014-05-10T19:00:00', allDay: false, className: 'relatedEvent' }
  174. ]
  175. })
  176. event = getMainEvent()
  177. event.start.add({ days: 1, hours: -12 })
  178. event.end = null
  179. currentCalendar.updateEvent(event)
  180. event = getMainEvent()
  181. expect(event.start).toEqualMoment('2014-05-02T00:00:00')
  182. expect(event.end).toEqualMoment('2014-05-02T02:00:00')
  183. relatedEvent = getRelatedEvent()
  184. expect(relatedEvent.start).toEqualMoment('2014-05-11T04:00:00')
  185. expect(relatedEvent.end).toEqualMoment('2014-05-11T06:00:00')
  186. })
  187. })
  188. describe('when forceEventDuration is turned on late', function() {
  189. it('should force a duration when updateEvent called', function() {
  190. var event
  191. initCalendar({
  192. defaultTimedEventDuration: { hours: 1 },
  193. events: [
  194. { id: '1', start: '2014-05-01T12:00:00', allDay: false, className: 'mainEvent' }
  195. ]
  196. })
  197. event = getMainEvent()
  198. expect(event.start).toEqualMoment('2014-05-01T12:00:00')
  199. expect(event.end).toBeNull()
  200. currentCalendar.option({
  201. forceEventDuration: true
  202. })
  203. // should stay the same
  204. event = getMainEvent()
  205. expect(event.start).toEqualMoment('2014-05-01T12:00:00')
  206. expect(event.end).toBeNull()
  207. event.start.add({ days: 1, hours: -12 })
  208. currentCalendar.updateEvent(event)
  209. // should generate an end
  210. event = getMainEvent()
  211. expect(event.start).toEqualMoment('2014-05-02T00:00:00')
  212. expect(event.end).toEqualMoment('2014-05-02T01:00:00')
  213. })
  214. })
  215. })
  216. describe('when a related event has an end', function() {
  217. it('should move the end by the delta', function() {
  218. var event, relatedEvent
  219. initCalendar({
  220. events: [
  221. { id: '1', start: '2014-05-01T12:00:00', end: '2014-05-01T14:00:00', allDay: false, className: 'mainEvent' },
  222. { id: '1', start: '2014-05-10T16:00:00', end: '2014-05-10T19:00:00', allDay: false, className: 'relatedEvent' }
  223. ]
  224. })
  225. event = getMainEvent()
  226. event.end.add({ days: 1, hours: 1 })
  227. currentCalendar.updateEvent(event)
  228. event = getMainEvent()
  229. expect(event.start).toEqualMoment('2014-05-01T12:00:00')
  230. expect(event.end).toEqualMoment('2014-05-02T15:00:00')
  231. relatedEvent = getRelatedEvent()
  232. expect(relatedEvent.start).toEqualMoment('2014-05-10T16:00:00')
  233. expect(relatedEvent.end).toEqualMoment('2014-05-11T20:00:00')
  234. })
  235. })
  236. })
  237. describe('when moving an all-day event\'s start and end', function() {
  238. it('should move the start and end of related events', function() {
  239. var event, relatedEvent
  240. initCalendar({
  241. events: [
  242. { id: '1', start: '2014-05-01', end: '2014-05-03', allDay: true, className: 'mainEvent' },
  243. { id: '1', start: '2014-05-10', end: '2014-05-13', allDay: true, className: 'relatedEvent' }
  244. ]
  245. })
  246. event = getMainEvent()
  247. event.start.add(2, 'days')
  248. event.end.add(3, 'day')
  249. currentCalendar.updateEvent(event)
  250. event = getMainEvent()
  251. expect(event.start).toEqualMoment('2014-05-03')
  252. expect(event.end).toEqualMoment('2014-05-06')
  253. relatedEvent = getRelatedEvent()
  254. expect(relatedEvent.start).toEqualMoment('2014-05-12')
  255. expect(relatedEvent.end).toEqualMoment('2014-05-16')
  256. })
  257. })
  258. describe('when moving a timed event\'s start and end', function() {
  259. it('should move the start and end of related events', function() {
  260. var event, relatedEvent
  261. initCalendar({
  262. events: [
  263. { id: '1', start: '2014-05-01T06:00:00', end: '2014-05-03T06:00:00', allDay: false, className: 'mainEvent' },
  264. { id: '1', start: '2014-05-10T06:00:00', end: '2014-05-13T06:00:00', allDay: false, className: 'relatedEvent' }
  265. ]
  266. })
  267. event = getMainEvent()
  268. event.start.add({ days: 2, hours: 1 })
  269. event.end.add({ days: 3, hours: 2 })
  270. currentCalendar.updateEvent(event)
  271. event = getMainEvent()
  272. expect(event.start).toEqualMoment('2014-05-03T07:00:00')
  273. expect(event.end).toEqualMoment('2014-05-06T08:00:00')
  274. relatedEvent = getRelatedEvent()
  275. expect(relatedEvent.start).toEqualMoment('2014-05-12T07:00:00')
  276. expect(relatedEvent.end).toEqualMoment('2014-05-16T08:00:00')
  277. })
  278. })
  279. describe('when giving a time to an all-day event\'s start', function() {
  280. it('should erase the start\'s time and keep the event all-day', function() {
  281. var event, relatedEvent
  282. initCalendar({
  283. events: [
  284. { id: '1', start: '2014-05-01', end: '2014-05-03', allDay: true, className: 'mainEvent' },
  285. { id: '1', start: '2014-05-10', end: '2014-05-13', allDay: true, className: 'relatedEvent' }
  286. ]
  287. })
  288. event = getMainEvent()
  289. event.start.time('18:00')
  290. currentCalendar.updateEvent(event)
  291. event = getMainEvent()
  292. expect(event.allDay).toEqual(true)
  293. expect(event.start).toEqualMoment('2014-05-01')
  294. expect(event.end).toEqualMoment('2014-05-03')
  295. relatedEvent = getRelatedEvent()
  296. expect(relatedEvent.allDay).toEqual(true)
  297. expect(relatedEvent.start).toEqualMoment('2014-05-10')
  298. expect(relatedEvent.end).toEqualMoment('2014-05-13')
  299. })
  300. })
  301. // issue 2194
  302. describe('when accidentally giving a time to an all-day event with moment()', function() {
  303. it('should erase the start and end\'s times and keep the event all-day', function() {
  304. var event
  305. initCalendar({
  306. events: [
  307. { id: '1', start: '2014-05-01', end: '2014-05-03', allDay: true, className: 'mainEvent' }
  308. ]
  309. })
  310. event = getMainEvent()
  311. event.start = moment('2014-05-01') // won't have an ambig time
  312. event.end = moment('2014-05-03') // "
  313. currentCalendar.updateEvent(event)
  314. event = getMainEvent()
  315. expect(event.allDay).toEqual(true)
  316. expect(event.start).toEqualMoment('2014-05-01')
  317. expect(event.end).toEqualMoment('2014-05-03')
  318. })
  319. })
  320. describe('when changing an event from all-day to timed', function() {
  321. describe('when the event\'s dates remain all-day', function() {
  322. it('should make the event and related events allDay=false and 00:00', function() {
  323. var event, relatedEvent
  324. initCalendar({
  325. events: [
  326. { id: '1', start: '2014-05-01', end: '2014-05-03', allDay: true, className: 'mainEvent' },
  327. { id: '1', start: '2014-05-10', end: '2014-05-13', allDay: true, className: 'relatedEvent' }
  328. ]
  329. })
  330. event = getMainEvent()
  331. event.allDay = false
  332. currentCalendar.updateEvent(event)
  333. event = getMainEvent()
  334. expect(event.allDay).toEqual(false)
  335. expect(event.start).toEqualMoment('2014-05-01T00:00:00')
  336. expect(event.end).toEqualMoment('2014-05-03T00:00:00')
  337. relatedEvent = getRelatedEvent()
  338. expect(relatedEvent.allDay).toEqual(false)
  339. expect(relatedEvent.start).toEqualMoment('2014-05-10T00:00:00')
  340. expect(relatedEvent.end).toEqualMoment('2014-05-13T00:00:00')
  341. })
  342. })
  343. describe('when the event\'s dates are set to a time', function() {
  344. it('should adjust the event and related event\'s allDay/start/end', function() {
  345. var event, relatedEvent
  346. initCalendar({
  347. events: [
  348. { id: '1', start: '2014-05-01', end: '2014-05-03', allDay: true, className: 'mainEvent' },
  349. { id: '1', start: '2014-05-10', end: '2014-05-13', allDay: true, className: 'relatedEvent' }
  350. ]
  351. })
  352. event = getMainEvent()
  353. event.allDay = false
  354. event.start.time('14:00')
  355. currentCalendar.updateEvent(event)
  356. event = getMainEvent()
  357. expect(event.allDay).toEqual(false)
  358. expect(event.start).toEqualMoment('2014-05-01T14:00:00')
  359. expect(event.end).toEqualMoment('2014-05-03T00:00:00')
  360. relatedEvent = getRelatedEvent()
  361. expect(relatedEvent.allDay).toEqual(false)
  362. expect(relatedEvent.start).toEqualMoment('2014-05-10T14:00:00')
  363. expect(relatedEvent.end).toEqualMoment('2014-05-13T00:00:00')
  364. })
  365. })
  366. describe('when the event\'s start is also moved', function() {
  367. it('should adjust the event and related event\'s allDay/start/end', function() {
  368. var event, relatedEvent
  369. initCalendar({
  370. events: [
  371. { id: '1', start: '2014-05-01', end: '2014-05-03', allDay: true, className: 'mainEvent' },
  372. { id: '1', start: '2014-05-10', end: '2014-05-13', allDay: true, className: 'relatedEvent' }
  373. ]
  374. })
  375. event = getMainEvent()
  376. event.allDay = false
  377. event.start.add(1, 'days')
  378. currentCalendar.updateEvent(event)
  379. event = getMainEvent()
  380. expect(event.allDay).toEqual(false)
  381. expect(event.start).toEqualMoment('2014-05-02T00:00:00')
  382. expect(event.end).toEqualMoment('2014-05-03T00:00:00')
  383. relatedEvent = getRelatedEvent()
  384. expect(relatedEvent.allDay).toEqual(false)
  385. expect(relatedEvent.start).toEqualMoment('2014-05-11T00:00:00')
  386. expect(relatedEvent.end).toEqualMoment('2014-05-13T00:00:00')
  387. })
  388. })
  389. })
  390. describe('when changing an event from timed to all-day', function() {
  391. it('should adjust the event and related event\'s allDay/start/end', function() {
  392. var event, relatedEvent
  393. initCalendar({
  394. events: [
  395. { id: '1', start: '2014-05-01T06:00:00', end: '2014-05-03T06:00:00', allDay: false, className: 'mainEvent' },
  396. { id: '1', start: '2014-05-10T06:00:00', end: '2014-05-13T06:00:00', allDay: false, className: 'relatedEvent' }
  397. ]
  398. })
  399. event = getMainEvent()
  400. event.allDay = true
  401. currentCalendar.updateEvent(event)
  402. event = getMainEvent()
  403. expect(event.allDay).toEqual(true)
  404. expect(event.start).toEqualMoment('2014-05-01')
  405. expect(event.end).toEqualMoment('2014-05-03')
  406. relatedEvent = getRelatedEvent()
  407. expect(relatedEvent.allDay).toEqual(true)
  408. expect(relatedEvent.start).toEqualMoment('2014-05-10')
  409. expect(relatedEvent.end).toEqualMoment('2014-05-13')
  410. })
  411. it('should adjust the event and related event\'s allDay/start/end and account for a new start', function() {
  412. var event, relatedEvent
  413. initCalendar({
  414. events: [
  415. { id: '1', start: '2014-05-01T06:00:00', end: '2014-05-03T06:00:00', allDay: false, className: 'mainEvent' },
  416. { id: '1', start: '2014-05-10T06:00:00', end: '2014-05-13T06:00:00', allDay: false, className: 'relatedEvent' }
  417. ]
  418. })
  419. event = getMainEvent()
  420. event.allDay = true
  421. event.start.add(1, 'days')
  422. currentCalendar.updateEvent(event)
  423. event = getMainEvent()
  424. expect(event.allDay).toEqual(true)
  425. expect(event.start).toEqualMoment('2014-05-02')
  426. expect(event.end).toEqualMoment('2014-05-03')
  427. relatedEvent = getRelatedEvent()
  428. expect(relatedEvent.allDay).toEqual(true)
  429. expect(relatedEvent.start).toEqualMoment('2014-05-11')
  430. expect(relatedEvent.end).toEqualMoment('2014-05-13')
  431. })
  432. })
  433. it('should accept moments that have unnormalized start/end', function() {
  434. var event, relatedEvent
  435. initCalendar({
  436. events: [
  437. { id: '1', start: '2014-05-01T06:00:00', end: '2014-05-03T06:00:00', allDay: false, className: 'mainEvent' },
  438. { id: '1', start: '2014-05-10T06:00:00', end: '2014-05-13T06:00:00', allDay: false, className: 'relatedEvent' }
  439. ]
  440. })
  441. event = getMainEvent()
  442. event.start = '2014-05-02T06:00:00' // move by 1 day
  443. event.end = '2014-05-05T06:00:00' // increase duration by 1 day
  444. currentCalendar.updateEvent(event)
  445. event = getMainEvent()
  446. expect(event.allDay).toEqual(false)
  447. expect(moment.isMoment(event.start)).toEqual(true)
  448. expect(event.start).toEqualMoment('2014-05-02T06:00:00')
  449. expect(moment.isMoment(event.end)).toEqual(true)
  450. expect(event.end).toEqualMoment('2014-05-05T06:00:00')
  451. relatedEvent = getRelatedEvent()
  452. expect(relatedEvent.allDay).toEqual(false)
  453. expect(moment.isMoment(relatedEvent.start)).toEqual(true)
  454. expect(relatedEvent.start).toEqualMoment('2014-05-11T06:00:00')
  455. expect(moment.isMoment(relatedEvent.end)).toEqual(true)
  456. expect(relatedEvent.end).toEqualMoment('2014-05-15T06:00:00')
  457. })
  458. it('should copy color-related properties to related events', function() {
  459. var event, relatedEvent
  460. initCalendar({
  461. events: [
  462. { id: '1', start: '2014-05-01', end: '2014-05-03', allDay: true, className: 'mainEvent' },
  463. { id: '1', start: '2014-05-10', end: '2014-05-13', allDay: true, className: 'relatedEvent' }
  464. ]
  465. })
  466. event = getMainEvent()
  467. event.color = 'red'
  468. currentCalendar.updateEvent(event)
  469. relatedEvent = getRelatedEvent()
  470. expect(relatedEvent.color).toBe('red')
  471. })
  472. it('should copy non-standard properties to related events', function() {
  473. var event, relatedEvent
  474. var specialObj = {}
  475. initCalendar({
  476. events: [
  477. { id: '1', start: '2014-05-01', end: '2014-05-03', allDay: true, className: 'mainEvent' },
  478. { id: '1', start: '2014-05-10', end: '2014-05-13', allDay: true, className: 'relatedEvent' }
  479. ]
  480. })
  481. event = getMainEvent()
  482. event.someForeignKey = '123'
  483. event.myObj = specialObj
  484. currentCalendar.updateEvent(event)
  485. relatedEvent = getRelatedEvent()
  486. expect(relatedEvent.someForeignKey).toBe('123')
  487. expect(relatedEvent.myObj).toBe(specialObj)
  488. })
  489. function whenMovingStart(should) {
  490. describe('when moving an timed event\'s start', function() {
  491. beforeEach(function() {
  492. var event
  493. initCalendar({
  494. events: [
  495. { id: '1', start: '2014-05-01T06:00:00+05:00', end: '2014-05-03T06:00:00+05:00', allDay: false, className: 'mainEvent' },
  496. { id: '1', start: '2014-05-11T06:00:00+05:00', end: '2014-05-13T06:00:00+05:00', allDay: false, className: 'relatedEvent' }
  497. ]
  498. })
  499. event = getMainEvent()
  500. event.start.add(2, 'hours')
  501. currentCalendar.updateEvent(event)
  502. })
  503. should()
  504. })
  505. }
  506. function whenMovingEnd(should) {
  507. describe('when moving a timed event\'s end', function() {
  508. beforeEach(function() {
  509. var event
  510. initCalendar({
  511. events: [
  512. { id: '1', start: '2014-05-01T06:00:00+05:00', end: '2014-05-03T06:00:00+05:00', allDay: false, className: 'mainEvent' },
  513. { id: '1', start: '2014-05-11T06:00:00+05:00', end: '2014-05-13T06:00:00+05:00', allDay: false, className: 'relatedEvent' }
  514. ]
  515. })
  516. event = getMainEvent()
  517. event.end.add(2, 'hours')
  518. currentCalendar.updateEvent(event)
  519. })
  520. should()
  521. })
  522. }
  523. function whenMovingToTimed(should) {
  524. describe('when moving an all-day event to timed', function() {
  525. beforeEach(function() {
  526. var event
  527. initCalendar({
  528. events: [
  529. { id: '1', start: '2014-05-01', end: '2014-05-03', allDay: true, className: 'mainEvent' },
  530. { id: '1', start: '2014-05-11', end: '2014-05-13', allDay: true, className: 'relatedEvent' }
  531. ]
  532. })
  533. event = getMainEvent()
  534. event.allDay = false
  535. currentCalendar.updateEvent(event)
  536. })
  537. should()
  538. })
  539. }
  540. function shouldBeAmbiguouslyZoned() {
  541. it('should make the events ambiguously zoned', function() {
  542. var event = getMainEvent()
  543. var relatedEvent = getRelatedEvent()
  544. expect(event.start.hasZone()).toEqual(false)
  545. if (event.end) {
  546. expect(event.end.hasZone()).toEqual(false)
  547. }
  548. expect(relatedEvent.start.hasZone()).toEqual(false)
  549. if (relatedEvent.end) {
  550. expect(relatedEvent.end.hasZone()).toEqual(false)
  551. }
  552. })
  553. }
  554. function shouldBeLocal() {
  555. it('should make the events local', function() {
  556. var event = getMainEvent()
  557. var relatedEvent = getRelatedEvent()
  558. expect(event.start.hasZone()).toEqual(true)
  559. expect(event.start._isUTC).toEqual(false)
  560. if (event.end) {
  561. expect(event.end.hasZone()).toEqual(true)
  562. expect(event.end._isUTC).toEqual(false)
  563. }
  564. expect(relatedEvent.start.hasZone()).toEqual(true)
  565. expect(relatedEvent.start._isUTC).toEqual(false)
  566. if (relatedEvent.end) {
  567. expect(relatedEvent.end.hasZone()).toEqual(true)
  568. expect(relatedEvent.end._isUTC).toEqual(false)
  569. }
  570. })
  571. }
  572. function shouldBeUTC() {
  573. it('should make the events UTC', function() {
  574. var event = getMainEvent()
  575. var relatedEvent = getRelatedEvent()
  576. expect(event.start.hasZone()).toEqual(true)
  577. expect(event.start._isUTC).toEqual(true)
  578. if (event.end) {
  579. expect(event.end.hasZone()).toEqual(true)
  580. expect(event.end._isUTC).toEqual(true)
  581. }
  582. expect(event.start.hasZone()).toEqual(true)
  583. expect(event.start._isUTC).toEqual(true)
  584. if (relatedEvent.end) {
  585. expect(relatedEvent.end.hasZone()).toEqual(true)
  586. expect(relatedEvent.end._isUTC).toEqual(true)
  587. }
  588. })
  589. }
  590. describe('when calendar has no timezone', function() {
  591. pushOptions({
  592. timezone: false
  593. })
  594. whenMovingStart(shouldBeAmbiguouslyZoned)
  595. whenMovingEnd(shouldBeAmbiguouslyZoned)
  596. whenMovingToTimed(shouldBeAmbiguouslyZoned)
  597. })
  598. describe('when calendar has a local timezone', function() {
  599. pushOptions({
  600. timezone: 'local'
  601. })
  602. whenMovingStart(shouldBeLocal)
  603. whenMovingEnd(shouldBeLocal)
  604. whenMovingToTimed(shouldBeLocal)
  605. })
  606. describe('when calendar has a UTC timezone', function() {
  607. pushOptions({
  608. timezone: 'UTC'
  609. })
  610. whenMovingStart(shouldBeUTC)
  611. whenMovingEnd(shouldBeUTC)
  612. whenMovingToTimed(shouldBeUTC)
  613. })
  614. describe('when calendar has a custom timezone', function() {
  615. pushOptions({
  616. timezone: 'America/Chicago'
  617. })
  618. whenMovingStart(shouldBeAmbiguouslyZoned)
  619. whenMovingEnd(shouldBeAmbiguouslyZoned)
  620. whenMovingToTimed(shouldBeAmbiguouslyZoned)
  621. })
  622. })