4.7 KB112 lines
Blame
1/**
2 * Copyright (c) Meta Platforms, Inc. and affiliates.
3 *
4 * This source code is licensed under the MIT license found in the
5 * LICENSE file in the root directory of this source tree.
6 */
7
8import {setCurrentLanguage} from '../i18n';
9import {relativeDate} from '../relativeDate';
10
11describe('relativeDate', () => {
12 const SECOND = 1000;
13 const MINUTE = 60 * SECOND;
14 const HOUR = 60 * MINUTE;
15 const DAY = 24 * HOUR;
16 const WEEK = 7 * DAY;
17 const YEAR = DAY * 365;
18 const MONTH = YEAR / 12;
19
20 const reference = 157765000000; // 01.01.1975 00:00
21 const now = new Date().getTime();
22
23 const check = (time: number) => expect(relativeDate(time, {reference}));
24 const checkShort = (time: number) =>
25 expect(relativeDate(time, {reference, useShortVariant: true}));
26
27 describe('en', () => {
28 beforeAll(() => {
29 setCurrentLanguage('en');
30 });
31
32 it('renders relative dates', () => {
33 expect(relativeDate(new Date(), {})).toEqual('just now');
34
35 // test long format
36 expect(relativeDate(0, {})).toEqual(Math.round(now / YEAR) + ' years ago');
37 check(reference - 41 * SECOND).toEqual('just now');
38 check(reference - 42 * SECOND).toEqual('a minute ago');
39 check(reference - MINUTE).toEqual('a minute ago');
40 check(reference - MINUTE * 1.5).toEqual('2 minutes ago');
41 check(reference - MINUTE * 59).toEqual('59 minutes ago');
42 check(reference - HOUR).toEqual('an hour ago');
43 check(reference - HOUR * 1.5).toEqual('2 hours ago');
44 check(reference - HOUR * 16).toEqual('16 hours ago');
45 check(reference - HOUR * 23).toEqual('23 hours ago');
46 check(reference - DAY * 1.8).toEqual('yesterday');
47 check(reference - DAY * 3).toEqual('3 days ago');
48 check(reference - DAY * 6).toEqual('6 days ago');
49 check(reference - WEEK).toEqual('a week ago');
50 check(reference - WEEK * 2).toEqual('2 weeks ago');
51 check(reference - WEEK * 4).toEqual('4 weeks ago');
52 check(reference - MONTH * 1.2).toEqual('a month ago');
53 check(reference - YEAR + HOUR).toEqual('12 months ago');
54 check(reference - YEAR).toEqual('a year ago');
55 check(reference - YEAR * 2).toEqual('2 years ago');
56 });
57
58 it('renders short relative dates', () => {
59 // test short format
60 checkShort(reference - 41 * SECOND).toEqual('now');
61 checkShort(reference - 42 * SECOND).toEqual('1m');
62 checkShort(reference - MINUTE).toEqual('1m');
63 checkShort(reference - MINUTE * 1.5).toEqual('2m');
64 checkShort(reference - MINUTE * 59).toEqual('59m');
65 checkShort(reference - HOUR).toEqual('1h');
66 checkShort(reference - HOUR * 1.5).toEqual('2h');
67 checkShort(reference - HOUR * 16).toEqual('16h');
68 checkShort(reference - HOUR * 23).toEqual('23h');
69 checkShort(reference - DAY * 1.8).toEqual('1d');
70 checkShort(reference - DAY * 3).toEqual('3d');
71 checkShort(reference - DAY * 6).toEqual('6d');
72 checkShort(reference - WEEK).toEqual('1w');
73 checkShort(reference - WEEK * 2).toEqual('2w');
74 checkShort(reference - WEEK * 4).toEqual('4w');
75 checkShort(reference - MONTH * 1.2).toEqual('1mo');
76 checkShort(reference - YEAR + HOUR).toEqual('12mo');
77 checkShort(reference - YEAR).toEqual('1y');
78 checkShort(reference - YEAR * 2).toEqual('2y');
79 });
80 });
81
82 describe('de', () => {
83 beforeAll(() => {
84 setCurrentLanguage('de');
85 });
86 it('renders relative dates', () => {
87 check(reference - 41 * SECOND).toEqual('vor 1 Min.');
88 check(reference - 42 * SECOND).toEqual('vor 1 Min.');
89 check(reference - MINUTE).toEqual('vor 1 Min.');
90 check(reference - MINUTE * 1.5).toEqual('vor 2 Min.');
91 check(reference - MINUTE * 59).toEqual('vor 59 Min.');
92 check(reference - HOUR).toEqual('vor 60 Min.');
93 check(reference - HOUR * 1.5).toEqual('vor 2 Std.');
94 check(reference - HOUR * 16).toEqual('vor 16 Std.');
95 check(reference - HOUR * 23).toEqual('vor 23 Std.');
96 check(reference - DAY * 1.8).toEqual('vorgestern');
97 check(reference - DAY * 3).toEqual('vor 3 Tagen');
98 check(reference - DAY * 6).toEqual('vor 6 Tagen');
99 check(reference - WEEK).toEqual('vor 7 Tagen');
100 check(reference - WEEK * 2).toEqual('vor 14 Tagen');
101 check(reference - WEEK * 4).toEqual('vor 28 Tagen');
102 check(reference - MONTH * 1.2).toEqual('letzten Monat');
103 // check(reference - YEAR + HOUR).toEqual('vor 12 Monaten'); // some kind of whitespace issue
104 // check(reference - YEAR).toEqual('vor 12 Monaten'); // some kind of whitespace issue
105 check(reference - YEAR * 2).toEqual('vor 2 Jahren');
106
107 check(reference + 2 * HOUR).toEqual('in 2 Std.');
108 check(reference + MINUTE).toEqual('in 1 Min.');
109 });
110 });
111});
112