dateTimeFormatters.test.ts 7.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231
  1. import moment from 'moment';
  2. import {
  3. dateTimeAsIso,
  4. dateTimeAsUS,
  5. dateTimeFromNow,
  6. Interval,
  7. toClock,
  8. toDuration,
  9. toDurationInMilliseconds,
  10. toDurationInSeconds,
  11. } from './dateTimeFormatters';
  12. describe('date time formats', () => {
  13. const epoch = 1505634997920;
  14. const utcTime = moment.utc(epoch);
  15. const browserTime = moment(epoch);
  16. it('should format as iso date', () => {
  17. const expected = browserTime.format('YYYY-MM-DD HH:mm:ss');
  18. const actual = dateTimeAsIso(epoch, 0, 0, false);
  19. expect(actual).toBe(expected);
  20. });
  21. it('should format as iso date (in UTC)', () => {
  22. const expected = utcTime.format('YYYY-MM-DD HH:mm:ss');
  23. const actual = dateTimeAsIso(epoch, 0, 0, true);
  24. expect(actual).toBe(expected);
  25. });
  26. it('should format as iso date and skip date when today', () => {
  27. const now = moment();
  28. const expected = now.format('HH:mm:ss');
  29. const actual = dateTimeAsIso(now.valueOf(), 0, 0, false);
  30. expect(actual).toBe(expected);
  31. });
  32. it('should format as iso date (in UTC) and skip date when today', () => {
  33. const now = moment.utc();
  34. const expected = now.format('HH:mm:ss');
  35. const actual = dateTimeAsIso(now.valueOf(), 0, 0, true);
  36. expect(actual).toBe(expected);
  37. });
  38. it('should format as US date', () => {
  39. const expected = browserTime.format('MM/DD/YYYY h:mm:ss a');
  40. const actual = dateTimeAsUS(epoch, 0, 0, false);
  41. expect(actual).toBe(expected);
  42. });
  43. it('should format as US date (in UTC)', () => {
  44. const expected = utcTime.format('MM/DD/YYYY h:mm:ss a');
  45. const actual = dateTimeAsUS(epoch, 0, 0, true);
  46. expect(actual).toBe(expected);
  47. });
  48. it('should format as US date and skip date when today', () => {
  49. const now = moment();
  50. const expected = now.format('h:mm:ss a');
  51. const actual = dateTimeAsUS(now.valueOf(), 0, 0, false);
  52. expect(actual).toBe(expected);
  53. });
  54. it('should format as US date (in UTC) and skip date when today', () => {
  55. const now = moment.utc();
  56. const expected = now.format('h:mm:ss a');
  57. const actual = dateTimeAsUS(now.valueOf(), 0, 0, true);
  58. expect(actual).toBe(expected);
  59. });
  60. it('should format as from now with days', () => {
  61. const daysAgo = moment().add(-7, 'd');
  62. const expected = '7 days ago';
  63. const actual = dateTimeFromNow(daysAgo.valueOf(), 0, 0, false);
  64. expect(actual).toBe(expected);
  65. });
  66. it('should format as from now with days (in UTC)', () => {
  67. const daysAgo = moment.utc().add(-7, 'd');
  68. const expected = '7 days ago';
  69. const actual = dateTimeFromNow(daysAgo.valueOf(), 0, 0, true);
  70. expect(actual).toBe(expected);
  71. });
  72. it('should format as from now with minutes', () => {
  73. const daysAgo = moment().add(-2, 'm');
  74. const expected = '2 minutes ago';
  75. const actual = dateTimeFromNow(daysAgo.valueOf(), 0, 0, false);
  76. expect(actual).toBe(expected);
  77. });
  78. it('should format as from now with minutes (in UTC)', () => {
  79. const daysAgo = moment.utc().add(-2, 'm');
  80. const expected = '2 minutes ago';
  81. const actual = dateTimeFromNow(daysAgo.valueOf(), 0, 0, true);
  82. expect(actual).toBe(expected);
  83. });
  84. });
  85. describe('duration', () => {
  86. it('0 milliseconds', () => {
  87. const str = toDurationInMilliseconds(0, 0);
  88. expect(str).toBe('0 milliseconds');
  89. });
  90. it('1 millisecond', () => {
  91. const str = toDurationInMilliseconds(1, 0);
  92. expect(str).toBe('1 millisecond');
  93. });
  94. it('-1 millisecond', () => {
  95. const str = toDurationInMilliseconds(-1, 0);
  96. expect(str).toBe('1 millisecond ago');
  97. });
  98. it('seconds', () => {
  99. const str = toDurationInSeconds(1, 0);
  100. expect(str).toBe('1 second');
  101. });
  102. it('minutes', () => {
  103. const str = toDuration(1, 0, Interval.Minute);
  104. expect(str).toBe('1 minute');
  105. });
  106. it('hours', () => {
  107. const str = toDuration(1, 0, Interval.Hour);
  108. expect(str).toBe('1 hour');
  109. });
  110. it('days', () => {
  111. const str = toDuration(1, 0, Interval.Day);
  112. expect(str).toBe('1 day');
  113. });
  114. it('weeks', () => {
  115. const str = toDuration(1, 0, Interval.Week);
  116. expect(str).toBe('1 week');
  117. });
  118. it('months', () => {
  119. const str = toDuration(1, 0, Interval.Month);
  120. expect(str).toBe('1 month');
  121. });
  122. it('years', () => {
  123. const str = toDuration(1, 0, Interval.Year);
  124. expect(str).toBe('1 year');
  125. });
  126. it('decimal days', () => {
  127. const str = toDuration(1.5, 2, Interval.Day);
  128. expect(str).toBe('1 day, 12 hours, 0 minutes');
  129. });
  130. it('decimal months', () => {
  131. const str = toDuration(1.5, 3, Interval.Month);
  132. expect(str).toBe('1 month, 2 weeks, 1 day, 0 hours');
  133. });
  134. it('no decimals', () => {
  135. const str = toDuration(38898367008, 0, Interval.Millisecond);
  136. expect(str).toBe('1 year');
  137. });
  138. it('1 decimal', () => {
  139. const str = toDuration(38898367008, 1, Interval.Millisecond);
  140. expect(str).toBe('1 year, 2 months');
  141. });
  142. it('too many decimals', () => {
  143. const str = toDuration(38898367008, 20, Interval.Millisecond);
  144. expect(str).toBe('1 year, 2 months, 3 weeks, 4 days, 5 hours, 6 minutes, 7 seconds, 8 milliseconds');
  145. });
  146. it('floating point error', () => {
  147. const str = toDuration(36993906007, 8, Interval.Millisecond);
  148. expect(str).toBe('1 year, 2 months, 0 weeks, 3 days, 4 hours, 5 minutes, 6 seconds, 7 milliseconds');
  149. });
  150. });
  151. describe('clock', () => {
  152. it('size less than 1 second', () => {
  153. const str = toClock(999, 0);
  154. expect(str).toBe('999ms');
  155. });
  156. describe('size less than 1 minute', () => {
  157. it('default', () => {
  158. const str = toClock(59999);
  159. expect(str).toBe('59s:999ms');
  160. });
  161. it('decimals equals 0', () => {
  162. const str = toClock(59999, 0);
  163. expect(str).toBe('59s');
  164. });
  165. });
  166. describe('size less than 1 hour', () => {
  167. it('default', () => {
  168. const str = toClock(3599999);
  169. expect(str).toBe('59m:59s:999ms');
  170. });
  171. it('decimals equals 0', () => {
  172. const str = toClock(3599999, 0);
  173. expect(str).toBe('59m');
  174. });
  175. it('decimals equals 1', () => {
  176. const str = toClock(3599999, 1);
  177. expect(str).toBe('59m:59s');
  178. });
  179. });
  180. describe('size greater than or equal 1 hour', () => {
  181. it('default', () => {
  182. const str = toClock(7199999);
  183. expect(str).toBe('01h:59m:59s:999ms');
  184. });
  185. it('decimals equals 0', () => {
  186. const str = toClock(7199999, 0);
  187. expect(str).toBe('01h');
  188. });
  189. it('decimals equals 1', () => {
  190. const str = toClock(7199999, 1);
  191. expect(str).toBe('01h:59m');
  192. });
  193. it('decimals equals 2', () => {
  194. const str = toClock(7199999, 2);
  195. expect(str).toBe('01h:59m:59s');
  196. });
  197. });
  198. describe('size greater than or equal 1 day', () => {
  199. it('default', () => {
  200. const str = toClock(89999999);
  201. expect(str).toBe('24h:59m:59s:999ms');
  202. });
  203. it('decimals equals 0', () => {
  204. const str = toClock(89999999, 0);
  205. expect(str).toBe('24h');
  206. });
  207. it('decimals equals 1', () => {
  208. const str = toClock(89999999, 1);
  209. expect(str).toBe('24h:59m');
  210. });
  211. it('decimals equals 2', () => {
  212. const str = toClock(89999999, 2);
  213. expect(str).toBe('24h:59m:59s');
  214. });
  215. });
  216. });