Jobs typisiert und erweitert, nächtliche Bereinigung, Kunden-Popup bei Anruf
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>
This commit is contained in:
@@ -0,0 +1,63 @@
|
||||
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()
|
||||
})
|
||||
})
|
||||
Reference in New Issue
Block a user