Files
Webklar-Kundenbereich/test/financeDates.test.js
T

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/)
})