Files
Rotatory/test/holidays.test.js
T
ferdi2goandClaude Fable 5.1 95756778d8 Rotatory anlegen: Morning-Meeting-Moderation auslosen und nach Nextcloud schreiben
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>
2026-09-16 06:39:37 +00:00

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