| /** |
| * @license |
| * Copyright 2020 Google LLC |
| * SPDX-License-Identifier: Apache-2.0 |
| */ |
| import * as sinon from 'sinon'; |
| import {Timestamp} from '../types/common'; |
| import '../test/common-test-setup'; |
| import { |
| isValidDate, |
| parseDate, |
| fromNow, |
| isWithinDay, |
| isWithinHalfYear, |
| formatDate, |
| wasYesterday, |
| } from './date-util'; |
| import {assert} from '@open-wc/testing'; |
| |
| suite('date-util tests', () => { |
| suite('parseDate', () => { |
| test('parseDate server date', () => { |
| const parsed = parseDate('2015-09-15 20:34:00.000000000' as Timestamp); |
| assert.equal('2015-09-15T20:34:00.000Z', parsed.toISOString()); |
| }); |
| }); |
| |
| suite('isValidDate', () => { |
| test('date is valid', () => { |
| assert.isTrue(isValidDate(new Date())); |
| }); |
| test('broken date is invalid', () => { |
| assert.isFalse(isValidDate(new Date('xxx'))); |
| }); |
| }); |
| |
| suite('fromNow', () => { |
| test('test all variants', () => { |
| const fakeNow = new Date('May 08 2020 12:00:00'); |
| sinon.useFakeTimers(fakeNow.getTime()); |
| assert.equal('just now', fromNow(new Date('May 08 2020 11:59:30'))); |
| assert.equal('1 minute ago', fromNow(new Date('May 08 2020 11:59:00'))); |
| assert.equal('5 minutes ago', fromNow(new Date('May 08 2020 11:55:00'))); |
| assert.equal('1 hour ago', fromNow(new Date('May 08 2020 11:00:00'))); |
| assert.equal( |
| '1 hour 5 min ago', |
| fromNow(new Date('May 08 2020 10:55:00')) |
| ); |
| assert.equal('3 hours ago', fromNow(new Date('May 08 2020 9:00:00'))); |
| assert.equal('1 day ago', fromNow(new Date('May 07 2020 12:00:00'))); |
| assert.equal('1 day 2 hr ago', fromNow(new Date('May 07 2020 10:00:00'))); |
| assert.equal('3 days ago', fromNow(new Date('May 05 2020 12:00:00'))); |
| assert.equal('1 month ago', fromNow(new Date('Apr 05 2020 12:00:00'))); |
| assert.equal('2 months ago', fromNow(new Date('Mar 05 2020 12:00:00'))); |
| assert.equal('1 year ago', fromNow(new Date('May 05 2019 12:00:00'))); |
| assert.equal('10 years ago', fromNow(new Date('May 05 2010 12:00:00'))); |
| }); |
| test('rounding error', () => { |
| const fakeNow = new Date('May 08 2020 12:00:00'); |
| sinon.useFakeTimers(fakeNow.getTime()); |
| assert.equal('2 hours ago', fromNow(new Date('May 08 2020 9:30:00'))); |
| }); |
| }); |
| |
| suite('isWithinDay', () => { |
| test('basics works', () => { |
| assert.isTrue( |
| isWithinDay( |
| new Date('May 08 2020 12:00:00'), |
| new Date('May 08 2020 02:00:00') |
| ) |
| ); |
| assert.isFalse( |
| isWithinDay( |
| new Date('May 08 2020 12:00:00'), |
| new Date('May 07 2020 12:00:00') |
| ) |
| ); |
| }); |
| }); |
| |
| suite('wasYesterday', () => { |
| test('less 24 hours', () => { |
| assert.isFalse( |
| wasYesterday( |
| new Date('May 08 2020 12:00:00'), |
| new Date('May 08 2020 02:00:00') |
| ) |
| ); |
| assert.isTrue( |
| wasYesterday( |
| new Date('May 08 2020 12:00:00'), |
| new Date('May 07 2020 12:00:00') |
| ) |
| ); |
| }); |
| test('more 24 hours', () => { |
| assert.isTrue( |
| wasYesterday( |
| new Date('May 08 2020 12:00:00'), |
| new Date('May 07 2020 2:00:00') |
| ) |
| ); |
| assert.isFalse( |
| wasYesterday( |
| new Date('May 08 2020 12:00:00'), |
| new Date('May 06 2020 14:00:00') |
| ) |
| ); |
| }); |
| }); |
| |
| suite('isWithinHalfYear', () => { |
| test('basics works', () => { |
| assert.isTrue( |
| isWithinHalfYear( |
| new Date('May 08 2020 12:00:00'), |
| new Date('Feb 08 2020 12:00:00') |
| ) |
| ); |
| assert.isFalse( |
| isWithinHalfYear( |
| new Date('May 08 2020 12:00:00'), |
| new Date('Nov 07 2019 12:00:00') |
| ) |
| ); |
| }); |
| }); |
| |
| suite('formatDate', () => { |
| test('works for standard format', () => { |
| const stdFormat = 'MMM DD, YYYY'; |
| assert.equal( |
| 'May 08, 2020', |
| formatDate(new Date('May 08 2020 12:00:00'), stdFormat) |
| ); |
| assert.equal( |
| 'Feb 28, 2020', |
| formatDate(new Date('Feb 28 2020 12:00:00'), stdFormat) |
| ); |
| |
| const time24Format = 'HH:mm:ss'; |
| assert.equal( |
| 'Feb 28, 2020 12:01:12', |
| formatDate( |
| new Date('Feb 28 2020 12:01:12'), |
| stdFormat + ' ' + time24Format |
| ) |
| ); |
| }); |
| test('works for euro format', () => { |
| const euroFormat = 'DD.MM.YYYY'; |
| assert.equal( |
| '01.12.2019', |
| formatDate(new Date('Dec 01 2019 12:00:00'), euroFormat) |
| ); |
| assert.equal( |
| '20.01.2002', |
| formatDate(new Date('Jan 20 2002 12:00:00'), euroFormat) |
| ); |
| |
| const time24Format = 'HH:mm:ss'; |
| assert.equal( |
| '28.02.2020 00:01:12', |
| formatDate( |
| new Date('Feb 28 2020 00:01:12'), |
| euroFormat + ' ' + time24Format |
| ) |
| ); |
| }); |
| test('works for iso format', () => { |
| const isoFormat = 'YYYY-MM-DD'; |
| assert.equal( |
| '2015-01-01', |
| formatDate(new Date('Jan 01 2015 12:00:00'), isoFormat) |
| ); |
| assert.equal( |
| '2013-07-03', |
| formatDate(new Date('Jul 03 2013 12:00:00'), isoFormat) |
| ); |
| |
| const timeFormat = 'h:mm:ss A'; |
| assert.equal( |
| '2013-07-03 5:00:00 AM', |
| formatDate( |
| new Date('Jul 03 2013 05:00:00'), |
| isoFormat + ' ' + timeFormat |
| ) |
| ); |
| assert.equal( |
| '2013-07-03 5:00:00 PM', |
| formatDate( |
| new Date('Jul 03 2013 17:00:00'), |
| isoFormat + ' ' + timeFormat |
| ) |
| ); |
| }); |
| |
| test('weekday', () => { |
| assert.equal( |
| '2013-07-03 Wed', |
| formatDate(new Date('Jul 03 2013 12:14:00'), 'YYYY-MM-DD ddd') |
| ); |
| assert.equal( |
| '2013-07-03 Wednesday', |
| formatDate(new Date('Jul 03 2013 00:15:00'), 'YYYY-MM-DD dddd') |
| ); |
| }); |
| |
| test('h:mm:ss A shows correctly midnight and midday', () => { |
| const timeFormat = 'h:mm A'; |
| assert.equal( |
| '12:14 PM', |
| formatDate(new Date('Jul 03 2013 12:14:00'), timeFormat) |
| ); |
| assert.equal( |
| '12:15 AM', |
| formatDate(new Date('Jul 03 2013 00:15:00'), timeFormat) |
| ); |
| }); |
| }); |
| }); |