From d4c1be91c73d9b381788ad7acc173766821b068b Mon Sep 17 00:00:00 2001 From: Claude Date: Mon, 5 Oct 2026 01:15:42 +0000 Subject: [PATCH] =?UTF-8?q?=C3=96ffnungszeiten:=20wechsel=20der=20=C3=B6ff?= =?UTF-8?q?entlichen=20Antwort=20tr=C3=A4gt=20wieder=20den=20Berliner=20Ta?= =?UTF-8?q?g?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Das Website-Skript rechnet keine Zeitzonen und braucht tag (Berliner Kalendertag bei ab) für „heute“ und die nächsten 14 Tage; wechsel-Einträge sind wieder { ab, tag, offen, text, kurz }. Co-Authored-By: Claude Opus 5.5 --- server/services/zeiten/oeffentlich.js | 3 ++- test/zeitenOeffentlich.test.js | 21 +++++++++++++++++++-- 2 files changed, 21 insertions(+), 3 deletions(-) diff --git a/server/services/zeiten/oeffentlich.js b/server/services/zeiten/oeffentlich.js index 3f1fc2d..d5ef153 100644 --- a/server/services/zeiten/oeffentlich.js +++ b/server/services/zeiten/oeffentlich.js @@ -71,7 +71,8 @@ function planAntwort(daten, plan, now, heuteTag) { haupt: plan.haupt === true, woche, tage: tageListe(daten, plan, heuteTag, TAGE_VORSCHAU), - wechsel: wechselListe(daten, plan, now).map(({ ab, offen, text, kurz }) => ({ ab, offen, text, kurz })), + // tag = Berliner Kalendertag bei ab: das Skript rechnet keine Zeitzonen und braucht ihn fuer „heute“ und die naechsten 14 Tage + wechsel: wechselListe(daten, plan, now).map(({ ab, tag, offen, text, kurz }) => ({ ab, tag, offen, text, kurz })), } } diff --git a/test/zeitenOeffentlich.test.js b/test/zeitenOeffentlich.test.js index 8c250df..903707d 100644 --- a/test/zeitenOeffentlich.test.js +++ b/test/zeitenOeffentlich.test.js @@ -126,7 +126,7 @@ test('Form: aktiv, stand, plaene, hinweise, kontakt, jsonld, firma, team (nach S assert.equal(JSON.parse(JSON.stringify(a)).plaene.length, 2, 'ist JSON-tauglich') }) -test('Plaene: kurz, name, haupt, woche (7 Tage), tage (60 Tage ab heute), wechsel (nur ab, offen, text, kurz)', async () => { +test('Plaene: kurz, name, haupt, woche (7 Tage), tage (60 Tage ab heute), wechsel (ab, tag, offen, text, kurz)', async () => { const a = baue(await gespeicherteDaten()) const [standard, kueche] = a.plaene assert.deepEqual(Object.keys(standard), ['kurz', 'name', 'haupt', 'woche', 'tage', 'wechsel']) @@ -148,7 +148,7 @@ test('Plaene: kurz, name, haupt, woche (7 Tage), tage (60 Tage ab heute), wechse assert.equal(standard.tage.find((t) => t.datum === '2026-11-01')?.art, 'feiertag', 'Allerheiligen (RP)') assert.ok(standard.wechsel.length >= 8, 'mindestens je Tag ein Wechsel') - assert.deepEqual(Object.keys(standard.wechsel[0]), ['ab', 'offen', 'text', 'kurz']) + assert.deepEqual(Object.keys(standard.wechsel[0]), ['ab', 'tag', 'offen', 'text', 'kurz']) assert.equal(typeof standard.wechsel[0].ab, 'number') assert.equal(standard.wechsel[0].offen, true, 'Montag 12:00 ist offen') assert.match(standard.wechsel[0].text, /geöffnet/i) @@ -157,6 +157,23 @@ test('Plaene: kurz, name, haupt, woche (7 Tage), tage (60 Tage ab heute), wechse assert.notDeepEqual(kueche.wechsel, standard.wechsel, 'Wechsel je Plan') }) +test('wechsel[].tag ist der Berliner Kalendertag bei ab (das Skript rechnet keine Zeitzonen)', async () => { + const daten = await gespeicherteDaten() + const berlinTag = (ms) => new Intl.DateTimeFormat('sv-SE', { timeZone: 'Europe/Berlin', year: 'numeric', month: '2-digit', day: '2-digit' }).format(new Date(ms)) + // 22:30 UTC am 4.10. = 00:30 Berliner Zeit am 5.10.: in UTC waere es noch der 4. + const nachtUtc = new Date('2026-10-04T22:30:00.000Z') + const a = baue(daten, { now: nachtUtc }) + for (const plan of a.plaene) { + assert.equal(plan.wechsel[0].tag, '2026-10-05', `Berliner Tag zu Beginn (${plan.kurz})`) + assert.equal(plan.tage[0].datum, plan.wechsel[0].tag, 'derselbe „heute“ wie tage[0]') + for (const w of plan.wechsel) assert.equal(w.tag, berlinTag(w.ab), `tag passt zu ab=${w.ab}`) + } + const standard = a.plaene[0] + assert.ok(standard.wechsel.length > 1) + assert.equal(new Set(standard.wechsel.map((w) => w.tag)).size > 1, true, 'spaetere Wechsel tragen ihren eigenen Tag') + assert.ok(!JSON.stringify(a).includes('x_urlaub01'), 'weiterhin keine internen IDs') +}) + test('Hinweise: gueltige und solche mit Beginn in 8 Tagen, ohne IDs; offene Enden bleiben Zahlen', async () => { const a = baue(await gespeicherteDaten()) assert.deepEqual(a.hinweise.map((h) => h.text), ['Wir sind für Euch da.', 'Herbstaktion'], 'weder der ferne noch der vergangene')