From 58fe0bdc816136385a7402a9cced90a9e1d1be3e Mon Sep 17 00:00:00 2001 From: Sergei Zharinov Date: Thu, 20 Apr 2023 19:52:48 +0300 Subject: [PATCH] refactor(date): Use Jest fake timers (#21631) --- lib/util/date.spec.ts | 53 ++++++++++++++++++++++++------------------- 1 file changed, 30 insertions(+), 23 deletions(-) diff --git a/lib/util/date.spec.ts b/lib/util/date.spec.ts index 08d5d102c38898..9aa53a38a4acdf 100644 --- a/lib/util/date.spec.ts +++ b/lib/util/date.spec.ts @@ -1,3 +1,4 @@ +import { DateTime } from 'luxon'; import { getElapsedDays, getElapsedHours, @@ -5,34 +6,40 @@ import { getElapsedMs, } from './date'; -const ONE_MINUTE_MS = 60 * 1000; -const ONE_HOUR_MS = 60 * ONE_MINUTE_MS; -const ONE_DAY_MS = 24 * ONE_HOUR_MS; - describe('util/date', () => { - const Jan1 = new Date(new Date().getFullYear(), 0, 1); + const t0 = DateTime.fromISO('2020-10-10'); + + beforeAll(() => { + jest.useFakeTimers(); + }); + + beforeEach(() => { + jest.setSystemTime(t0.toMillis()); + }); - it('returns elapsed days', () => { - const elapsedDays = Math.floor( - (new Date().getTime() - new Date(Jan1).getTime()) / ONE_DAY_MS - ); - expect(getElapsedDays(Jan1.toDateString())).toBe(elapsedDays); + afterAll(() => { + jest.useRealTimers(); }); - it('returns elapsed minutes', () => { - const elapsedMinutes = Math.floor( - (new Date().getTime() - new Date(Jan1).getTime()) / ONE_MINUTE_MS - ); - expect(getElapsedMinutes(new Date(Jan1))).toBe(elapsedMinutes); + describe('getElapsedDays', () => { + it('returns elapsed days', () => { + const t = t0.minus({ days: 42 }); + expect(getElapsedDays(t.toISO()!)).toBe(42); + }); + }); + + describe('getElapsedMinutes', () => { + it('returns elapsed minutes', () => { + const t = t0.minus({ minutes: 42 }); + expect(getElapsedMinutes(t.toJSDate())).toBe(42); + }); }); describe('getElapsedHours', () => { it('returns elapsed hours', () => { - const elapsedHours = Math.floor( - (new Date().getTime() - new Date(Jan1).getTime()) / ONE_HOUR_MS - ); - expect(getElapsedHours(Jan1.toISOString())).toBe(elapsedHours); // ISOstring - expect(getElapsedHours(Jan1)).toBe(elapsedHours); // JS Date + const t = t0.minus({ hours: 42 }); + expect(getElapsedHours(t.toISO()!)).toBe(42); // ISOstring + expect(getElapsedHours(t.toJSDate())).toBe(42); // JS Date }); it('returns zero when date passed is invalid', () => { @@ -40,10 +47,10 @@ describe('util/date', () => { }); }); - describe('getElapsedMilliseconds', () => { + describe('getElapsedMs', () => { it('returns elapsed time in milliseconds', () => { - const elapsedMs = new Date().getTime() - new Date(Jan1).getTime(); - expect(getElapsedMs(Jan1.toISOString())).toBe(elapsedMs); + const t = t0.minus({ milliseconds: 42 }); + expect(getElapsedMs(t.toISO()!)).toBe(42); }); }); });