import {describe, it, expect, beforeAll, assert} from 'vitest'; import {ZonedDateTime} from '@/'; import importer from '@clarify/zone-data/importer'; import {TimeZone} from '@clarify/zone-data'; describe('ZonedDateTime', () => { describe('.from', () => { let timeZone!: TimeZone; beforeAll(async () => { timeZone = await importer['Europe/Berlin'](); }); it('accepts date components', async () => { let date = ZonedDateTime.from({ year: 2024, month: 1, day: 31, hour: 16, minute: 3, second: 57, millisecond: 265, timeZone, }); expect(date.year).toEqual(2024); expect(date.month).toEqual(1); expect(date.day).toEqual(31); expect(date.hour).toEqual(16); expect(date.minute).toEqual(3); expect(date.second).toEqual(57); expect(date.millisecond).toEqual(265); }); it('parses strings', () => { let other = ZonedDateTime.from('2024-01-31T16:03:57.265[Europe/Oslo]'); expect(other.year).toEqual(2024); expect(other.month).toEqual(1); expect(other.day).toEqual(31); expect(other.hour).toEqual(16); expect(other.minute).toEqual(3); expect(other.second).toEqual(57); expect(other.millisecond).toEqual(265); let date = ZonedDateTime.from('2024-09-27T02[Europe/Oslo]'); expect(date.year).toEqual(2024); expect(date.month).toEqual(9); expect(date.day).toEqual(27); expect(date.hour).toEqual(2); expect(date.minute).toEqual(0); expect(date.second).toEqual(0); expect(date.millisecond).toEqual(0); }); it('picks possible dates based on parsed offset', () => { let dateTwo = ZonedDateTime.from('2024-10-27T02+02[Europe/Oslo]'); expect(dateTwo.epochMilliseconds).toEqual(1729987200000); let dateOne = ZonedDateTime.from('2024-10-27T02+01[Europe/Oslo]'); expect(dateOne.epochMilliseconds).toEqual(1729990800000); }); it('rejects non-sense offsets', () => { assert.throws(() => { ZonedDateTime.from('2024-10-27T02+04[Europe/Oslo]'); }); }); }); });