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 } })