Finanzen: Laendersuche ohne Prototypschluessel, beim Anlegen des Stripe-Kunden keine leeren Adressfelder
- stripeCountry: Object.hasOwn statt Zugriff ueber die Prototypkette ('constructor', '__proto__' ergaben ein Objekt als Land)
- stripeCustomerFields(customer, { forCreate }): beim Anlegen (getOrCreateStripeCustomer) fehlen leere PLZ/Ort ganz;
das Loeschen per '' bleibt beim Abgleich (Aktualisieren)
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f0b57ebe41
commit
c0c1a3d7a9
2 files changed
+37
-6
No files matched your search
@@ -845,6 +845,8 @@ test('stripeCustomerFields (N3): Land - zweistelliger Code gross, deutsche Namen
|
||||
for (const empty of ['', ' ', undefined, null]) assert.equal(country(empty), 'DE', JSON.stringify(empty))
|
||||
// unbekannt: kein Land (Stripe behaelt seinen Wert)
|
||||
for (const unknown of ['Atlantis', 'Germany', 'D', 'DEU', 'Deutschland (DE)']) assert.ok(hasNoCountry(unknown), unknown)
|
||||
// Namen von Object.prototype sind keine Laender (kein Treffer ueber die Prototypkette)
|
||||
for (const proto of ['constructor', 'Constructor', '__proto__', 'toString', 'hasOwnProperty', 'valueOf']) assert.ok(hasNoCountry(proto), proto)
|
||||
// ohne Strasse bleibt es bei keiner Anschrift
|
||||
assert.equal(stripeCustomerFields({ country: 'Österreich' }).address, undefined)
|
||||
})
|
||||
@@ -858,6 +860,31 @@ test('stripeCustomerFields (N4): mit Strasse gehen PLZ und Ort immer mit, fehlen
|
||||
assert.equal(stripeCustomerFields({ postalCode: '10115', city: 'Berlin' }).address, undefined)
|
||||
})
|
||||
|
||||
test('stripeCustomerFields (forCreate): beim Anlegen fehlen leere PLZ/Ort ganz, mit Werten bleibt alles gleich', () => {
|
||||
assert.deepEqual(stripeCustomerFields({ street: 'Weg 1', postalCode: ' ', city: undefined }, { forCreate: true }).address, { line1: 'Weg 1', country: 'DE' })
|
||||
assert.deepEqual(stripeCustomerFields({ street: 'Weg 1', postalCode: '10115', city: '' }, { forCreate: true }).address, { line1: 'Weg 1', postal_code: '10115', country: 'DE' })
|
||||
assert.deepEqual(
|
||||
stripeCustomerFields({ street: 'Weg 1', postalCode: '10115', city: 'Berlin', country: 'AT' }, { forCreate: true }).address,
|
||||
stripeCustomerFields({ street: 'Weg 1', postalCode: '10115', city: 'Berlin', country: 'AT' }).address
|
||||
)
|
||||
assert.equal(stripeCustomerFields({ postalCode: '10115' }, { forCreate: true }).address, undefined)
|
||||
})
|
||||
|
||||
test('createProjectInvoice (forCreate): ein neuer Stripe-Kunde mit nur einer Strasse wird ohne leere Adressfelder angelegt, der Abgleich danach loescht per ""', async () => {
|
||||
aw.seed('customers', { $id: 'newStr', email: 'ns@example.invalid', name: 'Neu Strasse', customerStatus: 'active', status: 'active', street: 'Neue Str. 5' })
|
||||
await createProjectInvoice({ customerId: 'newStr', items: [BASE_ITEMS[1]], createdBy: 'k' })
|
||||
const [created] = callsTo('POST', '/v1/customers')
|
||||
assert.equal(created.body['address[line1]'], 'Neue Str. 5')
|
||||
assert.ok(!('address[postal_code]' in created.body), 'keine leere PLZ beim Anlegen')
|
||||
assert.ok(!('address[city]' in created.body), 'kein leerer Ort beim Anlegen')
|
||||
assert.deepEqual(Object.keys(created.body).filter((k) => k.startsWith('address[')), ['address[line1]', 'address[country]'])
|
||||
assert.ok(Object.entries(created.body).filter(([k]) => k.startsWith('address[')).every(([, v]) => v !== ''), 'leerer Adresswert im Anlege-Aufruf')
|
||||
// der Abgleich direkt danach (Aktualisieren) behaelt das Loeschen per leerem Text
|
||||
const [update] = callsTo('POST', /^\/v1\/customers\/cus_test_/)
|
||||
assert.equal(update.body['address[postal_code]'], '')
|
||||
assert.equal(update.body['address[city]'], '')
|
||||
})
|
||||
|
||||
test('Stripe-Nachbau (N4): Kunden-Update fuehrt die Anschrift zusammen wie Stripe, ein leerer Text loescht das Feld', async () => {
|
||||
st.customers.set('cus_m', { id: 'cus_m', object: 'customer', name: 'M', email: 'm@example.invalid', address: { line1: 'Alt 1', postal_code: '80331', city: 'München', country: 'DE' }, metadata: {} })
|
||||
const stripe = getStripe()
|
||||
|
||||
Reference in new issue
Block a user