diff --git a/app/javascript/shared/helpers/DateHelper.js b/app/javascript/shared/helpers/DateHelper.js index c8b0f231b..18e4efdf1 100644 --- a/app/javascript/shared/helpers/DateHelper.js +++ b/app/javascript/shared/helpers/DateHelper.js @@ -32,7 +32,8 @@ export const isTimeAfter = (h1, m1, h2, m2) => { }; export const generateRelativeTime = (value, unit, languageCode) => { - const rtf = new Intl.RelativeTimeFormat(languageCode, { + const code = languageCode?.replace(/_/g, '-'); // Hacky fix we need to handle it from source + const rtf = new Intl.RelativeTimeFormat(code, { numeric: 'auto', }); return rtf.format(value, unit); diff --git a/app/javascript/shared/helpers/specs/DateHelper.spec.js b/app/javascript/shared/helpers/specs/DateHelper.spec.js index 030910a3d..ee2e3ef67 100644 --- a/app/javascript/shared/helpers/specs/DateHelper.spec.js +++ b/app/javascript/shared/helpers/specs/DateHelper.spec.js @@ -64,15 +64,59 @@ describe('#isTimeAfter', () => { }); }); -describe('#generateRelativeTime', () => { - it('should return correct relative time', () => { - expect(generateRelativeTime(-1, 'day', 'en')).toEqual('yesterday'); - expect(generateRelativeTime(1, 'day', 'en')).toEqual('tomorrow'); - expect(generateRelativeTime(1, 'hour', 'en')).toEqual('in 1 hour'); - expect(generateRelativeTime(-1, 'hour', 'en')).toEqual('1 hour ago'); - expect(generateRelativeTime(1, 'minute', 'en')).toEqual('in 1 minute'); - expect(generateRelativeTime(-1, 'minute', 'en')).toEqual('1 minute ago'); - expect(generateRelativeTime(1, 'second', 'en')).toEqual('in 1 second'); - expect(generateRelativeTime(-1, 'second', 'en')).toEqual('1 second ago'); +describe('generateRelativeTime', () => { + it('should return a string with the relative time', () => { + const value = 1; + const unit = 'second'; + const languageCode = 'en-US'; + const expectedResult = 'in 1 second'; + + const actualResult = generateRelativeTime(value, unit, languageCode); + + expect(actualResult).toBe(expectedResult); + }); + + it('should return a string with the relative time in a different language', () => { + const value = 10; + const unit = 'minute'; + const languageCode = 'de-DE'; + const expectedResult = 'in 10 Minuten'; + + const actualResult = generateRelativeTime(value, unit, languageCode); + + expect(actualResult).toBe(expectedResult); + }); + + it('should return a string with the relative time for a different unit', () => { + const value = 1; + const unit = 'hour'; + const languageCode = 'en-US'; + const expectedResult = 'in 1 hour'; + + const actualResult = generateRelativeTime(value, unit, languageCode); + + expect(actualResult).toBe(expectedResult); + }); + + it('should throw an error if the value is not a number', () => { + const value = 1; + const unit = 'day'; + const languageCode = 'en_US'; + const expectedResult = 'tomorrow'; + + const actualResult = generateRelativeTime(value, unit, languageCode); + + expect(actualResult).toBe(expectedResult); + }); + + it('should throw an error if the value is not a number', () => { + const value = 1; + const unit = 'day'; + const languageCode = 'en-US'; + const expectedResult = 'tomorrow'; + + const actualResult = generateRelativeTime(value, unit, languageCode); + + expect(actualResult).toBe(expectedResult); }); });