import { afterEach, describe, expect, it, vi } from 'vitest' import { callerNumber, fetchIncomingCalls, matchesCall, type StoredCall } from './calls' const call: StoredCall = { id: 'call-1', receivedAt: '2026-09-20T08:30:00Z', line: 1, peer: 'Muster GmbH (+49 30 123-45)', peerNumber: '+49 30 123-45', peerName: 'Muster GmbH', } afterEach(() => vi.unstubAllGlobals()) describe('Anrufhistorie', () => { it('liest archivierte Anrufe und unterscheidet Ladefehler von einer leeren Historie', async () => { vi.stubGlobal('fetch', vi.fn() .mockResolvedValueOnce(new Response(JSON.stringify([call]))) .mockResolvedValueOnce(new Response('[]')) .mockResolvedValueOnce(new Response('', { status: 503 }))) await expect(fetchIncomingCalls()).resolves.toEqual([call]) await expect(fetchIncomingCalls()).resolves.toEqual([]) await expect(fetchIncomingCalls()).rejects.toThrow('HTTP 503') }) it('findet Namen unabhängig von Großschreibung und Nummern ohne Formatierung', () => { expect(matchesCall(call, ' MUSTER ')).toBe(true) expect(matchesCall(call, '493012345')).toBe(true) expect(matchesCall(call, '(30) 12345')).toBe(true) expect(matchesCall(call, 'Andere Firma')).toBe(false) expect(matchesCall(call, 'Firma 12345')).toBe(false) expect(matchesCall(call, '')).toBe(true) }) it('zeigt bei älteren Ereignissen die Nummer aus peer, aber erfindet keine unbekannte Nummer', () => { expect(callerNumber({ ...call, peerNumber: '' })).toBe('+49 30 123-45') expect(callerNumber({ ...call, peerNumber: null, peer: '5215' })).toBe('5215') expect(callerNumber({ ...call, peerNumber: null, peer: 'unbekannt' })).toBeNull() expect(callerNumber({ ...call, peerNumber: null, peer: 'Muster GmbH' })).toBeNull() }) })