changeView.js 3.3 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115
  1. import { expectActiveRange } from '../view-dates/ViewDateUtils'
  2. import * as TimeGridRenderUtils from '../view-render/TimeGridRenderUtils'
  3. describe('changeView', function() {
  4. pushOptions({
  5. defaultDate: '2017-06-08',
  6. defaultView: 'month'
  7. })
  8. it('can change views', function() {
  9. initCalendar()
  10. currentCalendar.changeView('agendaWeek')
  11. expectActiveRange('2017-06-04', '2017-06-11')
  12. })
  13. it('can change views and navigate date', function() {
  14. initCalendar()
  15. currentCalendar.changeView('agendaDay', '2017-06-26')
  16. expectActiveRange('2017-06-26', '2017-06-27')
  17. })
  18. it('can change views and change activeRange', function() {
  19. initCalendar()
  20. currentCalendar.changeView('agenda', {
  21. start: '2017-07-04',
  22. end: '2017-07-08'
  23. })
  24. expectActiveRange('2017-07-04', '2017-07-08')
  25. })
  26. describe('when switching away from view, then back', function() {
  27. // serves as a smoke test too
  28. it('correctly renders original view again', function(done) {
  29. var renderCalls = 0
  30. initCalendar({
  31. defaultView: 'month',
  32. eventAfterAllRender: function(view) {
  33. renderCalls++
  34. switch (renderCalls) {
  35. case 1:
  36. expect(view.type).toBe('month')
  37. checkViewIntegrity()
  38. currentCalendar.changeView('agendaWeek')
  39. break
  40. case 2:
  41. expect(view.type).toBe('agendaWeek')
  42. checkViewIntegrity()
  43. expect(TimeGridRenderUtils.isStructureValid()).toBe(true)
  44. currentCalendar.changeView('basicWeek')
  45. break
  46. case 3:
  47. expect(view.type).toBe('basicWeek')
  48. checkViewIntegrity()
  49. currentCalendar.changeView('listWeek')
  50. break
  51. case 4:
  52. expect(view.type).toBe('listWeek')
  53. checkViewIntegrity()
  54. currentCalendar.changeView('month')
  55. break
  56. case 5:
  57. expect(view.type).toBe('month')
  58. checkViewIntegrity()
  59. done()
  60. break
  61. }
  62. }
  63. })
  64. })
  65. })
  66. // https://github.com/fullcalendar/fullcalendar/issues/3689
  67. it('can when switching to/from view while loading events', function(done) {
  68. initCalendar({
  69. header: {
  70. left: 'title basicDay agendaDay'
  71. },
  72. defaultView: 'agendaDay',
  73. now: '2017-06-08T01:00:00',
  74. events: function(start, end, timezone, callback) {
  75. setTimeout(function() {
  76. callback([ // will run after the first view switch but before the second
  77. { start: '2017-06-08T01:00:00' } // needs to be timed to cause the JS error
  78. ])
  79. }, 100)
  80. }
  81. })
  82. currentCalendar.changeView('basicDay')
  83. checkViewIntegrity()
  84. expect(currentCalendar.getView().type).toBe('basicDay')
  85. setTimeout(function() {
  86. currentCalendar.changeView('agendaDay')
  87. checkViewIntegrity()
  88. expect(currentCalendar.getView().type).toBe('agendaDay')
  89. done()
  90. }, 200)
  91. })
  92. function checkViewIntegrity() {
  93. var $el = $('.fc-view')
  94. expect($el).toBeInDOM()
  95. expect($el.children().length).toBeGreaterThan(0)
  96. expect($el.text()).toBeTruthy()
  97. expect(
  98. $el.find('[data-date]').length +
  99. $el.find('.fc-list-empty').length
  100. ).toBeGreaterThan(0)
  101. }
  102. })