fix(kalender): Abwesenheiten jahresweise abfragen, Feiertagsnamen

- HRworks /absences erlaubt hoechstens ein Jahr je Aufruf; der Kalender
  reicht weiter und fragt jetzt in Abschnitten von 365 Tagen.
- HRworks liefert zu Feiertagen keinen Namen. Der Name kommt jetzt aus
  dem Datum (feste Feiertage, Ostern-abhaengige, Buss- und Bettag).

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
schakal00783
2026-09-25 11:41:49 +02:00
co-authored by Claude Opus 5.5
parent c0eb00faee
commit b6ba7860bf
5 changed files with 97 additions and 8 deletions
+15 -1
View File
@@ -2,6 +2,7 @@ import test from 'node:test';
import assert from 'node:assert/strict';
import { kalenderEintrag } from '../src/lib/calendarSync.js';
import { holidayName } from '../src/lib/hrworks.js';
import { easterSunday, germanHolidayName } from '../src/lib/dates.js';
const tag = (extra = {}) => ({ holiday: false, holiday_name: null, absences: [], sick_leaves: [], regular_hours: 8, available_hours: 0, ...extra });
const meta = new Map([
@@ -29,7 +30,8 @@ test('Kalender: Feiertag vor Urlaub, Wochenende ohne Urlaub, halbe Tage', () =>
label: 'Tag der Deutschen Einheit',
half: false,
});
assert.equal(kalenderEintrag(tag({ holiday: true }), meta, types).label, 'Feiertag');
assert.equal(kalenderEintrag(tag({ holiday: true, date: '2026-07-14' }), meta, types).label, 'Feiertag');
assert.equal(kalenderEintrag(tag({ holiday: true, date: '2026-10-03' }), meta, types).label, 'Tag der Deutschen Einheit');
assert.equal(kalenderEintrag(tag({ absences: ['30_1'], regular_hours: 0 }), meta, types), null);
assert.equal(kalenderEintrag(tag({ absences: ['30_1'], available_hours: 4 }), meta, types).half, true);
});
@@ -47,3 +49,15 @@ test('Feiertagsname aus unterschiedlichen Formen', () => {
assert.equal(holidayName([{}]), null);
assert.equal(holidayName(undefined), null);
});
test('Feiertagsnamen aus dem Datum', () => {
assert.equal(easterSunday(2026), '2026-04-05');
assert.equal(easterSunday(2027), '2027-03-28');
assert.equal(germanHolidayName('2026-04-03'), 'Karfreitag');
assert.equal(germanHolidayName('2026-05-14'), 'Christi Himmelfahrt');
assert.equal(germanHolidayName('2026-05-25'), 'Pfingstmontag');
assert.equal(germanHolidayName('2026-06-04'), 'Fronleichnam');
assert.equal(germanHolidayName('2026-11-18'), 'Buß- und Bettag');
assert.equal(germanHolidayName('2026-12-25'), '1. Weihnachtstag');
assert.equal(germanHolidayName('2026-07-14'), null);
});