43 lines
1.8 KiB
TypeScript
43 lines
1.8 KiB
TypeScript
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()
|
|
})
|
|
})
|