validRange.js 4.5 KB

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