Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
1 change: 0 additions & 1 deletion libs/angular-ecmascript-intl/package.json
Original file line number Diff line number Diff line change
Expand Up @@ -45,7 +45,6 @@
"@vitest/browser-playwright": "catalog:",
"@vitest/coverage-v8": "catalog:",
"cpy-cli": "catalog:",
"dayjs": "catalog:",
"ng-packagr": "catalog:",
"playwright": "catalog:",
"rxjs": "catalog:",
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,4 @@
import { TestBed } from '@angular/core/testing';
import dayjs from 'dayjs';
import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest';
import { INTL_LOCALES } from '../locale';
import { INTL_RELATIVE_TIME_PIPE_DEFAULT_OPTIONS } from './relative-time-pipe-default-options';
Expand Down Expand Up @@ -38,13 +37,13 @@ describe('RelativeTimePipe', () => {
});

it('should throw an error when an invalid string is passed', () => {
expect(() => testUnit.transform('someInvalidDate')).toThrowError(
expect(() => testUnit.transform('someInvalidDate')).toThrow(
'someInvalidDate is not a valid date',
);
});

it('should throw an error when an invalid date is passed', () => {
expect(() => testUnit.transform(new Date('invalid'))).toThrowError(
expect(() => testUnit.transform(new Date('invalid'))).toThrow(
'Invalid Date is not a valid date',
);
});
Expand All @@ -65,33 +64,47 @@ describe('RelativeTimePipe', () => {

describe('years', () => {
it('should transform a date one year in past', () => {
const date = dayjs().subtract(1, 'year').subtract(1, 'second').toDate();
const date = new Date(
Temporal.Now.instant()
.toZonedDateTimeISO('UTC')
.subtract({ years: 1 })
.subtract({ seconds: 1 }).epochMilliseconds,
);

expect(testUnit.transform(date)).toEqual('1 year ago');
});

it('should transform a date almost 3 years in future', () => {
const date = dayjs()
.add(365 * 3, 'days')
.subtract(1, 'second')
.toDate();
const date = new Date(
Temporal.Now.instant()
.toZonedDateTimeISO('UTC')
.add({ days: 365 * 3 })
.subtract({ seconds: 1 }).epochMilliseconds,
);

expect(testUnit.transform(date)).toEqual('in 2 years');
});
});

describe('months', () => {
it('should transform a date 1 month in future', () => {
const date = dayjs().add(31, 'days').add(1, 'second').toDate();
const date = new Date(
Temporal.Now.instant()
.toZonedDateTimeISO('UTC')
.add({ days: 31 })
.add({ seconds: 1 }).epochMilliseconds,
);

expect(testUnit.transform(date)).toEqual('in 1 month');
});

it('should transform a date almost 12 months in past', () => {
const date = dayjs()
.subtract(30 * 12, 'days')
.add(1, 'second')
.toDate();
const date = new Date(
Temporal.Now.instant()
.toZonedDateTimeISO('UTC')
.subtract({ days: 30 * 12 })
.add({ seconds: 1 }).epochMilliseconds,
);

expect(testUnit.transform(date)).toEqual('11 months ago');
});
Expand All @@ -100,62 +113,97 @@ describe('RelativeTimePipe', () => {
describe('weeks', () => {
it('should transform a date 1 week in future', () => {
// We need to account for clock changes here
const date = dayjs().add(1, 'week').add(2, 'hour').toDate();
const date = new Date(
Temporal.Now.instant()
.toZonedDateTimeISO('UTC')
.add({ weeks: 1 })
.add({ hours: 2 }).epochMilliseconds,
);

expect(testUnit.transform(date)).toEqual('in 1 week');
});

it('should transform a date almost 4 weeks in past', () => {
const date = dayjs().subtract(4, 'weeks').add(1, 'day').toDate();
const date = new Date(
Temporal.Now.instant()
.toZonedDateTimeISO('UTC')
.subtract({ weeks: 4 })
.add({ days: 1 }).epochMilliseconds,
);

expect(testUnit.transform(date)).toEqual('3 weeks ago');
});
});

describe('days', () => {
it('should transform a date 1 day in future', () => {
const date = dayjs().add(1, 'day').add(1, 'second').toDate();
const date = new Date(
Temporal.Now.instant()
.toZonedDateTimeISO('UTC')
.add({ days: 1 })
.add({ seconds: 1 }).epochMilliseconds,
);

expect(testUnit.transform(date)).toEqual('in 1 day');
});

it('should transform a date almost 7 days in past', () => {
const date = dayjs().subtract(7, 'days').add(1, 'second').toDate();
const date = new Date(
Temporal.Now.instant()
.toZonedDateTimeISO('UTC')
.subtract({ days: 7 })
.add({ seconds: 1 }).epochMilliseconds,
);

expect(testUnit.transform(date)).toEqual('6 days ago');
});
});

describe('hours', () => {
it('should transform a date 1 hour in future', () => {
const date = dayjs().add(1, 'hour').add(1, 'second').toDate();
const date = new Date(
Temporal.Now.instant().add({ hours: 1 }).add({ seconds: 1 })
.epochMilliseconds,
);

expect(testUnit.transform(date)).toEqual('in 1 hour');
});

it('should transform a date almost 24 hours in past', () => {
const date = dayjs().subtract(24, 'hours').add(1, 'second').toDate();
const date = new Date(
Temporal.Now.instant().subtract({ hours: 24 }).add({ seconds: 1 })
.epochMilliseconds,
);

expect(testUnit.transform(date)).toEqual('23 hours ago');
});
});

describe('minutes', () => {
it('should transform a date 1 minute in future', () => {
const date = dayjs().add(1, 'minute').add(1, 'second').toDate();
const date = new Date(
Temporal.Now.instant().add({ minutes: 1 }).add({ seconds: 1 })
.epochMilliseconds,
);

expect(testUnit.transform(date)).toEqual('in 1 minute');
});

it('should transform a date almost 59 minutes in past', () => {
const date = dayjs().subtract(60, 'minutes').add(1, 'second').toDate();
const date = new Date(
Temporal.Now.instant().subtract({ minutes: 60 }).add({ seconds: 1 })
.epochMilliseconds,
);

expect(testUnit.transform(date)).toEqual('59 minutes ago');
});
});

it('should transform a date almost than 1 minute in past', () => {
const date = dayjs().subtract(1, 'minute').add(1, 'second').toDate();
const date = new Date(
Temporal.Now.instant().subtract({ minutes: 1 }).add({ seconds: 1 })
.epochMilliseconds,
);

expect(testUnit.transform(date)).toEqual('in 0 minutes');
});
Expand Down
3 changes: 2 additions & 1 deletion libs/angular-ecmascript-intl/tsconfig.spec.json
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,8 @@
{
"extends": "./tsconfig.json",
"compilerOptions": {
"outDir": "./out-tsc/spec"
"outDir": "./out-tsc/spec",
"lib": ["dom", "es2022", "ESNext.Temporal"]
},
"include": ["src/**/*.ts"]
}
2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@
"engines": {
"runtime": {
"name": "node",
"version": "24.15.0",
"version": "26.2.0",
"onFail": "download"
}
},
Expand Down
Loading
Loading