Job-Klassen in Frontend (Job/JobCustomer/JobCourier/JobTour) und Backend auf die neue Webhook-Form erweitert (url, finished, service, canceled, global, phone statt number – alte Schreibweise bleibt verstanden, remark je Station); Stationen legen ihre Kennung wieder als "id" ab. Adressen tragen zusätzlich role, csc_id, job_ids und url. Ein Zeitplan löscht jede Nacht um 0 Uhr Jobs, deren ordertime über vier Wochen zurückliegt. Meldet SwyxIt! einen Anruf, sucht die Startseite die Rufnummer in der Ablage (Schreibweisen-Abgleich über die Endziffern) und zeigt bei einem Kunden ein Popup mit dessen Daten; die Auftrags-URL öffnet als Knopf einen neuen Tab und schließt das Popup. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
64 lines
2.4 KiB
TypeScript
64 lines
2.4 KiB
TypeScript
import { describe, expect, it } from 'vitest'
|
||
import { pickCustomer, 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('pickCustomer', () => {
|
||
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' },
|
||
]
|
||
|
||
it('findet den Kunden zur gemeldeten Rufnummer', () => {
|
||
const match = pickCustomer(entries, '001602107449')
|
||
expect(match?.name).toBe('SYSGEN GmbH')
|
||
expect(match?.url).toContain('tapi_wrapper')
|
||
})
|
||
|
||
it('übergeht Telefonbuch-Einträge und Kuriere', () => {
|
||
expect(pickCustomer(entries, '5215')).toBeNull()
|
||
expect(pickCustomer(entries, '+49171677xxxx')).toBeNull()
|
||
})
|
||
|
||
it('liefert null, wenn keine Rufnummer passt', () => {
|
||
expect(pickCustomer(entries, '+49404711')).toBeNull()
|
||
})
|
||
})
|