Buchungskalender: Zustimmungs-Test streng, Online-Zahlung nur beim Einschalten prüfen
Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
32cffb3518
commit
e3b399e003
3 files changed
+17
-5
No files matched your search
@@ -273,7 +273,7 @@ router.put('/einstellungen', ...schreib, route(async (req, res) => {
|
||||
if (rechnungAuftrag !== undefined && typeof rechnungAuftrag !== 'boolean') throw ungueltig({ rechnungAuftrag: 'Ungültige Eingabe.' })
|
||||
const r = vw.pruefeEinstellungen(rest, vorher)
|
||||
if (r.fehler) throw ungueltig(r.fehler)
|
||||
if (r.werte.onlineZahlung === true && stripeZustand(vorher) !== 'aktiv') {
|
||||
if (r.werte.onlineZahlung === true && !vorher.onlineZahlung && stripeZustand(vorher) !== 'aktiv') {
|
||||
throw new UkFehler(409, 'stripe_nicht_aktiv', { onlineZahlung: 'Online-Zahlung ist erst möglich, wenn dein Stripe-Konto aktiv ist.' })
|
||||
}
|
||||
if (r.werte.rechnungsPraefix !== undefined && r.werte.rechnungsPraefix !== (vorher.rechnungsPraefix ?? '') && !vw.zaehlerLeer(vorher)) {
|
||||
|
||||
@@ -83,7 +83,6 @@ export function pruefeEinstellungen(eingabe, vorher = {}) {
|
||||
}
|
||||
if (e.onlineZahlung !== undefined) {
|
||||
if (typeof e.onlineZahlung !== 'boolean') fehler.onlineZahlung = 'Ungültige Eingabe.'
|
||||
else if (e.onlineZahlung && !vorher.stripeAccountId) fehler.onlineZahlung = 'Dafür muss zuerst Stripe verbunden werden.'
|
||||
else werte.onlineZahlung = e.onlineZahlung
|
||||
}
|
||||
const gesamt = { ...vorher, ...werte }
|
||||
|
||||
@@ -581,9 +581,13 @@ test('Zustimmung: ohne rechnungAuftrag verweigern freigeben und bucheVerbindlich
|
||||
assert.equal(r.body.fehler, 'zustimmung_fehlt')
|
||||
assert.equal(aw.docs('ukAnfragen').get('a1').status, 'neu')
|
||||
const ab = await import('../server/services/unterkunft/ablauf.js')
|
||||
anfrage('a2', { status: 'freigegeben', tokenHash: 'x', fristAt: new Date(Date.now() + 86400000).toISOString(), posten: JSON.stringify(POSTEN), summen: JSON.stringify({ bruttoCent: 20000, nettoCent: 20000, ust: [] }) })
|
||||
const ctx = { featureId: FEATURE, einstellungen: { ...EINST } }
|
||||
await assert.rejects(ab.bucheVerbindlich(ctx, 'a2', 'x', { rechnungsadresse: {}, zahlart: 'vorort' }), (e) => e instanceof UkFehler && e.code === 'zustimmung_fehlt' || e.code === 'nicht_gefunden')
|
||||
const { token, hash } = (await import('../server/services/unterkunft/token.js')).neuesToken()
|
||||
anfrage('a2', { status: 'freigegeben', tokenHash: hash, fristAt: new Date(Date.now() + 86400000).toISOString(), posten: JSON.stringify(POSTEN), summen: JSON.stringify({ bruttoCent: 20000, nettoCent: 20000, ust: [] }) })
|
||||
const ctx = { featureId: FEATURE, einstellungen: { ...EINST, rechnungAuftragAt: null } }
|
||||
await assert.rejects(
|
||||
ab.bucheVerbindlich(ctx, 'a2', token, { rechnungsadresse: { name: 'Eva', strasse: 'Weg 1', plz: '12345', ort: 'Berlin', land: 'DE' }, zahlart: 'vorort' }),
|
||||
(e) => e instanceof UkFehler && e.status === 409 && e.code === 'zustimmung_fehlt',
|
||||
)
|
||||
assert.equal(aw.docs('ukAnfragen').get('a2').status, 'freigegeben')
|
||||
assert.equal(aw.docs('ukRechnungen').size, 0)
|
||||
})
|
||||
@@ -597,4 +601,13 @@ test('Online-Zahlung: nur mit aktivem Stripe-Konto, sonst 409 mit felder.onlineZ
|
||||
assert.equal(r.status, 409)
|
||||
assert.ok(r.body.felder.onlineZahlung)
|
||||
assert.notEqual(aw.docs('ukEinstellungen').get(FEATURE).onlineZahlung, true)
|
||||
// ohne Konto ebenfalls 409
|
||||
aw.seed('ukEinstellungen', { $id: FEATURE, featureId: FEATURE, ...EINST })
|
||||
const ohne = await put('/einstellungen', { onlineZahlung: true })
|
||||
assert.equal(ohne.status, 409)
|
||||
assert.ok(ohne.body.felder.onlineZahlung)
|
||||
// bereits eingeschaltet: andere Aenderungen scheitern nicht, auch wenn Stripe inaktiv ist
|
||||
aw.seed('ukEinstellungen', { $id: FEATURE, featureId: FEATURE, ...EINST, onlineZahlung: true })
|
||||
assert.equal((await put('/einstellungen', { telefon: '123' })).status, 200)
|
||||
assert.equal((await put('/einstellungen', { onlineZahlung: true })).status, 200)
|
||||
})
|
||||
Reference in new issue
Block a user