/** * @copyright Copyright (c) 2019 Georg Ehrke * * @author Georg Ehrke * * @license GNU AGPL version 3 or any later version * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as * published by the Free Software Foundation, either version 3 of the * License, or (at your option) any later version. * * This program is distributed in the hope that it will be useful, * but WITHOUT ANY WARRANTY without even the implied warranty of * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the * GNU Affero General Public License for more details. * * You should have received a copy of the GNU Affero General Public License * along with this program. If not, see . * */ import { dateFactory, getYYYYMMDDFromDate, getUnixTimestampFromDate, getDateFromFirstdayParam, getYYYYMMDDFromFirstdayParam, getDateFromDateTimeValue, modifyDate } from '../../../../src/utils/date.js' import logger from '../../../../src/utils/logger.js' jest.mock('../../../../src/utils/logger.js') describe('utils/alarms test suite', () => { beforeEach(() => { logger.error.mockClear() }) it('should return a date', () => { expect(dateFactory()).toBeInstanceOf(Date) }) it('should return YYYYMMDD from a given date object', () => { expect(getYYYYMMDDFromDate(new Date(2019, 0, 1, 0, 0, 0))).toEqual('2019-01-01') expect(getYYYYMMDDFromDate(new Date(2019, 11, 31, 23, 59, 59))).toEqual('2019-12-31') }) it('should return the unix timestamp from a given date object', () => { expect(getUnixTimestampFromDate(new Date(Date.UTC(2019, 0, 1, 23, 59, 59)))).toEqual(1546387199) expect(getUnixTimestampFromDate(new Date(Date.UTC(2019, 11, 31, 23, 59, 59)))).toEqual(1577836799) }) it('should get a date object from the first-day-parameter', () => { expect(getDateFromFirstdayParam('now')).toBeInstanceOf(Date) const date1 = getDateFromFirstdayParam('2019-01-01') const date2 = getDateFromFirstdayParam('2019-12-31') expect(date1.getFullYear()).toEqual(2019) expect(date1.getMonth()).toEqual(0) expect(date1.getDate()).toEqual(1) expect(date1.getHours()).toEqual(0) expect(date1.getMinutes()).toEqual(0) expect(date1.getSeconds()).toEqual(0) expect(date1.getMilliseconds()).toEqual(0) expect(date1.getTimezoneOffset()).toEqual(new Date(2019, 0, 1).getTimezoneOffset()) expect(date2.getFullYear()).toEqual(2019) expect(date2.getMonth()).toEqual(11) expect(date2.getDate()).toEqual(31) expect(date2.getHours()).toEqual(0) expect(date2.getMinutes()).toEqual(0) expect(date2.getSeconds()).toEqual(0) expect(date2.getMilliseconds()).toEqual(0) expect(date2.getTimezoneOffset()).toEqual(new Date(2019, 11, 31).getTimezoneOffset()) }) it('should log an error when providing a non-numerical first-day-parameter', () => { const date1 = getDateFromFirstdayParam('ab-05-05') const date2 = getDateFromFirstdayParam('2020-ab-06') const date3 = getDateFromFirstdayParam('2020-06-ab') // It should return a Date anyway expect(date1).toBeInstanceOf(Date) expect(date2).toBeInstanceOf(Date) expect(date3).toBeInstanceOf(Date) // but also log an error message expect(logger.error).toHaveBeenCalledTimes(3) expect(logger.error).toHaveBeenNthCalledWith(1, 'First day parameter contains non-numerical components, falling back to today') expect(logger.error).toHaveBeenNthCalledWith(2, 'First day parameter contains non-numerical components, falling back to today') expect(logger.error).toHaveBeenNthCalledWith(3, 'First day parameter contains non-numerical components, falling back to today') }) it('shoud get YYYYMMDD from a given first day-param', () => { expect(getYYYYMMDDFromFirstdayParam('now')).toEqual(expect.any(String)) const date1 = getYYYYMMDDFromFirstdayParam('2019-01-01') const date2 = getYYYYMMDDFromFirstdayParam('2019-12-31') expect(date1).toEqual('2019-01-01') expect(date2).toEqual('2019-12-31') }) it('should return from a date-time-value', () => { const date = getDateFromDateTimeValue({ year: 2019, month: 1, day: 1, hour: 14, minute: 42, seconds: 13 }) expect(date.getFullYear()).toEqual(2019) expect(date.getMonth()).toEqual(0) expect(date.getDate()).toEqual(1) expect(date.getHours()).toEqual(14) expect(date.getMinutes()).toEqual(42) expect(date.getSeconds()).toEqual(0) expect(date.getMilliseconds()).toEqual(0) }) it('should modify a date', () => { const date1 = modifyDate(new Date(2019, 0, 1, 0, 0, 0), { day: 5 }) const date2 = modifyDate(new Date(2019, 0, 1, 0, 0, 0), { day: 60 }) const date3 = modifyDate(new Date(2019, 0, 1, 0, 0, 0), { week: 1 }) const date4 = modifyDate(new Date(2019, 0, 1, 0, 0, 0), { week: 7 }) const date5 = modifyDate(new Date(2019, 0, 1, 0, 0, 0), { month: 1 }) const date6 = modifyDate(new Date(2019, 0, 1, 0, 0, 0), { month: 18 }) const date7 = modifyDate(new Date(2019, 0, 1, 0, 0, 0), { day: 22, week: 42, month: 5 }) expect(date1.getFullYear()).toEqual(2019) expect(date1.getMonth()).toEqual(0) expect(date1.getDate()).toEqual(6) expect(date2.getFullYear()).toEqual(2019) expect(date2.getMonth()).toEqual(2) expect(date2.getDate()).toEqual(2) expect(date3.getFullYear()).toEqual(2019) expect(date3.getMonth()).toEqual(0) expect(date3.getDate()).toEqual(8) expect(date4.getFullYear()).toEqual(2019) expect(date4.getMonth()).toEqual(1) expect(date4.getDate()).toEqual(19) expect(date5.getFullYear()).toEqual(2019) expect(date5.getMonth()).toEqual(1) expect(date5.getDate()).toEqual(1) expect(date6.getFullYear()).toEqual(2020) expect(date6.getMonth()).toEqual(6) expect(date6.getDate()).toEqual(1) expect(date7.getFullYear()).toEqual(2020) expect(date7.getMonth()).toEqual(3) expect(date7.getDate()).toEqual(13) }) })