Finanzen: nur fuer Admins, Rueckkehrseite fuer die Bankfreigabe

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-01 15:12:18 +00:00
1 parent c910bedcec
commit 0069a62a09
6 files changed
+201 -3

No files matched your search

+59
View File
@@ -0,0 +1,59 @@
import test from 'node:test'
import assert from 'node:assert/strict'
import { loadModule } from './load.mjs'
const { parseCallback, successResult, failureResult, isResult } = await loadModule('src/lib/bankCallback.js')
test('parseCallback: code und state', () => {
assert.deepEqual(parseCallback('?state=a&code=b'), { code: 'b', state: 'a', error: '' })
})
test('parseCallback: Abbruch bei der Bank, error_description wird angehaengt', () => {
assert.deepEqual(
parseCallback('?state=a&error=access_denied&error_description=abgebrochen'),
{ code: '', state: 'a', error: 'access_denied: abgebrochen' },
)
assert.equal(parseCallback('?error=access_denied').error, 'access_denied')
})
test('parseCallback: ohne code und error -> null', () => {
assert.equal(parseCallback(''), null)
assert.equal(parseCallback('?'), null)
assert.equal(parseCallback('?state=a'), null)
assert.equal(parseCallback('?error_description=nur-text'), null)
assert.equal(parseCallback(undefined), null)
assert.equal(parseCallback(null), null)
assert.equal(parseCallback(42), null)
})
test('parseCallback: URL-Kodierung, erster Wert gewinnt, Suchteil auch ohne ?', () => {
assert.deepEqual(parseCallback('?code=a%2Bb%3D&state=x%20y'), { code: 'a+b=', state: 'x y', error: '' })
assert.equal(parseCallback('?code=erst&code=zweit').code, 'erst')
assert.deepEqual(parseCallback('code=b&state=a'), { code: 'b', state: 'a', error: '' })
})
test('successResult: gueltig bis uebernehmen', () => {
assert.deepEqual(successResult({ ok: true, validUntil: '2099-03-29T00:00:00.000Z' }), { ok: true, validUntil: '2099-03-29T00:00:00.000Z' })
assert.deepEqual(successResult({ ok: true }), { ok: true, validUntil: '' })
})
test('successResult: Antwort ohne ok -> Fehlerergebnis mit deutschem Text', () => {
const r = successResult({ ok: false })
assert.equal(r.ok, false)
assert.match(r.message, /Bankfreigabe/)
assert.equal(successResult(null).ok, false)
})
test('failureResult: Meldung des Servers, sonst Standardtext', () => {
assert.deepEqual(failureResult({ message: 'Die Freigabe ist abgelaufen.' }), { ok: false, message: 'Die Freigabe ist abgelaufen.' })
assert.match(failureResult(new Error('')).message, /Bankfreigabe/)
assert.match(failureResult(undefined).message, /Bankfreigabe/)
})
test('isResult: nur gueltige Ergebnisse aus dem Verlaufszustand', () => {
assert.equal(isResult({ ok: true, validUntil: 'x' }), true)
assert.equal(isResult({ ok: false, message: 'm' }), true)
assert.equal(isResult(null), false)
assert.equal(isResult({}), false)
assert.equal(isResult({ ok: 'ja' }), false)
})