validRange.js 5.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175
  1. import { expectActiveRange, expectRenderRange } from './ViewDateUtils'
  2. describe('validRange', function() {
  3. pushOptions({
  4. defaultDate: '2017-06-08'
  5. })
  6. describe('when one week view', function() { // a view that has date-alignment by default
  7. pushOptions({
  8. defaultView: 'agendaWeek' // default range = 2017-06-04 - 2017-06-11
  9. })
  10. describe('when default range is partially before validRange', function() {
  11. pushOptions({
  12. validRange: { start: '2017-06-06' }
  13. })
  14. it('allows full renderRange but restricts activeRange', function() {
  15. initCalendar()
  16. expectRenderRange('2017-06-04', '2017-06-11')
  17. expectActiveRange('2017-06-06', '2017-06-11')
  18. })
  19. })
  20. describe('when default range is partially after validRange', function() {
  21. pushOptions({
  22. validRange: { end: '2017-06-05' }
  23. })
  24. it('allows full renderRange but restricts activeRange', function() {
  25. initCalendar()
  26. expectRenderRange('2017-06-04', '2017-06-11')
  27. expectActiveRange('2017-06-04', '2017-06-05')
  28. })
  29. })
  30. describe('when default range is completely before validRange', function() {
  31. pushOptions({
  32. validRange: { start: '2017-06-14' } // a Wednesday
  33. })
  34. it('initializes at earliest partially visible week', function() {
  35. initCalendar()
  36. expectRenderRange('2017-06-11', '2017-06-18')
  37. expectActiveRange('2017-06-14', '2017-06-18')
  38. })
  39. })
  40. describe('when default range is completely before validRange', function() {
  41. pushOptions({
  42. validRange: { end: '2017-05-24' } // a Wednesday
  43. })
  44. it('initializes at latest partially visible week', function() {
  45. initCalendar()
  46. expectRenderRange('2017-05-21', '2017-05-28')
  47. expectActiveRange('2017-05-21', '2017-05-24')
  48. })
  49. })
  50. describe('when validRange is a function', function() {
  51. var nowInput = '2017-06-09T06:00:00'
  52. it('receives the nowDate, timezoneless', function() {
  53. var validRangeSpy = spyOnCalendarCallback('validRange', function(date) {
  54. expect(moment.isMoment(date)).toBe(true)
  55. expect(date).toEqualMoment(nowInput)
  56. })
  57. initCalendar({
  58. now: nowInput
  59. })
  60. expect(validRangeSpy).toHaveBeenCalled()
  61. })
  62. /* getNow() always returns ambig zone for some reason. intentional?
  63. xit('receives the nowDate, with UTC timezone', function() {
  64. var validRangeSpy = spyOnCalendarCallback('validRange', function(date) {
  65. expect(date).toEqualMoment(nowInput + 'Z');
  66. });
  67. initCalendar({
  68. timezone: 'UTC',
  69. now: nowInput
  70. });
  71. expect(validRangeSpy).toHaveBeenCalled();
  72. }); */
  73. it('can return a range object with strings', function() {
  74. var validRangeSpy = spyOnCalendarCallback('validRange', function() {
  75. return { start: '2017-06-06' }
  76. })
  77. initCalendar()
  78. expect(validRangeSpy).toHaveBeenCalled()
  79. expectRenderRange('2017-06-04', '2017-06-11')
  80. expectActiveRange('2017-06-06', '2017-06-11')
  81. })
  82. it('can return a range object with moments', function() {
  83. var validRangeSpy = spyOnCalendarCallback('validRange', function() {
  84. return { start: $.fullCalendar.moment.parseZone('2017-06-06') }
  85. })
  86. initCalendar()
  87. expect(validRangeSpy).toHaveBeenCalled()
  88. expectRenderRange('2017-06-04', '2017-06-11')
  89. expectActiveRange('2017-06-06', '2017-06-11')
  90. })
  91. it('does not cause side effects when given date is mutated', function() {
  92. initCalendar({
  93. now: nowInput,
  94. validRange: function(nowDate) {
  95. nowDate.add(2, 'years')
  96. }
  97. })
  98. expect(currentCalendar.getNow().year()).toBe(2017)
  99. })
  100. })
  101. })
  102. describe('when a three-day view', function() { // a view with no alignment
  103. pushOptions({
  104. defaultView: 'agenda',
  105. duration: { days: 3 }
  106. })
  107. describe('when default range is completely before of validRange', function() {
  108. pushOptions({
  109. validRange: { start: '2017-06-14' }
  110. })
  111. it('renders earliest three valid days', function() {
  112. initCalendar()
  113. expectRenderRange('2017-06-14', '2017-06-17')
  114. expectActiveRange('2017-06-14', '2017-06-17')
  115. })
  116. })
  117. describe('when default range is completely after validRange', function() {
  118. pushOptions({
  119. validRange: { end: '2017-05-31' }
  120. })
  121. it('renders latest possible valid day and two invalid days', function() {
  122. initCalendar()
  123. expectRenderRange('2017-05-30', '2017-06-02')
  124. expectActiveRange('2017-05-30', '2017-05-31')
  125. })
  126. })
  127. })
  128. describe('when hiddenDays causes no days to be active', function() {
  129. pushOptions({
  130. defaultView: 'agendaWeek',
  131. defaultDate: '2017-10-04',
  132. hiddenDays: [ 6 ], // Sunday, last day within natural week range
  133. validRange: {
  134. start: '2036-05-03',
  135. end: '2036-06-01'
  136. }
  137. })
  138. it('pushes view to nearest valid range', function() {
  139. initCalendar()
  140. expectRenderRange('2036-05-04', '2036-05-10')
  141. expectActiveRange('2036-05-04', '2036-05-10')
  142. })
  143. })
  144. })