82 lines
2.9 KiB
TypeScript
82 lines
2.9 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
||
import { pickCaller, sameNumber, type StoredAddress } from './addresses'
|
||
|
||
/**
|
||
* SwyxIt! meldet Rufnummern mit Amtsholung ("001602107449"), die Webhooks
|
||
* liefern sie international ("+491602107449") – der Abgleich muss beide
|
||
* Schreibweisen als denselben Anschluss erkennen.
|
||
*/
|
||
describe('sameNumber', () => {
|
||
it('erkennt dieselbe Nummer trotz unterschiedlicher Schreibweise', () => {
|
||
expect(sameNumber('+491602107449', '001602107449')).toBe(true)
|
||
expect(sameNumber('+491602107449', '01602107449')).toBe(true)
|
||
expect(sameNumber('+49421409660', '0421409660')).toBe(true)
|
||
expect(sameNumber('+491602107449', '+491602107449')).toBe(true)
|
||
})
|
||
|
||
it('unterscheidet verschiedene Anschlüsse', () => {
|
||
expect(sameNumber('+491602107449', '+491602107440')).toBe(false)
|
||
expect(sameNumber('+49421409660', '+494212409661')).toBe(false)
|
||
})
|
||
|
||
it('verlangt bei kurzen Nummern (Durchwahlen) die volle Übereinstimmung', () => {
|
||
expect(sameNumber('7587', '7587')).toBe(true)
|
||
expect(sameNumber('7587', '587')).toBe(false)
|
||
// Eine Durchwahl ist nicht "dieselbe Nummer" wie ein externer Anschluss.
|
||
expect(sameNumber('7449', '+491602107449')).toBe(false)
|
||
})
|
||
|
||
it('liefert ohne Ziffern kein Ergebnis', () => {
|
||
expect(sameNumber('', '+491602107449')).toBe(false)
|
||
expect(sameNumber('unbekannt', '+491602107449')).toBe(false)
|
||
})
|
||
})
|
||
|
||
describe('pickCaller', () => {
|
||
const entries: StoredAddress[] = [
|
||
{ number: '5215', name: 'Abdul, Rokhsareh', description: 'Globales Telefonbuch' },
|
||
{
|
||
number: '+491602107449',
|
||
name: 'SYSGEN GmbH',
|
||
description: 'Kunde | SYSGEN, SYSTEME UND | NL Bremen',
|
||
role: 'customer',
|
||
cscId: 100164,
|
||
url: 'https://test.sb.assecutor.de/admin/tapi_wrapper.php?phoneNo=01602107449',
|
||
},
|
||
{
|
||
number: '+49171677xxxx',
|
||
name: 'Rainer Peters (HH1003)',
|
||
role: 'courier',
|
||
jobIds: [21891233],
|
||
},
|
||
]
|
||
|
||
it('findet den Kunden zur gemeldeten Rufnummer', () => {
|
||
const match = pickCaller(entries, '001602107449')
|
||
expect(match?.name).toBe('SYSGEN GmbH')
|
||
expect(match?.url).toContain('tapi_wrapper')
|
||
})
|
||
|
||
it('findet auch den Kurier zur gemeldeten Rufnummer', () => {
|
||
const match = pickCaller(entries, '+49171677xxxx')
|
||
expect(match?.name).toBe('Rainer Peters (HH1003)')
|
||
expect(match?.jobIds).toEqual([21891233])
|
||
})
|
||
|
||
it('übergeht Telefonbuch-Einträge (ohne Rolle)', () => {
|
||
expect(pickCaller(entries, '5215')).toBeNull()
|
||
})
|
||
|
||
it('bevorzugt bei doppelter Rufnummer den Kunden vor dem Kurier', () => {
|
||
const both: StoredAddress[] = [
|
||
{ number: '+49404711', name: 'Kurier', role: 'courier' },
|
||
{ number: '+49404711', name: 'Kunde', role: 'customer' },
|
||
]
|
||
expect(pickCaller(both, '+49404711')?.name).toBe('Kunde')
|
||
})
|
||
|
||
it('liefert null, wenn keine Rufnummer passt', () => {
|
||
expect(pickCaller(entries, '+49404711')).toBeNull()
|
||
})
|
||
})
|