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:
co-authored by
Claude Opus 5.5
parent
c0eb00faee
commit
b6ba7860bf
@@ -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);
|
||||
});
|
||||
|
||||
@@ -66,3 +66,9 @@ test('nur genehmigte Abwesenheiten, bei Krankheit auch offene Bescheinigungen',
|
||||
assert.ok(!SICK_STATES.includes('cancelled'));
|
||||
assert.ok(!ABSENCE_STATES.includes('requested'));
|
||||
});
|
||||
|
||||
test('Abschnitte mit eigener Groesse (Abwesenheiten: hoechstens ein Jahr)', () => {
|
||||
const teile = chunks('2025-10-01', '2027-11-01', 365);
|
||||
assert.equal(teile.length, 3);
|
||||
for (const [von, bis] of teile) assert.ok((new Date(bis) - new Date(von)) / 86400000 + 1 <= 365);
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user