From 8651f31ebb7cf9c6a0949503f2c2c5755328ce46 Mon Sep 17 00:00:00 2001 From: Eric Bailey Date: Thu, 29 Aug 2024 19:22:53 -0500 Subject: Localize dates, counts (#5027) * refactor: consistent localized formatting * refactor: localized date time * refactor: localize relative time with strings * chore: fix typo from copy-paste * Clean up useTimeAgo * Remove old ago * Const * Reuse * Prettier --------- Co-authored-by: Mary --- src/lib/hooks/__tests__/useTimeAgo.test.ts | 161 ++++++++++++++++++++++++----- 1 file changed, 136 insertions(+), 25 deletions(-) (limited to 'src/lib/hooks/__tests__') diff --git a/src/lib/hooks/__tests__/useTimeAgo.test.ts b/src/lib/hooks/__tests__/useTimeAgo.test.ts index e74f9c62d..68eb6e43a 100644 --- a/src/lib/hooks/__tests__/useTimeAgo.test.ts +++ b/src/lib/hooks/__tests__/useTimeAgo.test.ts @@ -1,102 +1,213 @@ import {describe, expect, it} from '@jest/globals' -import {MessageDescriptor} from '@lingui/core' import {addDays, subDays, subHours, subMinutes, subSeconds} from 'date-fns' import {dateDiff} from '../useTimeAgo' -const lingui: any = (obj: MessageDescriptor) => obj.message - const base = new Date('2024-06-17T00:00:00Z') describe('dateDiff', () => { it(`works with numbers`, () => { - expect(dateDiff(subDays(base, 3), Number(base), {lingui})).toEqual('3d') + const earlier = subDays(base, 3) + expect(dateDiff(earlier, Number(base))).toEqual({ + value: 3, + unit: 'day', + earlier, + later: base, + }) }) it(`works with strings`, () => { - expect(dateDiff(subDays(base, 3), base.toString(), {lingui})).toEqual('3d') + const earlier = subDays(base, 3) + expect(dateDiff(earlier, base.toString())).toEqual({ + value: 3, + unit: 'day', + earlier, + later: base, + }) }) it(`works with dates`, () => { - expect(dateDiff(subDays(base, 3), base, {lingui})).toEqual('3d') + const earlier = subDays(base, 3) + expect(dateDiff(earlier, base)).toEqual({ + value: 3, + unit: 'day', + earlier, + later: base, + }) }) it(`equal values return now`, () => { - expect(dateDiff(base, base, {lingui})).toEqual('now') + expect(dateDiff(base, base)).toEqual({ + value: 0, + unit: 'now', + earlier: base, + later: base, + }) }) it(`future dates return now`, () => { - expect(dateDiff(addDays(base, 3), base, {lingui})).toEqual('now') + const earlier = addDays(base, 3) + expect(dateDiff(earlier, base)).toEqual({ + value: 0, + unit: 'now', + earlier, + later: base, + }) }) it(`values < 5 seconds ago return now`, () => { const then = subSeconds(base, 4) - expect(dateDiff(then, base, {lingui})).toEqual('now') + expect(dateDiff(then, base)).toEqual({ + value: 0, + unit: 'now', + earlier: then, + later: base, + }) }) it(`values >= 5 seconds ago return seconds`, () => { const then = subSeconds(base, 5) - expect(dateDiff(then, base, {lingui})).toEqual('5s') + expect(dateDiff(then, base)).toEqual({ + value: 5, + unit: 'second', + earlier: then, + later: base, + }) }) it(`values < 1 min return seconds`, () => { const then = subSeconds(base, 59) - expect(dateDiff(then, base, {lingui})).toEqual('59s') + expect(dateDiff(then, base)).toEqual({ + value: 59, + unit: 'second', + earlier: then, + later: base, + }) }) it(`values >= 1 min return minutes`, () => { const then = subSeconds(base, 60) - expect(dateDiff(then, base, {lingui})).toEqual('1m') + expect(dateDiff(then, base)).toEqual({ + value: 1, + unit: 'minute', + earlier: then, + later: base, + }) }) it(`minutes round down`, () => { const then = subSeconds(base, 119) - expect(dateDiff(then, base, {lingui})).toEqual('1m') + expect(dateDiff(then, base)).toEqual({ + value: 1, + unit: 'minute', + earlier: then, + later: base, + }) }) it(`values < 1 hour return minutes`, () => { const then = subMinutes(base, 59) - expect(dateDiff(then, base, {lingui})).toEqual('59m') + expect(dateDiff(then, base)).toEqual({ + value: 59, + unit: 'minute', + earlier: then, + later: base, + }) }) it(`values >= 1 hour return hours`, () => { const then = subMinutes(base, 60) - expect(dateDiff(then, base, {lingui})).toEqual('1h') + expect(dateDiff(then, base)).toEqual({ + value: 1, + unit: 'hour', + earlier: then, + later: base, + }) }) it(`hours round down`, () => { const then = subMinutes(base, 119) - expect(dateDiff(then, base, {lingui})).toEqual('1h') + expect(dateDiff(then, base)).toEqual({ + value: 1, + unit: 'hour', + earlier: then, + later: base, + }) }) it(`values < 1 day return hours`, () => { const then = subHours(base, 23) - expect(dateDiff(then, base, {lingui})).toEqual('23h') + expect(dateDiff(then, base)).toEqual({ + value: 23, + unit: 'hour', + earlier: then, + later: base, + }) }) it(`values >= 1 day return days`, () => { const then = subHours(base, 24) - expect(dateDiff(then, base, {lingui})).toEqual('1d') + expect(dateDiff(then, base)).toEqual({ + value: 1, + unit: 'day', + earlier: then, + later: base, + }) }) it(`days round down`, () => { const then = subHours(base, 47) - expect(dateDiff(then, base, {lingui})).toEqual('1d') + expect(dateDiff(then, base)).toEqual({ + value: 1, + unit: 'day', + earlier: then, + later: base, + }) }) it(`values < 30 days return days`, () => { const then = subDays(base, 29) - expect(dateDiff(then, base, {lingui})).toEqual('29d') + expect(dateDiff(then, base)).toEqual({ + value: 29, + unit: 'day', + earlier: then, + later: base, + }) }) it(`values >= 30 days return months`, () => { const then = subDays(base, 30) - expect(dateDiff(then, base, {lingui})).toEqual('1mo') + expect(dateDiff(then, base)).toEqual({ + value: 1, + unit: 'month', + earlier: then, + later: base, + }) }) it(`months round down`, () => { const then = subDays(base, 59) - expect(dateDiff(then, base, {lingui})).toEqual('1mo') + expect(dateDiff(then, base)).toEqual({ + value: 1, + unit: 'month', + earlier: then, + later: base, + }) }) it(`values are rounded by increments of 30`, () => { const then = subDays(base, 61) - expect(dateDiff(then, base, {lingui})).toEqual('2mo') + expect(dateDiff(then, base)).toEqual({ + value: 2, + unit: 'month', + earlier: then, + later: base, + }) }) it(`values < 360 days return months`, () => { const then = subDays(base, 359) - expect(dateDiff(then, base, {lingui})).toEqual('11mo') + expect(dateDiff(then, base)).toEqual({ + value: 11, + unit: 'month', + earlier: then, + later: base, + }) }) it(`values >= 360 days return the earlier value`, () => { const then = subDays(base, 360) - expect(dateDiff(then, base, {lingui})).toEqual(then.toLocaleDateString()) + expect(dateDiff(then, base)).toEqual({ + value: 12, + unit: 'month', + earlier: then, + later: base, + }) }) }) -- cgit 1.4.1