addons/isl/src/__tests__/relativeDate.test.tsblame
View source
b69ab311/**
b69ab312 * Copyright (c) Meta Platforms, Inc. and affiliates.
b69ab313 *
b69ab314 * This source code is licensed under the MIT license found in the
b69ab315 * LICENSE file in the root directory of this source tree.
b69ab316 */
b69ab317
b69ab318import {setCurrentLanguage} from '../i18n';
b69ab319import {relativeDate} from '../relativeDate';
b69ab3110
b69ab3111describe('relativeDate', () => {
b69ab3112 const SECOND = 1000;
b69ab3113 const MINUTE = 60 * SECOND;
b69ab3114 const HOUR = 60 * MINUTE;
b69ab3115 const DAY = 24 * HOUR;
b69ab3116 const WEEK = 7 * DAY;
b69ab3117 const YEAR = DAY * 365;
b69ab3118 const MONTH = YEAR / 12;
b69ab3119
b69ab3120 const reference = 157765000000; // 01.01.1975 00:00
b69ab3121 const now = new Date().getTime();
b69ab3122
b69ab3123 const check = (time: number) => expect(relativeDate(time, {reference}));
b69ab3124 const checkShort = (time: number) =>
b69ab3125 expect(relativeDate(time, {reference, useShortVariant: true}));
b69ab3126
b69ab3127 describe('en', () => {
b69ab3128 beforeAll(() => {
b69ab3129 setCurrentLanguage('en');
b69ab3130 });
b69ab3131
b69ab3132 it('renders relative dates', () => {
b69ab3133 expect(relativeDate(new Date(), {})).toEqual('just now');
b69ab3134
b69ab3135 // test long format
b69ab3136 expect(relativeDate(0, {})).toEqual(Math.round(now / YEAR) + ' years ago');
b69ab3137 check(reference - 41 * SECOND).toEqual('just now');
b69ab3138 check(reference - 42 * SECOND).toEqual('a minute ago');
b69ab3139 check(reference - MINUTE).toEqual('a minute ago');
b69ab3140 check(reference - MINUTE * 1.5).toEqual('2 minutes ago');
b69ab3141 check(reference - MINUTE * 59).toEqual('59 minutes ago');
b69ab3142 check(reference - HOUR).toEqual('an hour ago');
b69ab3143 check(reference - HOUR * 1.5).toEqual('2 hours ago');
b69ab3144 check(reference - HOUR * 16).toEqual('16 hours ago');
b69ab3145 check(reference - HOUR * 23).toEqual('23 hours ago');
b69ab3146 check(reference - DAY * 1.8).toEqual('yesterday');
b69ab3147 check(reference - DAY * 3).toEqual('3 days ago');
b69ab3148 check(reference - DAY * 6).toEqual('6 days ago');
b69ab3149 check(reference - WEEK).toEqual('a week ago');
b69ab3150 check(reference - WEEK * 2).toEqual('2 weeks ago');
b69ab3151 check(reference - WEEK * 4).toEqual('4 weeks ago');
b69ab3152 check(reference - MONTH * 1.2).toEqual('a month ago');
b69ab3153 check(reference - YEAR + HOUR).toEqual('12 months ago');
b69ab3154 check(reference - YEAR).toEqual('a year ago');
b69ab3155 check(reference - YEAR * 2).toEqual('2 years ago');
b69ab3156 });
b69ab3157
b69ab3158 it('renders short relative dates', () => {
b69ab3159 // test short format
b69ab3160 checkShort(reference - 41 * SECOND).toEqual('now');
b69ab3161 checkShort(reference - 42 * SECOND).toEqual('1m');
b69ab3162 checkShort(reference - MINUTE).toEqual('1m');
b69ab3163 checkShort(reference - MINUTE * 1.5).toEqual('2m');
b69ab3164 checkShort(reference - MINUTE * 59).toEqual('59m');
b69ab3165 checkShort(reference - HOUR).toEqual('1h');
b69ab3166 checkShort(reference - HOUR * 1.5).toEqual('2h');
b69ab3167 checkShort(reference - HOUR * 16).toEqual('16h');
b69ab3168 checkShort(reference - HOUR * 23).toEqual('23h');
b69ab3169 checkShort(reference - DAY * 1.8).toEqual('1d');
b69ab3170 checkShort(reference - DAY * 3).toEqual('3d');
b69ab3171 checkShort(reference - DAY * 6).toEqual('6d');
b69ab3172 checkShort(reference - WEEK).toEqual('1w');
b69ab3173 checkShort(reference - WEEK * 2).toEqual('2w');
b69ab3174 checkShort(reference - WEEK * 4).toEqual('4w');
b69ab3175 checkShort(reference - MONTH * 1.2).toEqual('1mo');
b69ab3176 checkShort(reference - YEAR + HOUR).toEqual('12mo');
b69ab3177 checkShort(reference - YEAR).toEqual('1y');
b69ab3178 checkShort(reference - YEAR * 2).toEqual('2y');
b69ab3179 });
b69ab3180 });
b69ab3181
b69ab3182 describe('de', () => {
b69ab3183 beforeAll(() => {
b69ab3184 setCurrentLanguage('de');
b69ab3185 });
b69ab3186 it('renders relative dates', () => {
b69ab3187 check(reference - 41 * SECOND).toEqual('vor 1 Min.');
b69ab3188 check(reference - 42 * SECOND).toEqual('vor 1 Min.');
b69ab3189 check(reference - MINUTE).toEqual('vor 1 Min.');
b69ab3190 check(reference - MINUTE * 1.5).toEqual('vor 2 Min.');
b69ab3191 check(reference - MINUTE * 59).toEqual('vor 59 Min.');
b69ab3192 check(reference - HOUR).toEqual('vor 60 Min.');
b69ab3193 check(reference - HOUR * 1.5).toEqual('vor 2 Std.');
b69ab3194 check(reference - HOUR * 16).toEqual('vor 16 Std.');
b69ab3195 check(reference - HOUR * 23).toEqual('vor 23 Std.');
b69ab3196 check(reference - DAY * 1.8).toEqual('vorgestern');
b69ab3197 check(reference - DAY * 3).toEqual('vor 3 Tagen');
b69ab3198 check(reference - DAY * 6).toEqual('vor 6 Tagen');
b69ab3199 check(reference - WEEK).toEqual('vor 7 Tagen');
b69ab31100 check(reference - WEEK * 2).toEqual('vor 14 Tagen');
b69ab31101 check(reference - WEEK * 4).toEqual('vor 28 Tagen');
b69ab31102 check(reference - MONTH * 1.2).toEqual('letzten Monat');
b69ab31103 // check(reference - YEAR + HOUR).toEqual('vor 12 Monaten'); // some kind of whitespace issue
b69ab31104 // check(reference - YEAR).toEqual('vor 12 Monaten'); // some kind of whitespace issue
b69ab31105 check(reference - YEAR * 2).toEqual('vor 2 Jahren');
b69ab31106
b69ab31107 check(reference + 2 * HOUR).toEqual('in 2 Std.');
b69ab31108 check(reference + MINUTE).toEqual('in 1 Min.');
b69ab31109 });
b69ab31110 });
b69ab31111});