import { test } from 'node:test' import assert from 'node:assert/strict' import { createHash } from 'node:crypto' import { readFileSync } from 'node:fs' import { ersatzHtml, wochenplanHash } from '../server/services/zeiten/ersatz.js' import { hauptplan } from '../server/services/zeiten/zeitlogik.js' // Fixture wie in zeitenZeitlogik.test.js: Wochentage 1..7 (Mo..So). // Wert: ['09:00','18:00'] = ein Fenster, [[..],[..]] = zwei Fenster, 'rund' / 'vereinbarung' = Modus, fehlt = zu. function plan(woche = {}, extra = {}) { const tage = {} for (let d = 1; d <= 7; d += 1) { const w = woche[d] if (!w) tage[d] = { modus: 'zu', fenster: [] } else if (typeof w === 'string') tage[d] = { modus: w, fenster: [] } else tage[d] = { modus: 'zeiten', fenster: Array.isArray(w[0]) ? w : [w] } } return { id: 'p1', kurz: 'standard', name: 'Standard', haupt: true, tage, ...extra } } function daten({ plaene = [plan({ 1: ['09:00', '18:00'] })], ausnahmen = [], feiertage = {}, hinweise = [], land = 'RP' } = {}) { return { land, plaene, feiertage, ausnahmen, hinweise, kontakt: { an: false, telefon: '', adresse: '', whatsapp: null } } } function tiefEinfrieren(x) { if (x && typeof x === 'object' && !Object.isFrozen(x)) { Object.freeze(x) for (const v of Object.values(x)) tiefEinfrieren(v) } return x } const ASCII = /^[\x00-\x7F]*$/ const WOCHE = ['Montag', 'Dienstag', 'Mittwoch', 'Donnerstag', 'Freitag', 'Samstag', 'Sonntag'] /** Zeilen der Tabelle: [['Montag', '09:00–18:00'], ...] */ function zeilen(html) { return [...html.matchAll(/
| ${tag} | `) >= 0, `${tag} fehlt`) } }) test('Ersatz-HTML: Caption ist der Planname, bei leerem Namen "Öffnungszeiten"', () => { const p = plan({ 1: ['09:00', '18:00'] }, { name: 'Sommer' }) assert.match(ersatzHtml(daten({ plaene: [p] }), p), /
|---|