import {describe, it, expect, beforeAll} from 'vitest'; import {ZonedDateTime} from '@/'; import importer from '@clarify/zone-data/importer'; import {TimeZone} from '@clarify/zone-data'; describe('ZonedDateTime', () => { describe('.hoursInDay', () => { let oslo!: TimeZone; let lordHowe!: TimeZone; let saoPaulo!: TimeZone; beforeAll(async () => { oslo = await importer['Europe/Oslo'](); lordHowe = await importer['Australia/Lord_Howe'](); saoPaulo = await importer['America/Sao_Paulo'](); }); describe('Europe/Oslo', () => { it('Europe/Oslo', async () => { let date = new ZonedDateTime(Date.parse('2024-03-08T15:03:57.265Z'), oslo); expect(date.hoursInDay).toEqual(24); }); it('DST end', async () => { let one = new ZonedDateTime(Date.UTC(2024, 9, 26, 22, 0, 0), oslo); let two = new ZonedDateTime(Date.UTC(2024, 9, 27, 22, 0, 0), oslo); expect(one.hoursInDay).toEqual(25); expect(two.hoursInDay).toEqual(25); }); it('DST start', async () => { let one = new ZonedDateTime(Date.UTC(2024, 2, 30, 23, 0, 0), oslo); let two = new ZonedDateTime(Date.UTC(2024, 2, 31, 21, 0, 0), oslo); expect(one.hoursInDay).toEqual(23); expect(two.hoursInDay).toEqual(23); }); }); describe('America/Sao_Paulo', () => { it('DST end', async () => { let date = new ZonedDateTime(Date.UTC(2018, 10, 4, 10, 0, 0), saoPaulo); expect(date.hoursInDay).toEqual(23); }); it('DST start', async () => { let date = new ZonedDateTime(Date.UTC(2018, 1, 17, 10, 0, 0), saoPaulo); expect(date.hoursInDay, 'starts date at 01:00').toEqual(25); }); }); describe('Australia/Lord_Howe', () => { it('regular', async () => { let date = new ZonedDateTime(Date.UTC(2023, 5, 30, 15, 28, 4, 345), lordHowe); expect(date.hoursInDay).toEqual(24); }); it('DST start', async () => { let date = new ZonedDateTime(Date.UTC(2023, 3, 1, 14, 28, 4, 345), lordHowe); expect(date.hoursInDay).toEqual(24.5); }); it('DST end', async () => { let date = new ZonedDateTime(Date.UTC(2023, 8, 30, 15, 28, 4, 345), lordHowe); expect(date.hoursInDay).toEqual(23.5); }); }); }); });