fix(shell): geschlossenes Spenden-Banner kommt beim Sprachwechsel auch ohne localStorage nicht zurück

Das Banner merkte sich „geschlossen“ nur in localStorage. Bei gesperrtem Speicher (privates Fenster, gesperrte Website-Daten) baute der Neuaufbau
des Rahmens beim Sprachwechsel (main.ts) es wieder auf.

- donate-banner.ts: zusätzlich ein Merker im Speicher des Moduls (closedThisSession); er gilt neben localStorage.
- Tests: donate-banner.test.ts lädt je Test eine frische Modulkopie (der Merker lebt im Modul); neue Fälle: gesperrter Speicher, erneutes Einhängen
  nach dem Schließen (bleibt weg) und ohne Schließen (kommt wieder); main.test.ts: Sprachwechsel nach dem Schließen bei gesperrtem Speicher.
  Die beiden schon vorhandenen Fälle zum gesperrten Speicher sperren jetzt wirklich (vi.stubGlobal): vi.spyOn(Storage.prototype, …) greift in
  happy-dom nicht, die Fälle waren leer.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Opus 5.5 committed 2026-10-05 05:31:38 +00:00
1 parent af05e5f1f1
commit 0bcdfe258d
3 files changed
+74 -11

No files matched your search

+15
View File
@@ -133,6 +133,21 @@ describe('Sprachwechsel', () => {
expect(storeAfter.get().cardName).toBe('Mein Entwurf');
});
it('ein geschlossenes Spenden-Banner kommt beim Sprachwechsel nicht zurück, auch wenn der Speicher gesperrt ist', async () => {
await start('/');
const denied = () => {
throw new DOMException('blockiert', 'SecurityError');
};
vi.stubGlobal('localStorage', { getItem: denied, setItem: denied });
document.querySelector<HTMLButtonElement>('.donate-banner-close')!.click();
expect(document.querySelector('.donate-banner')).toBeNull();
langButton().click();
expect(document.documentElement.lang).toBe('en');
expect(document.querySelector('.donate-banner')).toBeNull();
});
it('das Konto-Menü wird neu gebaut und zeigt sich sofort, wenn der Anmeldestatus schon bekannt ist', async () => {
await start('/');
await vi.waitFor(() => expect(signIn()).toBeDefined());