| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231 |
- import moment from 'moment';
- import {
- dateTimeAsIso,
- dateTimeAsUS,
- dateTimeFromNow,
- Interval,
- toClock,
- toDuration,
- toDurationInMilliseconds,
- toDurationInSeconds,
- } from './dateTimeFormatters';
- describe('date time formats', () => {
- const epoch = 1505634997920;
- const utcTime = moment.utc(epoch);
- const browserTime = moment(epoch);
- it('should format as iso date', () => {
- const expected = browserTime.format('YYYY-MM-DD HH:mm:ss');
- const actual = dateTimeAsIso(epoch, 0, 0, false);
- expect(actual).toBe(expected);
- });
- it('should format as iso date (in UTC)', () => {
- const expected = utcTime.format('YYYY-MM-DD HH:mm:ss');
- const actual = dateTimeAsIso(epoch, 0, 0, true);
- expect(actual).toBe(expected);
- });
- it('should format as iso date and skip date when today', () => {
- const now = moment();
- const expected = now.format('HH:mm:ss');
- const actual = dateTimeAsIso(now.valueOf(), 0, 0, false);
- expect(actual).toBe(expected);
- });
- it('should format as iso date (in UTC) and skip date when today', () => {
- const now = moment.utc();
- const expected = now.format('HH:mm:ss');
- const actual = dateTimeAsIso(now.valueOf(), 0, 0, true);
- expect(actual).toBe(expected);
- });
- it('should format as US date', () => {
- const expected = browserTime.format('MM/DD/YYYY h:mm:ss a');
- const actual = dateTimeAsUS(epoch, 0, 0, false);
- expect(actual).toBe(expected);
- });
- it('should format as US date (in UTC)', () => {
- const expected = utcTime.format('MM/DD/YYYY h:mm:ss a');
- const actual = dateTimeAsUS(epoch, 0, 0, true);
- expect(actual).toBe(expected);
- });
- it('should format as US date and skip date when today', () => {
- const now = moment();
- const expected = now.format('h:mm:ss a');
- const actual = dateTimeAsUS(now.valueOf(), 0, 0, false);
- expect(actual).toBe(expected);
- });
- it('should format as US date (in UTC) and skip date when today', () => {
- const now = moment.utc();
- const expected = now.format('h:mm:ss a');
- const actual = dateTimeAsUS(now.valueOf(), 0, 0, true);
- expect(actual).toBe(expected);
- });
- it('should format as from now with days', () => {
- const daysAgo = moment().add(-7, 'd');
- const expected = '7 days ago';
- const actual = dateTimeFromNow(daysAgo.valueOf(), 0, 0, false);
- expect(actual).toBe(expected);
- });
- it('should format as from now with days (in UTC)', () => {
- const daysAgo = moment.utc().add(-7, 'd');
- const expected = '7 days ago';
- const actual = dateTimeFromNow(daysAgo.valueOf(), 0, 0, true);
- expect(actual).toBe(expected);
- });
- it('should format as from now with minutes', () => {
- const daysAgo = moment().add(-2, 'm');
- const expected = '2 minutes ago';
- const actual = dateTimeFromNow(daysAgo.valueOf(), 0, 0, false);
- expect(actual).toBe(expected);
- });
- it('should format as from now with minutes (in UTC)', () => {
- const daysAgo = moment.utc().add(-2, 'm');
- const expected = '2 minutes ago';
- const actual = dateTimeFromNow(daysAgo.valueOf(), 0, 0, true);
- expect(actual).toBe(expected);
- });
- });
- describe('duration', () => {
- it('0 milliseconds', () => {
- const str = toDurationInMilliseconds(0, 0);
- expect(str).toBe('0 milliseconds');
- });
- it('1 millisecond', () => {
- const str = toDurationInMilliseconds(1, 0);
- expect(str).toBe('1 millisecond');
- });
- it('-1 millisecond', () => {
- const str = toDurationInMilliseconds(-1, 0);
- expect(str).toBe('1 millisecond ago');
- });
- it('seconds', () => {
- const str = toDurationInSeconds(1, 0);
- expect(str).toBe('1 second');
- });
- it('minutes', () => {
- const str = toDuration(1, 0, Interval.Minute);
- expect(str).toBe('1 minute');
- });
- it('hours', () => {
- const str = toDuration(1, 0, Interval.Hour);
- expect(str).toBe('1 hour');
- });
- it('days', () => {
- const str = toDuration(1, 0, Interval.Day);
- expect(str).toBe('1 day');
- });
- it('weeks', () => {
- const str = toDuration(1, 0, Interval.Week);
- expect(str).toBe('1 week');
- });
- it('months', () => {
- const str = toDuration(1, 0, Interval.Month);
- expect(str).toBe('1 month');
- });
- it('years', () => {
- const str = toDuration(1, 0, Interval.Year);
- expect(str).toBe('1 year');
- });
- it('decimal days', () => {
- const str = toDuration(1.5, 2, Interval.Day);
- expect(str).toBe('1 day, 12 hours, 0 minutes');
- });
- it('decimal months', () => {
- const str = toDuration(1.5, 3, Interval.Month);
- expect(str).toBe('1 month, 2 weeks, 1 day, 0 hours');
- });
- it('no decimals', () => {
- const str = toDuration(38898367008, 0, Interval.Millisecond);
- expect(str).toBe('1 year');
- });
- it('1 decimal', () => {
- const str = toDuration(38898367008, 1, Interval.Millisecond);
- expect(str).toBe('1 year, 2 months');
- });
- it('too many decimals', () => {
- const str = toDuration(38898367008, 20, Interval.Millisecond);
- expect(str).toBe('1 year, 2 months, 3 weeks, 4 days, 5 hours, 6 minutes, 7 seconds, 8 milliseconds');
- });
- it('floating point error', () => {
- const str = toDuration(36993906007, 8, Interval.Millisecond);
- expect(str).toBe('1 year, 2 months, 0 weeks, 3 days, 4 hours, 5 minutes, 6 seconds, 7 milliseconds');
- });
- });
- describe('clock', () => {
- it('size less than 1 second', () => {
- const str = toClock(999, 0);
- expect(str).toBe('999ms');
- });
- describe('size less than 1 minute', () => {
- it('default', () => {
- const str = toClock(59999);
- expect(str).toBe('59s:999ms');
- });
- it('decimals equals 0', () => {
- const str = toClock(59999, 0);
- expect(str).toBe('59s');
- });
- });
- describe('size less than 1 hour', () => {
- it('default', () => {
- const str = toClock(3599999);
- expect(str).toBe('59m:59s:999ms');
- });
- it('decimals equals 0', () => {
- const str = toClock(3599999, 0);
- expect(str).toBe('59m');
- });
- it('decimals equals 1', () => {
- const str = toClock(3599999, 1);
- expect(str).toBe('59m:59s');
- });
- });
- describe('size greater than or equal 1 hour', () => {
- it('default', () => {
- const str = toClock(7199999);
- expect(str).toBe('01h:59m:59s:999ms');
- });
- it('decimals equals 0', () => {
- const str = toClock(7199999, 0);
- expect(str).toBe('01h');
- });
- it('decimals equals 1', () => {
- const str = toClock(7199999, 1);
- expect(str).toBe('01h:59m');
- });
- it('decimals equals 2', () => {
- const str = toClock(7199999, 2);
- expect(str).toBe('01h:59m:59s');
- });
- });
- describe('size greater than or equal 1 day', () => {
- it('default', () => {
- const str = toClock(89999999);
- expect(str).toBe('24h:59m:59s:999ms');
- });
- it('decimals equals 0', () => {
- const str = toClock(89999999, 0);
- expect(str).toBe('24h');
- });
- it('decimals equals 1', () => {
- const str = toClock(89999999, 1);
- expect(str).toBe('24h:59m');
- });
- it('decimals equals 2', () => {
- const str = toClock(89999999, 2);
- expect(str).toBe('24h:59m:59s');
- });
- });
- });
|