validRange.js 5.3 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. });