import { test } from 'node:test' import assert from 'node:assert/strict' import { berlinDate, addDays, daysBetween, formatDe } from '../server/services/finance/dates.js' test('berlinDate: Kalendertag in Europe/Berlin, nicht in UTC', () => { assert.equal(berlinDate(new Date('2026-09-30T22:30:00Z')), '2026-10-01') assert.equal(berlinDate(new Date('2026-09-30T21:59:00Z')), '2026-09-30') // Winterzeit (UTC+1) assert.equal(berlinDate(new Date('2026-12-31T23:30:00Z')), '2027-01-01') assert.equal(berlinDate(new Date('2026-12-31T22:59:00Z')), '2026-12-31') }) test('berlinDate: ohne Argument der heutige Tag im Format YYYY-MM-DD', () => { assert.match(berlinDate(), /^\d{4}-\d{2}-\d{2}$/) }) test('addDays: Tagesrechnung ueber die Zeitumstellung hinweg', () => { assert.equal(addDays('2026-03-29', 1), '2026-03-30') assert.equal(addDays('2026-10-25', 1), '2026-10-26') assert.equal(addDays('2026-03-28', 2), '2026-03-30') }) test('addDays: Monats- und Jahreswechsel, Schaltjahr, negative Werte', () => { assert.equal(addDays('2026-12-31', 1), '2027-01-01') assert.equal(addDays('2028-02-28', 1), '2028-02-29') assert.equal(addDays('2026-10-01', -89), '2026-07-04') assert.equal(addDays('2026-10-01', 0), '2026-10-01') }) test('daysBetween: ganze Tage, toYmd minus fromYmd', () => { assert.equal(daysBetween('2026-10-01', '2027-03-29'), 179) assert.equal(daysBetween('2027-03-29', '2026-10-01'), -179) assert.equal(daysBetween('2026-10-01', '2026-10-01'), 0) // Zeitumstellung: 23-Stunden-Tag zaehlt als ein Tag assert.equal(daysBetween('2026-03-28', '2026-03-30'), 2) assert.equal(daysBetween('2026-10-24', '2026-10-26'), 2) }) test('formatDe: TT.MM.JJJJ', () => { assert.equal(formatDe('2027-03-29'), '29.03.2027') assert.equal(formatDe('2026-01-05'), '05.01.2026') }) test('ungueltige Daten werden abgelehnt', () => { for (const bad of ['', '2026-13-01', '2026-02-30', '29.03.2027', null, undefined, '2026-1-1']) { assert.throws(() => addDays(bad, 1), /Ungültiges Datum/) assert.throws(() => daysBetween(bad, '2026-10-01'), /Ungültiges Datum/) assert.throws(() => formatDe(bad), /Ungültiges Datum/) } assert.throws(() => addDays('2026-10-01', 1.5), /ganze Zahl/) })