Webshop: IP-Hash entfällt mit Zahlung oder Storno, keine Käufer-Telefonnummer mehr gespeichert

schliesseAb und verwirf entfernen ipHash aus dem Bestell-JSON, sobald die Bestellung nicht mehr offen ist
(Begrenzung offener Bestellungen je IP bleibt). customer_details.phone wird nicht mehr in kaeufer.telefon
übernommen; Kundenansicht und Bestelldetail geben auch in alten Datensätzen keine Telefonnummer aus.

Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Opus 5.5 committed 2026-10-05 10:26:56 +00:00
1 parent 4ab84e31ac
commit 43473c0879
9 files changed
+79 -19

No files matched your search

+35 -2
View File
@@ -159,7 +159,8 @@ test('schliesseAb: Normalfall - bezahlt, Käuferdaten, Bestand abgezogen, G09 an
assert.equal(doc.paymentIntentId, 'pi_test1')
assert.equal(doc.kaeuferEmail, 'max@example.com')
const daten = JSON.parse(doc.bestellung)
assert.deepEqual(daten.kaeufer, { name: 'Max Mustermann', email: 'max@example.com', telefon: '+49 170 1234567' })
assert.deepEqual(daten.kaeufer, { name: 'Max Mustermann', email: 'max@example.com' }, 'Stripe liefert eine Telefonnummer, gespeichert wird sie nicht')
assert.ok(!doc.bestellung.includes('1234567'), 'keine Telefonnummer irgendwo im Bestell-JSON')
assert.deepEqual(daten.lieferadresse, { name: 'Max Mustermann', line1: 'Lieferweg 7', line2: 'Hinterhaus', postal_code: '67655', city: 'Kaiserslautern', country: 'DE' })
assert.equal(daten.rechnungsadresse.line1, 'Rechnungsweg 1')
assert.equal(daten.zahlungsart, 'card')
@@ -397,7 +398,39 @@ test('schliesseAb: Abholung ohne Lieferadresse, Telefon und Namen fehlen', async
const daten = JSON.parse(order(b.orderId).bestellung)
assert.equal(daten.lieferadresse, undefined)
assert.equal(daten.rechnungsadresse, undefined)
assert.deepEqual(daten.kaeufer, { name: '', email: 'x@example.com', telefon: '' })
assert.deepEqual(daten.kaeufer, { name: '', email: 'x@example.com' })
})
test('IP-Hash: nach der Zahlung weg (auch bei später Zahlung einer verworfenen Bestellung), vorher da', async () => {
await aufbau()
const r = await B.legeBestellungAn(ctx, { positionen: [{ produktId: 'a1', menge: 1 }], lieferart: 'versand', land: 'DE' }, { now: T0, ipHash: 'abcdef0123456789' })
const b = { ...r, doc: order(r.orderId), sessionId: order(r.orderId).stripeSessionId }
assert.equal(JSON.parse(b.doc.bestellung).ipHash, 'abcdef0123456789', 'solange offen, steht der IP-Hash im Datensatz')
await B.schliesseAb({ accountId: ACCOUNT, session: zahle(b), now: nach(60) })
assert.equal(order(b.orderId).status, 'bezahlt')
assert.equal(JSON.parse(order(b.orderId).bestellung).ipHash, undefined, 'bezahlt: kein IP-Hash mehr')
assert.ok(!order(b.orderId).bestellung.includes('ipHash'))
// spaete Zahlung: verworfen (IP-Hash weg), danach bezahlt - bleibt ohne IP-Hash
const r2 = await B.legeBestellungAn(ctx, { positionen: [{ produktId: 'a1', menge: 1 }], lieferart: 'versand', land: 'DE' }, { now: T0, ipHash: 'abcdef0123456789' })
const b2 = { ...r2, doc: order(r2.orderId), sessionId: order(r2.orderId).stripeSessionId }
await B.verwirf(r2.orderId, 'abgelaufen', { now: nach(1900) })
await B.schliesseAb({ accountId: ACCOUNT, session: zahle(b2), now: nach(2000) })
assert.equal(order(r2.orderId).status, 'bezahlt')
assert.ok(!order(r2.orderId).bestellung.includes('ipHash'))
})
test('IP-Hash: verwirf entfernt ihn, Verlauf und übrige Daten bleiben', async () => {
await aufbau()
const r = await B.legeBestellungAn(ctx, { positionen: [{ produktId: 'a1', menge: 1 }], lieferart: 'versand', land: 'DE' }, { now: T0, ipHash: 'abcdef0123456789' })
assert.equal(JSON.parse(order(r.orderId).bestellung).ipHash, 'abcdef0123456789')
const erg = await B.verwirf(r.orderId, 'abgelaufen', { now: nach(1900) })
assert.equal(erg.verworfen, true)
const daten = JSON.parse(order(r.orderId).bestellung)
assert.equal(daten.ipHash, undefined)
assert.equal(erg.order.daten.ipHash, undefined)
assert.deepEqual(daten.verlauf.map((v) => v.was), ['angelegt', 'abgelaufen'])
assert.equal(daten.positionen.length, 1)
})
test('verwirf: nur aus offen; Verlauf, Reservierung frei; G14 nur mit mail und bekannter Adresse', async () => {