Kundenansicht neu P7: GET /api/abo liefert Fassung 6 und Wortlaut nur der neuen Ansicht

Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
This commit is contained in:
ClaudeandClaude Sonnet 5.5 committed 2026-10-16 19:59:43 +00:00
1 parent 4a3b0030d2
commit bf1e968a83
2 files changed
+76 -1

No files matched your search

+69
View File
@@ -0,0 +1,69 @@
import { test, after } from 'node:test'
import assert from 'node:assert/strict'
import { startAppwriteMock } from './support/appwriteMock.js'
import { startFakeStripe } from './support/fakeStripe.js'
import { useTestEnv } from './support/testEnv.js'
import { schemaKeys } from './support/schema.js'
// GET /api/abo: Fassung 6 und Wortlaut nur für die neue Ansicht (Pilot), sonst die bisherige Antwort mit neun Schlüsseln
const aw = await startAppwriteMock({
schema: {
subscriptions: schemaKeys('subscriptions'),
contractEvents: schemaKeys('contractEvents'),
aboOffers: schemaKeys('aboOffers'),
hourCredits: schemaKeys('hourCredits'),
featureConsents: schemaKeys('featureConsents'),
},
})
const st = await startFakeStripe()
useTestEnv({ appwriteUrl: aw.url, stripeUrl: st.url })
Object.assign(process.env, { KUNDENANSICHT_NEU: 'pilot', KUNDENANSICHT_NEU_PILOT_EMAILS: 'K@example.invalid, k3@example.invalid' })
const { config } = await import('../server/config.js')
const { startTestApp, get } = await import('./support/testApp.js')
const { customerCookie, kundenansichtCookie, seedFixtures } = await import('./support/fixtures.js')
const { default: aboRoutes } = await import('../server/routes/abo.js')
const { termsDocFor } = await import('../server/services/products.js')
const app = await startTestApp({ '/api/abo': aboRoutes })
after(() => Promise.all([app.close(), aw.close(), st.close()]))
seedFixtures(aw)
test('Pilot-Kunde bekommt Fassung 6 und den Wortlaut', async () => {
const neu = await get('/api/abo', { cookie: customerCookie('c1') })
assert.equal(neu.termsVersion, config.abo.termsVersionNeu)
assert.deepEqual([neu.bestelltexte.status, neu.bestelltexte.fassung, neu.bestelltexte.knopf], ['entwurf', config.abo.termsVersionNeu, 'Zahlungspflichtig bestellen'])
assert.equal(neu.bestelltexte.abo.linkzeile.urls[0], termsDocFor(config.abo.termsVersionNeu).url)
assert.match(neu.bestelltexte.abo.linkzeile.text, new RegExp(`Fassung ${config.abo.termsVersionNeu}\\)`))
})
test('Kundenansicht der Mitarbeiter sieht dasselbe, Nicht-Pilot die alte Antwort', async () => {
assert.ok((await get('/api/abo', { cookie: kundenansichtCookie() })).bestelltexte)
const alt = await get('/api/abo', { cookie: customerCookie('c2') })
assert.equal(alt.termsVersion, config.abo.termsVersion)
assert.deepEqual(Object.keys(alt).sort(), ['available', 'lateStartAt', 'ledger', 'mailStorage', 'offers', 'products', 'subscription', 'termsVersion', 'testAccount'])
})
test('Ohne Neu-Fassung in der Konfiguration bleibt auch der Pilot bei der alten Antwort', async () => {
const gemerkt = config.abo.termsVersionNeu
for (const leer of ['', undefined]) {
config.abo.termsVersionNeu = leer
try {
const r = await get('/api/abo', { cookie: customerCookie('c1') })
assert.equal('bestelltexte' in r, false)
assert.equal(r.termsVersion, config.abo.termsVersion)
} finally {
config.abo.termsVersionNeu = gemerkt
}
}
})
test('Schalter off: auch ein Pilot-Kunde bekommt die alte Antwort', async () => {
const modus = config.kundenansichtNeu.mode
config.kundenansichtNeu.mode = 'off'
try {
const r = await get('/api/abo', { cookie: customerCookie('c1') })
assert.deepEqual([r.termsVersion, 'bestelltexte' in r], [config.abo.termsVersion, false])
} finally {
config.kundenansichtNeu.mode = modus
}
})