Express-App mit JSON-Speicher unter VCH_DATA_DIR, Monatskalender mit Fotos, Personen mit Rollen und Teilzeit-Freitagen, Abwesenheiten, Feiertage je Bundesland, faire Zufallsauslosung mit Fixieren und Neu-Auslosen. Nextcloud: CalDAV-Discovery, Zielkalender wählbar, Termine je Werktag schreiben und aktualisieren, Abwesenheiten aus Kalender importieren, Personen samt Fotos aus dem Systemadressbuch übernehmen. Co-Authored-By: Claude Fable 5.1 <noreply@anthropic.com>
32 lines
1.3 KiB
JavaScript
32 lines
1.3 KiB
JavaScript
import { test } from 'node:test';
|
|
import assert from 'node:assert/strict';
|
|
import { easterSunday, germanHolidays } from '../server/holidays.js';
|
|
|
|
test('Ostersonntag bekannter Jahre', () => {
|
|
assert.equal(easterSunday(2024), '2024-03-31');
|
|
assert.equal(easterSunday(2025), '2025-04-20');
|
|
assert.equal(easterSunday(2026), '2026-04-05');
|
|
assert.equal(easterSunday(2027), '2027-03-28');
|
|
});
|
|
|
|
test('bundesweite Feiertage 2026', () => {
|
|
const dates = Object.fromEntries(germanHolidays(2026).map((h) => [h.name, h.date]));
|
|
assert.equal(dates['Karfreitag'], '2026-04-03');
|
|
assert.equal(dates['Ostermontag'], '2026-04-06');
|
|
assert.equal(dates['Christi Himmelfahrt'], '2026-05-14');
|
|
assert.equal(dates['Pfingstmontag'], '2026-05-25');
|
|
assert.equal(dates['Tag der Deutschen Einheit'], '2026-10-03');
|
|
assert.equal(Object.keys(dates).length, 9);
|
|
assert.ok(!('Fronleichnam' in dates));
|
|
});
|
|
|
|
test('Landesfeiertage nur im passenden Bundesland', () => {
|
|
const nw = germanHolidays(2026, 'NW').map((h) => h.name);
|
|
assert.ok(nw.includes('Fronleichnam'));
|
|
assert.ok(nw.includes('Allerheiligen'));
|
|
assert.ok(!nw.includes('Reformationstag'));
|
|
const sn = Object.fromEntries(germanHolidays(2026, 'SN').map((h) => [h.name, h.date]));
|
|
assert.equal(sn['Buß- und Bettag'], '2026-11-18');
|
|
assert.ok('Reformationstag' in sn);
|
|
});
|