parser_crondate_formats.js 3.7 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145
  1. var luxon = require('luxon');
  2. var test = require('tap').test;
  3. var CronDate = require('../lib/date');
  4. test('parse cron date formats with local timezone', (t) => {
  5. // Some tests need the local offset to be compatible without invoking timezone management.
  6. // Local offset is dependent on what the system being tested on is
  7. var offset = new Date().getTimezoneOffset();
  8. var offsetHours = Math.abs(Math.floor(offset/60));
  9. var offsetMinutes = offset % 60;
  10. var offsetSign = offset < 0 ? '-' : '+';
  11. var expectedTime = new Date(2021, 0, 4, 10, 0, 0).toString();
  12. test('undefined date', (t) => {
  13. const realDate = new Date();
  14. var d = new CronDate();
  15. t.equal(d.toDate().toString(), realDate.toString());
  16. t.end();
  17. });
  18. test('JS Date', (t) => {
  19. var d = new CronDate(new Date(2021, 0, 4, 10, 0, 0));
  20. t.equal(d.toDate().toString(), expectedTime);
  21. t.end();
  22. });
  23. test('ISO 8601', (t) => {
  24. var d = new CronDate('2021-01-04T10:00:00');
  25. t.equal(d.toDate().toString(), expectedTime);
  26. t.end();
  27. });
  28. test('ISO 8601 date', (t) => {
  29. var d = new CronDate('2021-01-04');
  30. var expectedTime = new Date(2021, 0, 4, 0, 0, 0).toString();
  31. t.equal(d.toDate().toString(), expectedTime);
  32. t.end();
  33. });
  34. test('RFC2822', (t) => {
  35. var offsetString = offsetSign + String(offsetHours).padStart(2, 0) + String(offsetMinutes).padStart(2, 0);
  36. var d = new CronDate('Mon, 4 Jan 2021 10:00:00 ' + offsetString);
  37. t.equal(d.toDate().toString(), expectedTime);
  38. t.end();
  39. });
  40. test('RFC2822-like without timezone offset', (t) => {
  41. var d = new CronDate('Mon, 4 Jan 2021 10:00:00');
  42. t.equal(d.toDate().toString(), expectedTime);
  43. t.end();
  44. });
  45. test('SQL', (t) => {
  46. var d = new CronDate('2021-01-04 10:00:00');
  47. t.equal(d.toDate().toString(), expectedTime);
  48. t.end();
  49. });
  50. test('milliseconds', (t) => {
  51. var d = new CronDate(new Date('2021-01-04 10:00:00').valueOf());
  52. t.equal(d.toDate().toString(), expectedTime);
  53. t.end();
  54. });
  55. test('CronDate', (t) => {
  56. var date = new CronDate('Mon, 4 Jan 2021 10:00:00');
  57. var d = new CronDate(date);
  58. t.equal(d.toDate().toString(), expectedTime);
  59. t.end();
  60. });
  61. test('invalid', (t) => {
  62. t.throws(() => {
  63. var d = new CronDate('2021-01-4 10:00:00');
  64. });
  65. t.end();
  66. });
  67. t.end();
  68. });
  69. test('parse cron date formats with another timezone', (t) => {
  70. test('ISO 8601 without offset', (t) => {
  71. // implies format already in timezone
  72. var d = new CronDate('2021-01-04T10:00:00', 'Europe/Athens');
  73. t.equal(d.toISOString(), '2021-01-04T08:00:00.000Z');
  74. t.end();
  75. });
  76. test('ISO 8601 with non-local offset', (t) => {
  77. var d = new CronDate('2021-01-04T10:00:00+01:00', 'Europe/Athens');
  78. t.equal(d.toISOString(), '2021-01-04T09:00:00.000Z');
  79. t.end();
  80. });
  81. test('RFC2822 with non-local offset', (t) => {
  82. var d = new CronDate('Mon, 4 Jan 2021 10:00:00 +0100', 'Europe/Athens');
  83. t.equal(d.toISOString(), '2021-01-04T09:00:00.000Z');
  84. t.end();
  85. });
  86. test('milliseconds', (t) => {
  87. var date = luxon.DateTime.fromISO('2021-01-04T11:00:00.000+02:00').valueOf();
  88. var d = new CronDate(date, 'Europe/Athens');
  89. t.equal(d.toISOString(), '2021-01-04T09:00:00.000Z');
  90. t.end();
  91. });
  92. test('CronDate with same timezone', (t) => {
  93. var date = new CronDate('Mon, 4 Jan 2021 10:00:00', 'Europe/Athens');
  94. var d = new CronDate(date);
  95. t.equal(d.toISOString(), '2021-01-04T08:00:00.000Z');
  96. t.end();
  97. });
  98. test('CronDate with different timezone', (t) => {
  99. var date = new CronDate('Mon, 4 Jan 2021 10:00:00', 'America/New_York');
  100. var d = new CronDate(date, 'Europe/Athens');
  101. t.equal(d.toISOString(), '2021-01-04T15:00:00.000Z');
  102. t.end();
  103. });
  104. t.end('crondate input should');
  105. });