70 lines
3.3 KiB
JavaScript
70 lines
3.3 KiB
JavaScript
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
|
|
}
|
|
})
|