Finanzen: Bankabruf speichert Buchungen idempotent, Vormerkungen, Ablauf
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
3dd2fac50b
commit
588cc95f5d
5 files changed
+961
No files matched your search
@@ -0,0 +1,51 @@
|
||||
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/)
|
||||
})
|
||||
Reference in new issue
Block a user