TP2 Abschlussprüfung: Zahlung/Team (Wiederzustellung, K16-Warnung, Sperrschlüssel)
- adoptPaidSession übernimmt ein erneut zugestelltes checkout.session.completed nicht mehr, wenn das Dokument nach 30 Tagen zurückgesetzt wurde (off, purchaseStatus zurueckgesetzt, gleiche Sitzung): kein Setup, kein Ticket, keine K15/T16 - meldeFreigeschaltet liefert true/false; die Staff-Aktivierung in Textform vermerkt eine nicht gesendete K16 mit Unterlagen in adminNote und antwortet mit warnung: true - disable() nutzt die Sperre feature-activate:<id> statt feature-disable:<id> (Freischaltung und Abschalten überholen sich nicht) Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
1 parent
4dc447ed33
commit
b974b3a3ec
7 files changed
+153
-6
No files matched your search
@@ -372,6 +372,37 @@ test('(7) Stripe-Sitzung laeuft ab, die Zahlung kommt doch: Uebernahme, setup, e
|
||||
assert.equal(mails.sent.length, 2)
|
||||
})
|
||||
|
||||
test('(7) A1: erneut zugestelltes checkout.session.completed nach der 30-Tage-Loeschung (off, zurueckgesetzt, gleiche Sitzung) wird nicht uebernommen', async (t) => {
|
||||
const sessionId = await bestelle()
|
||||
assert.equal((await webhook('checkout.session.completed', bezahlt(sessionId))).status, 200)
|
||||
// der 30-Tage-Lauf hat das Dokument zurueckgesetzt (siehe setzeFunktionZurueck); die Sitzungs-ID bleibt als Marke stehen
|
||||
const d0 = await doc()
|
||||
aw.seed('portalFeatures', {
|
||||
...d0,
|
||||
state: 'off',
|
||||
enabled: false,
|
||||
unlockedByPurchase: false,
|
||||
purchaseStatus: 'zurueckgesetzt',
|
||||
zahlungMeldung: '',
|
||||
ticketId: '',
|
||||
adminNote: 'Daten gelöscht (Löschfrist abgelaufen)',
|
||||
})
|
||||
const tickets0 = tickets().length
|
||||
const mails0 = mails.sent.length
|
||||
const stumm = STUMM(t)
|
||||
const warn = t.mock.method(console, 'warn', () => {})
|
||||
|
||||
// "Resend event" im Stripe-Dashboard: dasselbe Ereignis noch einmal
|
||||
assert.equal((await webhook('checkout.session.completed', bezahlt(sessionId))).status, 200)
|
||||
const d = await doc()
|
||||
assert.deepEqual([d.state, d.purchaseStatus, d.stripeSessionId, d.ticketId], ['off', 'zurueckgesetzt', sessionId, ''], 'nicht uebernommen')
|
||||
assert.equal(tickets().length, tickets0, 'kein neues Ticket')
|
||||
assert.equal(mails.sent.length, mails0, 'weder K15 noch T16')
|
||||
const log = geloggt(stumm) + warn.mock.calls.map((c) => c.arguments.join(' ')).join('\n')
|
||||
assert.match(log, new RegExp(`Sitzung ${sessionId} .*zurueckgesetzt`))
|
||||
assert.doesNotMatch(log, /k@example\.invalid|Salon/, 'keine personenbezogenen Daten im Log')
|
||||
})
|
||||
|
||||
// ------------------------------------------------------------------------------------ (8) Neubestellung nach Ablauf ---
|
||||
test('(8) Neubestellung nach Ablauf: die alte Sitzung zahlt (Uebernahme, ein Ticket), die neue danach ungeklaert, kein zweites Ticket', async (t) => {
|
||||
const alt = await bestelle()
|
||||
|
||||
Reference in new issue
Block a user