From f119a0cacce87300b71eb3184e671da5e7fbcc1d Mon Sep 17 00:00:00 2001 From: Claude Date: Sun, 4 Oct 2026 20:08:46 +0000 Subject: [PATCH] =?UTF-8?q?Analyse:=20Wochentag-Hinweis=20z=C3=A4hlt=20den?= =?UTF-8?q?=20heutigen,=20unvollst=C3=A4ndigen=20Tag=20nicht=20mit?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Co-Authored-By: Claude Opus 5.5 --- public/analyse-view.js | 9 ++++++++- test/analyseInsights.test.js | 26 ++++++++++++++++++++++++++ 2 files changed, 34 insertions(+), 1 deletion(-) diff --git a/public/analyse-view.js b/public/analyse-view.js index ef3e5b2..5b477d6 100644 --- a/public/analyse-view.js +++ b/public/analyse-view.js @@ -298,9 +298,16 @@ function contactItem(stats, cmp) { return text } +// Der letzte Tag der Reihe ist heute und noch nicht zu Ende: er zaehlt beim Wochentag-Hinweis nicht mit +function completedDays(stats) { + const series = Array.isArray(stats.series) ? stats.series : [] + const last = series[series.length - 1] + return last && (!stats.to || last.day === stats.to) ? series.slice(0, -1) : series +} + function dayItem(stats) { if (!(Number(stats.totals.pv) >= 70)) return null - const w = weekdayStats(stats.series, stats.firstDay || '') + const w = weekdayStats(completedDays(stats), stats.firstDay || '') if (!w) return null const parts = [] if (w.best) parts.push(`${w.best.name} ist im Schnitt dein stärkster Tag.`) diff --git a/test/analyseInsights.test.js b/test/analyseInsights.test.js index 30c3337..47b5c78 100644 --- a/test/analyseInsights.test.js +++ b/test/analyseInsights.test.js @@ -219,6 +219,32 @@ test('summarize: Wochentag und Spitzentag in einem Hinweis', () => { assert.ok(!summarize(stats({ firstDay: '2026-09-30', series: days('2026-09-05', 30, spike) })).items.some((i) => i.icon === 'day')) }) +test('summarize: der heutige, unvollständige Tag zählt beim Wochentag-Hinweis nicht mit', () => { + const isSat = (day) => new Date(day + 'T00:00:00Z').getUTCDay() === 6 + const dayHtml = (s) => s.items.find((i) => i.icon === 'day')?.html + // Reihe 04.09.–03.10.2026, heute = Samstag 03.10. mit erst 5 Aufrufen; Samstage sonst 280, alle anderen Tage 200 + const today = '2026-10-03' + const sat = (i, day) => (day === today ? 5 : isSat(day) ? 280 : 200) + const series = days('2026-09-04', 30, sat) + const base = { from: '2026-09-04', to: today, series } + // zählte der Tag mit, läge der Samstag-Schnitt (225) unter 1,2 × Gesamtschnitt (204) → kein Hinweis + assert.equal(weekdayStats(series, '').best, null) + // ohne den heutigen Tag: Samstag Ø 280 ≥ 1,2 × 211, stärkster Tag; Spitzentag nein (280 < 1,8 × 211) + assert.equal(dayHtml(summarize(stats(base))), 'Samstag ist im Schnitt dein stärkster Tag.') + // Spitzentag: Mi., 16.09. mit 365 (zählte heute mit, wäre 365 ≥ 1,8 × 199 ein Spitzentag; ohne heute 365 < 1,8 × 205,7) + const wed = days('2026-09-04', 30, (i, day) => (day === today ? 5 : day === '2026-09-16' ? 365 : 200)) + assert.ok(weekdayStats(wed, '').peak) + assert.equal(dayHtml(summarize(stats({ ...base, series: wed }))), undefined) + // fehlt `to`, entfällt der letzte Tag trotzdem + assert.equal(dayHtml(summarize(stats({ ...base, to: undefined }))), 'Samstag ist im Schnitt dein stärkster Tag.') + // endet die Reihe nicht auf `to`, ist der letzte Tag ein abgeschlossener Tag und zählt mit + assert.equal(dayHtml(summarize(stats({ ...base, to: '2026-10-04' }))), undefined) + // 7-Tage-Ansicht: nur 6 abgeschlossene Tage → kein Wochentag-Hinweis, auch bei deutlichem Muster + const week = days('2026-09-28', 7, (i, day) => (isSat(day) ? 500 : 100)) + assert.equal(dayHtml(summarize(stats({ range: 7, from: '2026-09-28', to: '2026-10-04', series: week }))), undefined) + assert.ok(weekdayStats(week, '')) // mit allen 7 Tagen wäre es ein Ergebnis gewesen +}) + test('summarize: Pfade und Hosts werden maskiert', () => { const s = summarize(stats({ pages: [{ key: '/', count: 900 }], refs: [{ key: 'a"b.de', count: 900 }] })) assert.ok(!JSON.stringify(s).includes('