Kundenansicht neu E-Fix M1: Widerrufsstreifen und Pille nach Kauf, Wechsel und Speicher-Plus neu laden

ladeFristen lief nur einmal beim Start; eine neue 14-Tage-Frist nach einem Wechsel oder Speicher-Plus erschien erst nach Neuladen, ein
abgelaufener Streifen blieb in einem langen PWA-Tab stehen. Die Hülle lädt die Fristen jetzt bei kn:zaehler-neu (vertraege, alle) und beim
Zurückkehren in den Tab neu (ladeFristenNeu: ein Fehler lässt den Stand stehen, die jüngste Antwort gilt); das Speicher-Plus meldet
kn:zaehler-neu vertraege nach Erfolg, der Wechsel tat es schon.

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-16 21:40:29 +00:00
1 parent 4cac03a2bd
commit 306c53871d
5 files changed
+53 -4

No files matched your search

+19
View File
@@ -113,6 +113,25 @@ test('Fristen 404 (Server ohne P5): kein Streifen, "Vertrag widerrufen" bleibt o
assert.deepEqual([p.el('kn-streifen').hidden, p.fx.text(p.el('kn-streifen'))], [false, 'Widerrufsfrist bis 21.10. · Widerrufen']); assert.match(p.fx.text(p.el('kn-konto-wurzel')), /Frist läuft/)
})
test('M1: Widerrufsstreifen und Pille werden nach Kauf, Wechsel oder Speicher-Plus in der Sitzung neu geladen (kn:zaehler-neu vertraege/alle, Sichtbarkeit); ein Fehler lässt den Stand stehen', async () => {
const frist = { fristen: [{ quelle: 'wechsel', bezeichnung: 'Wechsel', bis: '2026-10-21T21:59:59.999Z' }], fruehestesEnde: '2026-10-21T21:59:59.999Z', anzeigen: true }
const karte = { ...KARTE_KUNDE }
const b = await boot({ hash: '', karte }); const n = () => b.log.filter((l) => l[1] === '/api/fristen').length
assert.equal(b.el('kn-streifen').hidden, true); assert.doesNotMatch(b.fx.text(b.el('kn-konto-wurzel')), /Frist läuft/)
const n0 = n()
// der Kunde wechselt oder bestellt Speicher: die Bestellseite meldet kn:zaehler-neu, jetzt gibt es eine Frist
karte['/api/fristen'] = frist
b.doc.dispatchEvent(new CustomEvent('kn:zaehler-neu', { detail: { was: 'chat' } })); await b.fx.ruhe(); assert.equal(n(), n0, 'Chat-Zähler laden die Fristen nicht')
b.doc.dispatchEvent(new CustomEvent('kn:zaehler-neu', { detail: { was: 'vertraege' } })); await b.fx.ruhe()
assert.equal(n(), n0 + 1); assert.deepEqual([b.el('kn-streifen').hidden, b.fx.text(b.el('kn-streifen'))], [false, 'Widerrufsfrist bis 21.10. · Widerrufen']); assert.match(b.fx.text(b.el('kn-konto-wurzel')), /Frist läuft/)
// ein Netzfehler lässt Streifen und Pille stehen
karte['/api/fristen'] = new Error('Netz weg'); b.doc.dispatchEvent(new CustomEvent('kn:zaehler-neu', { detail: { was: 'alle' } })); await b.fx.ruhe()
assert.equal(n(), n0 + 2); assert.equal(b.el('kn-streifen').hidden, false)
// die Frist ist abgelaufen (Server: anzeigen false): der Streifen verschwindet, auch beim Zurückkehren in den Tab
karte['/api/fristen'] = { fristen: [], fruehestesEnde: null, anzeigen: false }; b.doc.visibilityState = 'visible'; b.doc.dispatchEvent(new Event('visibilitychange')); await b.fx.ruhe()
assert.equal(n(), n0 + 3); assert.equal(b.el('kn-streifen').hidden, true); assert.doesNotMatch(b.fx.text(b.el('kn-konto-wurzel')), /Frist läuft/)
})
test('Zähler: Verträge laden beim Betreten und bei kn:zaehler-neu (document) neu; der Chat-Zähler fällt beim Öffnen des Chats weg', async () => {
const b = await boot({ hash: '', karte: { ...KARTE_KUNDE, '/api/chat/unread-count': { unread: 3 } } }); const n = (pfad) => b.log.filter((l) => l[1] === pfad).length
const i0 = n('/api/invoices'); const chatTab = () => b.fx.finde(b.el('kn-zeile-haupt'), '[role=tab][aria-label="Chat, 3 ungelesen"]')