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() }) })