52 lines
2.2 KiB
JavaScript
52 lines
2.2 KiB
JavaScript
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/)
|
|
})
|