import { afterEach, beforeEach, describe, expect, it, vi } from 'vitest'; import { DISPLAY_NAME_KEY, rememberDisplayName, rememberedDisplayName } from './display-name'; beforeEach(() => { localStorage.clear(); }); afterEach(() => { vi.restoreAllMocks(); localStorage.clear(); }); describe('gemerkter Anzeigename (localStorage)', () => { it('der Schlüssel heißt aircard.displayName', () => { expect(DISPLAY_NAME_KEY).toBe('aircard.displayName'); }); it('ohne gespeicherten Namen ist er leer', () => { expect(rememberedDisplayName()).toBe(''); }); it('liest den gespeicherten Namen', () => { localStorage.setItem(DISPLAY_NAME_KEY, 'Kenso'); expect(rememberedDisplayName()).toBe('Kenso'); }); it('speichert den Namen getrimmt unter dem Schlüssel und überschreibt den alten', () => { rememberDisplayName(' Kenso '); expect(localStorage.getItem(DISPLAY_NAME_KEY)).toBe('Kenso'); rememberDisplayName('Zoë'); expect(localStorage.getItem(DISPLAY_NAME_KEY)).toBe('Zoë'); expect(rememberedDisplayName()).toBe('Zoë'); }); it.each([[''], [' ']])('ein leerer Name (%j) entfernt den Schlüssel („Anonym“)', (empty) => { localStorage.setItem(DISPLAY_NAME_KEY, 'Kenso'); rememberDisplayName(empty); expect(localStorage.getItem(DISPLAY_NAME_KEY)).toBeNull(); expect(rememberedDisplayName()).toBe(''); }); it('gesperrter Speicher beim Lesen: leer, kein Fehler', () => { vi.spyOn(Storage.prototype, 'getItem').mockImplementation(() => { throw new DOMException('gesperrt', 'SecurityError'); }); expect(rememberedDisplayName()).toBe(''); }); it('gesperrter Speicher beim Schreiben und beim Entfernen: kein Fehler', () => { vi.spyOn(Storage.prototype, 'setItem').mockImplementation(() => { throw new DOMException('voll', 'QuotaExceededError'); }); vi.spyOn(Storage.prototype, 'removeItem').mockImplementation(() => { throw new DOMException('gesperrt', 'SecurityError'); }); expect(() => rememberDisplayName('Kenso')).not.toThrow(); expect(() => rememberDisplayName('')).not.toThrow(); }); });