refetchEvents.js 4.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136
  1. describe('refetchEvents', function() {
  2. // there IS a similar test in automated-better, but does month view
  3. describe('when agenda events are rerendered', function() {
  4. it('keeps scroll after refetchEvents', function(done) {
  5. var renderCalls = 0
  6. initCalendar({
  7. now: '2015-08-07',
  8. scrollTime: '00:00',
  9. height: 400, // makes this test more consistent across viewports
  10. defaultView: 'agendaDay',
  11. events: function(start, end, timezone, callback) {
  12. setTimeout(function() {
  13. callback([
  14. { id: '1', resourceId: 'b', start: '2015-08-07T02:00:00', end: '2015-08-07T07:00:00', title: 'event 1' },
  15. { id: '2', resourceId: 'c', start: '2015-08-07T05:00:00', end: '2015-08-07T22:00:00', title: 'event 2' },
  16. { id: '3', resourceId: 'd', start: '2015-08-06', end: '2015-08-08', title: 'event 3' },
  17. { id: '4', resourceId: 'e', start: '2015-08-07T03:00:00', end: '2015-08-07T08:00:00', title: 'event 4' },
  18. { id: '5', resourceId: 'f', start: '2015-08-07T00:30:00', end: '2015-08-07T02:30:00', title: 'event 5' }
  19. ])
  20. }, 100)
  21. },
  22. eventAfterAllRender: function() {
  23. var scrollEl = $('.fc-time-grid-container.fc-scroller')
  24. renderCalls++
  25. if (renderCalls === 1) {
  26. setTimeout(function() {
  27. scrollEl.scrollTop(100)
  28. setTimeout(function() {
  29. currentCalendar.refetchEvents()
  30. }, 100)
  31. }, 100)
  32. } else if (renderCalls === 2) {
  33. expect(scrollEl.scrollTop()).toBe(100)
  34. done()
  35. }
  36. }
  37. })
  38. })
  39. })
  40. describe('when there are multiple event sources', function() {
  41. var fetchCount // affects events created in createEventGenerator
  42. var eventSources
  43. pushOptions({
  44. now: '2015-08-07',
  45. defaultView: 'agendaWeek'
  46. })
  47. beforeEach(function() {
  48. fetchCount = 0
  49. eventSources = [
  50. {
  51. events: createEventGenerator(),
  52. color: 'green',
  53. id: 'source1'
  54. },
  55. {
  56. events: createEventGenerator(),
  57. color: 'blue',
  58. id: 'source2'
  59. },
  60. {
  61. events: createEventGenerator(),
  62. color: 'red',
  63. id: 'source3'
  64. }
  65. ]
  66. })
  67. describe('and all events are fetched synchronously', function() {
  68. it('all events are immediately updated', function(done) {
  69. initCalendar({ eventSources })
  70. fetchCount++
  71. currentCalendar.refetchEvents()
  72. expect($('.fetch0').length).toEqual(0)
  73. expect($('.fetch1').length).toEqual(3)
  74. done()
  75. })
  76. })
  77. describe('and one event source is asynchronous', function() {
  78. it('original events remain on the calendar until all events have been refetched', function(done) {
  79. // set a 100ms timeout on this event source
  80. eventSources[0].events = function(start, end, timezone, callback) {
  81. var events = [
  82. { id: '1',
  83. start: '2015-08-07T02:00:00',
  84. end: '2015-08-07T03:00:00',
  85. title: 'event A',
  86. className: 'fetch' + fetchCount
  87. }
  88. ]
  89. setTimeout(function() {
  90. callback(events)
  91. }, 100)
  92. }
  93. initCalendar({
  94. eventSources: eventSources,
  95. eventAfterAllRender: function() {
  96. fetchCount++
  97. if (fetchCount === 1) {
  98. // after the initial rendering of events, call refetchEvents
  99. currentCalendar.refetchEvents()
  100. expect($('.fetch0').length).toEqual(3) // original events still on the calendar
  101. expect($('.fetch1').length).toEqual(0) // new events not yet refetched
  102. } else if (fetchCount === 2) { // after refetch+rerender is over
  103. expect($('.fetch0').length).toEqual(0)
  104. expect($('.fetch1').length).toEqual(3)
  105. done()
  106. }
  107. }
  108. })
  109. })
  110. })
  111. // relies on fetchCount
  112. function createEventGenerator() {
  113. return function(start, end, timezone, callback) {
  114. var events = [
  115. {
  116. id: 1,
  117. start: '2015-08-07T02:00:00',
  118. end: '2015-08-07T03:00:00',
  119. title: 'event A',
  120. className: 'fetch' + fetchCount
  121. }
  122. ]
  123. callback(events)
  124. }
  125. }
  126. })
  127. })